k8s技术--Kubernetes集群kubectl命令的常见使用方法

简介:kubectl是一个命令行界面,用于运行针对Kubernetes群集的命令。

语法:

kubectl [command] [TYPE] [NAME] [flags]

  • command:指定您希望对一个或多个资源执行的操作,例如创建,获取,描述,删除。
  • TYPE:指定资源类型。 资源类型区分大小写,可以使用单数,复数或缩写形式。
  • NAME:指定资源的名称。 名称区分大小写。 如果省略名称,则会显示所有资源的详细信息,例如$ kubectl get pod。
  • flags:指定可选标志。 例如,可以使用-s或--server标志来指定Kubernetes API服务器的地址和端口。

1、显示Pod的更多信息

kubectl get pod <pod-name> -o wide

以yaml格式显示Pod的详细信息

kubectl get pod <pod-name> -o yaml

2、创建资源对象

根据yaml配置文件一次性创建service和rc

kubectl create -f my-service.yaml -f my-rc.yaml

根据<directory>目录下所有.yaml、.yml、.json文件的定义进行创建操作

kubectl create -f <directory>

3、查看资源对象

查看所有Pod列表

kubectl get pods

4、查看rc和service列表

kubectl get rc,service

5、描述资源对象

显示Node的详细信息

kubectl describe nodes <node-name>

显示Pod的详细信息

kubectl describe pods/<pod-name>

显示由RC管理的Pod的信息

kubectl describe pods <rc-name>

6、删除资源对象

基于Pod.yaml定义的名称删除Pod

kubectl delete -f pod.yaml

删除所有包含某个label的Pod和service

kubectl delete pods,services -l name=<label-name>

删除所有Pod

kubectl delete pods --all

7、执行容器的命令

执行Pod的data命令,默认是用Pod中的第一个容器执行

kubectl exec <pod-name> data

指定Pod中某个容器执行data命令

kubectl exec <pod-name> -c <container-name> data

通过bash获得Pod中某个容器的TTY,相当于登录容器

kubectl exec -it <pod-name> -c <container-name> /bin/bash

8、使用一些复杂过滤条件查看特定的资源对象

# 根据重启次数排序列出 pod

$ kubectl get pods --sort-by=‘.status.containerStatuses[0].restartCount‘

# 获取所有具有 app=cassandra 的 pod 中的 version 标签

$ kubectl get pods --selector=app=cassandra rc -o  jsonpath=‘{.items[*].metadata.labels.version}‘

# 获取所有节点的 ExternalIP

$ kubectl get nodes -o jsonpath=‘{.items[*].status.addresses[?(@.type=="ExternalIP")].address}‘

# 查看哪些节点已就绪

$ JSONPATH=‘{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}‘ && kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"

9、Pod的扩容缩容、滚动升级以及更新资源配置

执行扩容缩容Pod的操作

kubectl scale rc redis --replicas=3

我们需要确认的是在rc配置文件中定义的replicas数量,当我们执行上述命令的结果大于replicas的数量时,则我们执行的命令相当于扩容操作,反之相反,可以理解为我们填写的数量是我们需要的Pod数量。需要注意的是,当我们需要进行永久性扩容时,不要忘记修改rc配置文件中的replicas数量。

Pod的滚动升级

执行滚动升级操作

kubectl rolling-update redis -f redis-rc.update.yaml

需要注意的是当我们执行rolling-update命令前需要准备好新的RC配置文件以及ConfigMap配置文件,RC配置文件中需要指定升级后需要使用的镜像名称,或者可以使用kubeclt rolling-update redis --image=redis-2.0直接指定镜像名称的方式直接升级。

# 强制替换,删除后重新创建资源。会导致服务中断。

$ kubectl replace --force -f ./pod.json

# 为 nginx RC 创建服务,启用本地 80 端口连接到容器上的 8000 端口

$ kubectl expose rc nginx --port=80 --target-port=8000

# 更新单容器 pod 的镜像版本(tag)到 v4

$ kubectl get pod mypod -o yaml | sed ‘s/image:myimageimage:myimage:.*$/\1:v4/‘ | kubectl replace -f -

$ kubectl label pods my-pod new-label=awesome # 添加标签

$ kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq # 添加注解

$ kubectl autoscale deployment foo --min=2 --max=10 # 自动扩展 deployment “foo”

10、查看容器的日志

查看容器输出到stdout的日志:

kubectl logs <pod-name>

跟踪查看容器的日志(tail -f):

kubectl logs -f <pod-name> -n <namespace> -c <container-name>

11、Kubectl context和配置

修改kubectl命令行工具默认使用的apiServer地址、集群CA和客户端证书:

[[email protected] ssl]# kubectl config set-cluster default-cluster --server=https://10.0.2.5:6443 --certificate-authority=/etc/kubernetes/ssl/ca.crt

Cluster "default-cluster" set.

[[email protected] ssl]# kubectl config set-credentials default-admin --certificate-authority=/etc/kubernetes/ssl/ca.crt --client-key=/etc/kubernetes/ssl/cs_client.key --client-certificate=/etc/kubernetes/ssl/cs_client.crt

User "default-admin" set.

[[email protected] ssl]# kubectl config set-context default-system --cluster=default-cluster --user=default-admin  在kubeconfig配置中添加一条名为default-system的上下文记录

Context "default-system" created.

[[email protected] ssl]# kubectl config use-context default-system     #设置默认上下文为default-system

Switched to context "default-system".

[[email protected] ~]# kubectl config current-context   #查看当前的上下文

default-system

详细如下:

创建 kubeconfig 文件

kubeconfig 为 kubectl 的配置文件,包含访问 apiserver 的所有信息,如 apiserver 地址、CA 证书和自身使用的证书;

source /opt/k8s/bin/environment.sh
# 设置集群参数
kubectl config set-cluster kubernetes   --certificate-authority=/etc/kubernetes/cert/ca.pem   --embed-certs=true   --server=${KUBE_APISERVER}   --kubeconfig=kubectl.kubeconfig

# 设置客户端认证参数
kubectl config set-credentials admin   --client-certificate=admin.pem   --client-key=admin-key.pem   --embed-certs=true   --kubeconfig=kubectl.kubeconfig

# 设置上下文参数
kubectl config set-context kubernetes   --cluster=kubernetes   --user=admin   --kubeconfig=kubectl.kubeconfig

# 设置默认上下文
kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig
  • --certificate-authority:验证 kube-apiserver 证书的根证书;
  • --client-certificate--client-key:刚生成的 admin 证书和私钥,连接 kube-apiserver 时使用;
  • --embed-certs=true:将 ca.pem 和 admin.pem 证书内容嵌入到生成的 kubectl.kubeconfig 文件中(不加时,写入的是证书文件路径);

分发 kubeconfig 文件

分发到所有使用 kubectl 命令的节点:

source /opt/k8s/bin/environment.sh
for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh [email protected]${node_ip} "mkdir -p ~/.kube"
    scp kubectl.kubeconfig [email protected]${node_ip}:~/.kube/config
    ssh [email protected]${node_ip} "mkdir -p ~/.kube"
    scp kubectl.kubeconfig [email protected]${node_ip}:~/.kube/config
  done
  • 保存到用户的 ~/.kube/config 文件;

查看kubectl context配置信息:

# kubectl config view

apiVersion: v1

clusters:

- cluster:

certificate-authority: /etc/kubernetes/ssl/ca.crt

server: https://10.0.2.5:6443

name: default-cluster

contexts:

- context:

cluster: default-cluster

user: default-admin

name: default-system

current-context: default-system

kind: Config

preferences: {}

users:

- name: default-admin

user:

client-certificate: /etc/kubernetes/ssl/cs_client.crt

client-key: /etc/kubernetes/ssl/cs_client.key

显示当前的上下文:

[[email protected] ~]# kubectl config current-context

default-system

12、在线编辑资源

# kubectl edit svc/mysql  #可以直接对各种资源对象进行在线编辑变更

13、节点和集群信息查询或调度方法

$ kubectl cordon my-node # 标记 my-node 不可调度

$ kubectl drain my-node # 清空 my-node 以待维护

$ kubectl uncordon my-node # 标记 my-node 可调度

$ kubectl top node my-node # 显示 my-node 的指标度量

$ kubectl cluster-info # 显示 master 和服务的地址

$ kubectl cluster-info dump # 将当前集群状态输出到 stdout

$ kubectl cluster-info dump --output-directory=/path/to/cluster-state # 将当前集群状态输出到 /path/to/cluster-state

# 如果该键和影响的污点(taint)已存在,则使用指定的值替换

$ kubectl taint nodes foo dedicated=special-user:NoSchedule

14、资源类型列表

下表列出的是 kubernetes 中所有支持的类型和缩写的别名。


资源类型

缩写别名

apiservices

 

certificatesigningrequests

csr

clusters

 

clusterrolebindings

 

clusterroles

 

componentstatuses

cs

configmaps

cm

controllerrevisions

 

cronjobs

 

customresourcedefinition

crd

daemonsets

ds

deployments

deploy

endpoints

ep

events

ev

horizontalpodautoscalers

hpa

ingresses

ing

jobs

 

limitranges

limits

namespaces

ns

networkpolicies

netpol

nodes

no

persistentvolumeclaims

pvc

persistentvolumes

pv

poddisruptionbudget

pdb

podpreset

 

pods

po

podsecuritypolicies

psp

podtemplates

 

replicasets

rs

replicationcontrollers

rc

resourcequotas

quota

rolebindings

 

roles

 

secrets

 

serviceaccounts

sa

services

svc

statefulsets

 

storageclasses

 

15、kubectl的格式化输出

要以特定的格式向终端窗口输出详细信息,可以在 kubectl 命令中添加 -o 或者 -output 标志。


输出格式

描述

-o=custom-columns=<spec>

使用逗号分隔的自定义列列表打印表格

-o=custom-columns-file=<filename>

使用 文件中的自定义列模板打印表格

-o=json

输出 JSON 格式的 API 对象

-o=jsonpath=<template>

打印 jsonpath 表达式中定义的字段

-o=jsonpath-file=<filename>

打印由 文件中的 jsonpath 表达式定义的字段

-o=name

仅打印资源名称

-o=wide

以纯文本格式输出任何附加信息,对于 Pod ,包含节点名称

-o=yaml

输出 YAML 格式的 API 对象

16、Kubectl 日志打印级别

使用 -v 或 --v 标志跟着一个整数来指定日志级别。


详细等级

描述

--v=0

总是对操作人员可见。

--v=1

合理的默认日志级别,如果您不需要详细输出。

--v=2

可能与系统的重大变化相关的,有关稳定状态的信息和重要的日志信息。这是对大多数系统推荐的日志级别。

--v=3

有关更改的扩展信息。

--v=4

调试级别详细输出。

--v=6

显示请求的资源。

--v=7

显示HTTP请求的header。

--v=8

显示HTTP请求的内容。

参考:

https://kubernetes.io/docs/reference/kubectl/overview/

https://jimmysong.io/kubernetes-handbook/guide/kubectl-cheatsheet.html

原文地址:https://www.cnblogs.com/cheyunhua/p/10168501.html

时间: 2024-09-29 11:26:02

k8s技术--Kubernetes集群kubectl命令的常见使用方法的相关文章

纯手工搭建kubernetes(k8s)1.9集群 - (二)核心模块部署

1. 部署ETCD(主节点) 1.1 简介 ??kubernetes需要存储很多东西,像它本身的节点信息,组件信息,还有通过kubernetes运行的pod,deployment,service等等.都需要持久化.etcd就是它的数据中心.生产环境中为了保证数据中心的高可用和数据的一致性,一般会部署最少三个节点.我们这里以学习为主就只在主节点部署一个实例. 如果你的环境已经有了etcd服务(不管是单点还是集群),可以忽略这一步.前提是你在生成配置的时候填写了自己的etcd endpoint哦~

kubernetes集群管理常用命令一

系列目录 我们把集群管理命令分为两个部分,第一部分介绍一些简单的,但是可能是非常常用的命令以及一些平时可能没有碰到的技巧.第二部分将综合前面介绍的工具通过示例来讲解一些更为复杂的命令. 列出集群中所有pod 使用kubectl get pods获取的一般是默认名称空间的信息(可以在配置文件中指定默认全称空间,如果没有指定则默认为default).如果想要获取获取非默认名称空间的pod,则需要指定-n(或者--namespace)参数.但是有些时候我们想要查看整个集群中所有名称空间的pod,则可以

Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)

概述: 这篇文章是为了介绍使用kubeadm安装Kubernetes集群(可以用于生产级别).使用了Centos 7系统. PS: 篇幅有点长,但是比较详细.比较全面 一.Centos7 配置说明 1.1   Firewalld(防火墙) CentOS Linux 7 默认开起来防火墙服务(firewalld),而Kubernetes的Master与工作Node之间会有大量的网络通信,安全的做法是在防火墙上配置Kbernetes各组件(api-server.kubelet等等)需要相互通信的端口

Kubernetes 集群日志管理 - 每天5分钟玩转 Docker 容器技术(180)

Kubernetes 开发了一个 Elasticsearch 附加组件来实现集群的日志管理.这是一个 Elasticsearch.Fluentd 和 Kibana 的组合.Elasticsearch 是一个搜索引擎,负责存储日志并提供查询接口:Fluentd 负责从 Kubernetes 搜集日志并发送给 Elasticsearch:Kibana 提供了一个 Web GUI,用户可以浏览和搜索存储在 Elasticsearch 中的日志. 部署 Elasticsearch 附加组件本身会作为 K

在kubernetes 集群内访问k8s API服务

所有的 kubernetes 集群中账户分为两类,Kubernetes 管理的 serviceaccount(服务账户) 和 useraccount(用户账户).基于角色的访问控制(“RBAC”)使用“rbac.authorization.k8s.io”API 组来实现授权控制,允许管理员通过Kubernetes API动态配置策略. API Server 内部通过用户认证后,然后进入授权流程.对合法用户进行授权并且随后在用户访问时进行鉴权,是权限管理的重要环节.在 kubernetes 集群中

安装部署Kubernetes集群实战

kubernetes概述: Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制.Kubernetes是Google 2014年创建管理的,是Google 10多年大规模容器管理技术Borg的开源版本. 通过kubernetes可以实现的功能: 快速部署应用 快速扩展应用 无缝对接新的应用功能 节省资源,优化硬件资源的使用 我们的目

Centos7上安装Kubernetes集群部署docker

一.安装前准备 1.操作系统详情 需要三台主机,都最小化安装 centos7.3,并update到最新 cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core)  角色主机名IP Master      master192.168.1.14 node1    slave-1192.168.1.15 node2slave-2192.168.1.16 2.在每台主机上关闭firewalld改用iptables 输入以下命令,关闭fire

Centos7 下安装入门级别的kubernetes集群

前情说明: 三台Centos7系统的虚拟机(1个master+2个node),三台机器上的防火墙,SELINUX全部关掉.我的实验坏境可以上网,默认的YUM源就可以用. 1.什么是kubernetes Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg).在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性. Kubernetes优势: - 容器编排         - 轻量级

Shell脚本快速部署Kubernetes集群系统

本文紧跟上节所讲的手动部署Kubernetes管理Docker篇所写,本篇主要内容利用Shell脚本完成快速部署Kubernetes集群.上节博文看过的朋友也能感觉到部署过程相对比较简单,那么,出于简化工作流程,推进运维自动化角度来说,于是花了2/3天时间写这个部署Kubernetes脚本. 运维工作中,常常会遇到部署各种各样的服务,建议:常规部署都应该尽量使用脚本完成,一方面提高自身脚本编写能力,另一方面推进运维自动化. 详细部署说明文档:http://lizhenliang.blog.51c