Skip to content

文档,

https://kubernetes.io/zh-cn/docs/reference/kubectl/

https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#get

1. kubectl安装

bash
# 下载最新版本:
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

# 下载特定版本:
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.7.0/bin/linux/amd64/kubectl

# 下载到本地后,对kubectl二进制添加可执行权限:
chmod +x ./kubectl

# 将二进制文件移动到PATH中:
mv ./kubectl /usr/local/bin/kubectl
# 下载最新版本:
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

# 下载特定版本:
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.7.0/bin/linux/amd64/kubectl

# 下载到本地后,对kubectl二进制添加可执行权限:
chmod +x ./kubectl

# 将二进制文件移动到PATH中:
mv ./kubectl /usr/local/bin/kubectl

kubectl设置简写

bash
cat >> ~/.bashrc << EOF 
alias kg='kubectl get'
alias k='kubectl'
alias kd='kubectl describe pods'
alias ke='kubectl explain'
alias ka='kubectl apply'
EOF

source ~/.bashrc
cat >> ~/.bashrc << EOF 
alias kg='kubectl get'
alias k='kubectl'
alias kd='kubectl describe pods'
alias ke='kubectl explain'
alias ka='kubectl apply'
EOF

source ~/.bashrc
bash
kg po #查看default名字空间下的po数量
NAME                                              READY   STATUS    RESTARTS       AGE
busybox                                           1/1     Running   1 (21d ago)    21d
counter                                           1/1     Running   5 (62d ago)    134d
http-svc-65b48ffc7b-2dzqt                         1/1     Running   6 (62d ago)    138d
http-svc-65b48ffc7b-b6rtz                         1/1     Running   5 (62d ago)    138d
http-svc-65b48ffc7b-sqtvt                         1/1     Running   5 (62d ago)    138d
nfs-subdir-external-provisioner-796df7c59-gcwc2   1/1     Running   39 (37d ago)   139d
nginx-demo-98c8d48ff-r6wmv                        1/1     Running   5 (62d ago)    156d

# 另外说一个技巧,可以通过"kubectl api-resource"查看当前集群中拥有的api-resources,其中第二个栏位“SHORTNAMES”对应相关资源的简写。
k api-resources  #实际输出内容较多,这里支截取了精华部分
NAME                              SHORTNAMES                                      APIVERSION                             NAMESPACED   KIND
bindings                                                                          v1                                     true         Binding
componentstatuses                 cs                                              v1                                     false        ComponentStatus
configmaps                        cm                                              v1                                     true         ConfigMap
endpoints                         ep                                              v1                                     true         Endpoints
events                            ev                                              v1                                     true         Event
limitranges                       limits                                          v1                                     true         LimitRange
namespaces                        ns                                              v1                                     false        Namespace
nodes                             no                                              v1                                     false        Node
persistentvolumeclaims            pvc                                             v1                                     true         PersistentVolumeClaim
persistentvolumes                 pv                                              v1                                     false        PersistentVolume
pods                              po                                              v1                                     true         Pod
podtemplates                                                                      v1                                     true         PodTemplate
replicationcontrollers            rc                                              v1                                     true         ReplicationController
resourcequotas                    quota                                           v1                                     true         ResourceQuota
secrets                                                                           v1                                     true         Secret
serviceaccounts                   sa                                              v1                                     true         ServiceAccount
services                          svc                                             v1                                     true         Service

# 例如 "kg ns" 就等价于 “kubectl get namespace”
kg ns
NAME                STATUS   AGE
calico-apiserver    Active   156d
calico-system       Active   156d
cronjob             Active   131d
tigera-operator     Active   156d
kg po #查看default名字空间下的po数量
NAME                                              READY   STATUS    RESTARTS       AGE
busybox                                           1/1     Running   1 (21d ago)    21d
counter                                           1/1     Running   5 (62d ago)    134d
http-svc-65b48ffc7b-2dzqt                         1/1     Running   6 (62d ago)    138d
http-svc-65b48ffc7b-b6rtz                         1/1     Running   5 (62d ago)    138d
http-svc-65b48ffc7b-sqtvt                         1/1     Running   5 (62d ago)    138d
nfs-subdir-external-provisioner-796df7c59-gcwc2   1/1     Running   39 (37d ago)   139d
nginx-demo-98c8d48ff-r6wmv                        1/1     Running   5 (62d ago)    156d

# 另外说一个技巧,可以通过"kubectl api-resource"查看当前集群中拥有的api-resources,其中第二个栏位“SHORTNAMES”对应相关资源的简写。
k api-resources  #实际输出内容较多,这里支截取了精华部分
NAME                              SHORTNAMES                                      APIVERSION                             NAMESPACED   KIND
bindings                                                                          v1                                     true         Binding
componentstatuses                 cs                                              v1                                     false        ComponentStatus
configmaps                        cm                                              v1                                     true         ConfigMap
endpoints                         ep                                              v1                                     true         Endpoints
events                            ev                                              v1                                     true         Event
limitranges                       limits                                          v1                                     true         LimitRange
namespaces                        ns                                              v1                                     false        Namespace
nodes                             no                                              v1                                     false        Node
persistentvolumeclaims            pvc                                             v1                                     true         PersistentVolumeClaim
persistentvolumes                 pv                                              v1                                     false        PersistentVolume
pods                              po                                              v1                                     true         Pod
podtemplates                                                                      v1                                     true         PodTemplate
replicationcontrollers            rc                                              v1                                     true         ReplicationController
resourcequotas                    quota                                           v1                                     true         ResourceQuota
secrets                                                                           v1                                     true         Secret
serviceaccounts                   sa                                              v1                                     true         ServiceAccount
services                          svc                                             v1                                     true         Service

# 例如 "kg ns" 就等价于 “kubectl get namespace”
kg ns
NAME                STATUS   AGE
calico-apiserver    Active   156d
calico-system       Active   156d
cronjob             Active   131d
tigera-operator     Active   156d

1.1 创建

create apply的区别

create 创建相同的名字的,会创建失败,但apply不会,这个会重新创建

kubectl apply -f和kubectl create -f有什么区别

kubectl create属于Imperative command(祈使式命令),它明确告诉kubectl要创建某个资源或对象;

kubectl apply是Declarative command(声明式命令),apply并不告诉kubectl具体做什么,而是由kubectl根据后面-f中的yaml文件与k8s中对应的object对比,自动探测要进行哪些操作,比如如果object不存在,则create;如果已经存在,则对比差异,update and replace

1.1create

shell
语法,kubectl create -f FILENAME
语法,kubectl create -f FILENAME

deployment

shell
语法,kubectl create deployment NAME --image=image -- [COMMAND] [args...]


例子,
kubectl create deployment my-dep --image=nginx --replicas=3

#指定namespace
kubectl create deployment my-dep --image=nginx --replicas=3 -n namespace_name

#生成yaml 文件
kubectl create deployment my-dep --image=nginx --replicas=3 --dry-run -oyaml
语法,kubectl create deployment NAME --image=image -- [COMMAND] [args...]


例子,
kubectl create deployment my-dep --image=nginx --replicas=3

#指定namespace
kubectl create deployment my-dep --image=nginx --replicas=3 -n namespace_name

#生成yaml 文件
kubectl create deployment my-dep --image=nginx --replicas=3 --dry-run -oyaml

创建模版

bash
#创建deploy
kubectl create deployment nginx-2 --image=10.122.6.81:5000/image/nginx:v1 --dry-run -oyaml
#创建svc
kubectl create service clusterip my-cs --tcp=5678:8080 --dry-run -oyaml

--dir-run   #不做创建操作
-oyaml      #输出为yaml文件

#如果不会写创建资源命令可以使用-h查看帮助,如
kubectl create deploy -h
kubectl create svc -h
....
#创建deploy
kubectl create deployment nginx-2 --image=10.122.6.81:5000/image/nginx:v1 --dry-run -oyaml
#创建svc
kubectl create service clusterip my-cs --tcp=5678:8080 --dry-run -oyaml

--dir-run   #不做创建操作
-oyaml      #输出为yaml文件

#如果不会写创建资源命令可以使用-h查看帮助,如
kubectl create deploy -h
kubectl create svc -h
....

1.2apply

bash
语法,kubectl apply (-f FILENAME | -k DIRECTORY)
语法,kubectl apply (-f FILENAME | -k DIRECTORY)

2.删除

2.1 delete

shell
#创建
kubectl create deployment my-dep --image=nginx --replicas=3

#查看
kubectl get pod

#删除,或者delete -f xx.yaml
kubectl delete deployment my-dep
#创建
kubectl create deployment my-dep --image=nginx --replicas=3

#查看
kubectl get pod

#删除,或者delete -f xx.yaml
kubectl delete deployment my-dep

3.查看

3.1describe

shell
# 显示名为 <pod-name> 的 Pod 的详细信息。
kubectl describe nodes <node-name>
或者
kubectl describe nodes/<node-name>

# 显示名为 <pod-name> 的 Pod 的详细信息。
kubectl describe pods/<pod-name>

# 显示由名为 <rc-name> 的副本控制器管理的所有 Pod 的详细信息。
# 记住:副本控制器创建的任何 Pod 都以副本控制器的名称为前缀。
kubectl describe pods <rc-name>

# 描述所有的 Pod
kubectl describe pods
# 显示名为 <pod-name> 的 Pod 的详细信息。
kubectl describe nodes <node-name>
或者
kubectl describe nodes/<node-name>

# 显示名为 <pod-name> 的 Pod 的详细信息。
kubectl describe pods/<pod-name>

# 显示由名为 <rc-name> 的副本控制器管理的所有 Pod 的详细信息。
# 记住:副本控制器创建的任何 Pod 都以副本控制器的名称为前缀。
kubectl describe pods <rc-name>

# 描述所有的 Pod
kubectl describe pods

3.2get

svc

shell

[root@kube-master ~]# kubectl get svc|service
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   192.168.0.1      <none>        443/TCP          25h
nginx        NodePort    192.168.253.94   <none>        8080:32498/TCP   172m

#查看所有 -A
kubectl get svc -A

[root@kube-master ~]# kubectl get svc|service
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   192.168.0.1      <none>        443/TCP          25h
nginx        NodePort    192.168.253.94   <none>        8080:32498/TCP   172m

#查看所有 -A
kubectl get svc -A

componentstatuses

shell
[root@kube-master yaml]# kubectl get componentstatuses
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE                         ERROR
etcd-0               Healthy   {"health":"true","reason":""}
scheduler            Healthy   ok
controller-manager   Healthy   ok

#- --port=0 注释(kubeadmin)
[root@kube-master yaml]# kubectl get componentstatuses
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE                         ERROR
etcd-0               Healthy   {"health":"true","reason":""}
scheduler            Healthy   ok
controller-manager   Healthy   ok

#- --port=0 注释(kubeadmin)
bash
#查找资源
kubectl get deployments.apps

#按标签查找资源
kubectl get deployments.apps -l app=redis

#一次查看多个指定的不通类型资源
kubectl get -n kube-system service/xx deployments.apps/xx

#查找一个资源并且输出为yaml文件
kubectl get deployments.apps  nginx -oyaml -A

#查看pv并且以容量排序
kubectl get pv --sort-by=spec.capacity.storage

#列出事件(Events),按时间戳排序
kubectl get events --sort-by=.metadata.creationTimestamp -A

-owide  #以列表方式查看更详细的信息
-oyaml  #以yaml文件格式输出
-A      #所有命名空间
--sort-by  #排序,以资源中定义的某些信息排序
--show-labels #显示资源的labels
-l          #显示匹配标签的资源

#查看一个资源的详细信息
kubectl describe nodes 10.122.6.75
#查找资源
kubectl get deployments.apps

#按标签查找资源
kubectl get deployments.apps -l app=redis

#一次查看多个指定的不通类型资源
kubectl get -n kube-system service/xx deployments.apps/xx

#查找一个资源并且输出为yaml文件
kubectl get deployments.apps  nginx -oyaml -A

#查看pv并且以容量排序
kubectl get pv --sort-by=spec.capacity.storage

#列出事件(Events),按时间戳排序
kubectl get events --sort-by=.metadata.creationTimestamp -A

-owide  #以列表方式查看更详细的信息
-oyaml  #以yaml文件格式输出
-A      #所有命名空间
--sort-by  #排序,以资源中定义的某些信息排序
--show-labels #显示资源的labels
-l          #显示匹配标签的资源

#查看一个资源的详细信息
kubectl describe nodes 10.122.6.75

3.3logs

kubectl logs -f <pod-name>
kubectl logs -f <pod-name>

3.4 查看image

bash
[root@kube-master-01 ~]# kubectl -n kube-system get ds calico-node -oyaml | grep image:
        image: registry.cn-zhangjiakou.aliyuncs.com/hsuing/node:v3.28.0
        image: registry.cn-zhangjiakou.aliyuncs.com/hsuing/cni:v3.28.0
        image: registry.cn-zhangjiakou.aliyuncs.com/hsuing/cni:v3.28.0
        image: registry.cn-zhangjiakou.aliyuncs.com/hsuing/node:v3.28.0
[root@kube-master-01 ~]# kubectl -n kube-system get ds calico-node -oyaml | grep image:
        image: registry.cn-zhangjiakou.aliyuncs.com/hsuing/node:v3.28.0
        image: registry.cn-zhangjiakou.aliyuncs.com/hsuing/cni:v3.28.0
        image: registry.cn-zhangjiakou.aliyuncs.com/hsuing/cni:v3.28.0
        image: registry.cn-zhangjiakou.aliyuncs.com/hsuing/node:v3.28.0

4.操作Pod

shell
# 从 Pod <pod-name> 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器。
kubectl exec <pod-name> -- date

# 运行输出 'date' 获取在 Pod <pod-name> 中容器 <container-name> 的输出。
kubectl exec <pod-name> -c <container-name> -- date

# 获取一个交互 TTY 并在 Pod  <pod-name> 中运行 /bin/bash。默认情况下,输出来自第一个容器。
kubectl exec -ti <pod-name> -- /bin/bash
# 从 Pod <pod-name> 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器。
kubectl exec <pod-name> -- date

# 运行输出 'date' 获取在 Pod <pod-name> 中容器 <container-name> 的输出。
kubectl exec <pod-name> -c <container-name> -- date

# 获取一个交互 TTY 并在 Pod  <pod-name> 中运行 /bin/bash。默认情况下,输出来自第一个容器。
kubectl exec -ti <pod-name> -- /bin/bash

5.格式化输出

要以特定格式将详细信息输出到终端窗口,将 -o(或者 --output)参数添加到支持的 kubectl 命令中

bash
#输出集群中运行着的所有镜像
kubectl get pods -A -o=custom-columns='IMAGES:spec.containers[*].image'

#获取deploy的名称与副本数,单个
kubectl get deployment -A -o jsonpath='{.metadata.name}{"\t"}{.spec.replicas}{"\n"}'

#获取deploy的名称与副本数,列表
kubectl get deployment -A -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.replicas}{"\n"}'
#输出集群中运行着的所有镜像
kubectl get pods -A -o=custom-columns='IMAGES:spec.containers[*].image'

#获取deploy的名称与副本数,单个
kubectl get deployment -A -o jsonpath='{.metadata.name}{"\t"}{.spec.replicas}{"\n"}'

#获取deploy的名称与副本数,列表
kubectl get deployment -A -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.replicas}{"\n"}'

jsonpath说明:

  • {range .items[*]}:循环列表
  • {"\t"}:制表符
  • {"\n"}:换行

6. config

bash
# 查看所有的集群,因为你的 .kubeconfig 文件中可能包含多个上下文
kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'

# 指向引用该集群名称的 API 服务器
kubectl config view -o jsonpath="{.clusters[?(@.name==\"$CLUSTER_NAME\")].cluster.server}"


#获取token
kubectl get secret default-token -o jsonpath='{.data.token}' | base64 --decode

# 使用令牌玩转 API
curl -X GET $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
# 查看所有的集群,因为你的 .kubeconfig 文件中可能包含多个上下文
kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'

# 指向引用该集群名称的 API 服务器
kubectl config view -o jsonpath="{.clusters[?(@.name==\"$CLUSTER_NAME\")].cluster.server}"


#获取token
kubectl get secret default-token -o jsonpath='{.data.token}' | base64 --decode

# 使用令牌玩转 API
curl -X GET $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure

7. 集群管理命令

语法格式:
kubectl  [command]  [TYPE]  [NAME]  [flags]
command: 子命令,如create、get、describe、delete
type: 资源类型,可以表示单数,复数或缩写形式
name: 资源的名称,如果省略,泽显示所有资源信息
flags: 指定可选标志,或附加的参数
语法格式:
kubectl  [command]  [TYPE]  [NAME]  [flags]
command: 子命令,如create、get、describe、delete
type: 资源类型,可以表示单数,复数或缩写形式
name: 资源的名称,如果省略,泽显示所有资源信息
flags: 指定可选标志,或附加的参数
子命令说明
help用于查看命令及子命令的帮助信息
cluster-info显示集群的相关配置信息
version查看服务器及客户端的版本信息
api-resources查看当前服务器上所有的资源对象
api-versions查看当前服务器上所有资源对象的版本
config管理当前节点上kubeconfig 的认证信息
bash
#查看集群健康情况
kubectl get cs

#集群核心组件运行情况
kubectl cluster-info

#查看表空间名
kubectl get namespaces

#查看版本
kubectl version

#查看API
kubectl api-versions

#查看事件
kubectl get events

#获取全部节点
kubectl get nodes

#删除节点
kubectl delete node k8s2
#查看集群健康情况
kubectl get cs

#集群核心组件运行情况
kubectl cluster-info

#查看表空间名
kubectl get namespaces

#查看版本
kubectl version

#查看API
kubectl api-versions

#查看事件
kubectl get events

#获取全部节点
kubectl get nodes

#删除节点
kubectl delete node k8s2

8. 命名空间

8.1 获取

bash
[root@master ~]# kubectl get ns # 简写
[root@master ~]# kubectl get namespaces # 全写
[root@master ~]# kubectl -n 命名空间 get pods  # 查看命名空间中的资源对象
[root@master ~]# kubectl get ns # 简写
[root@master ~]# kubectl get namespaces # 全写
[root@master ~]# kubectl -n 命名空间 get pods  # 查看命名空间中的资源对象

8.2 创建

bash
[root@master ~]# kubectl create ns your_namespace # 简写, 其中:your_namespace 为你自己的命名空间名称
[root@master ~]# kubectl create namespace your_namespace # 全写, 其中:your_namespace 为你自己的命名空间名称
[root@master ~]# kubectl create ns your_namespace # 简写, 其中:your_namespace 为你自己的命名空间名称
[root@master ~]# kubectl create namespace your_namespace # 全写, 其中:your_namespace 为你自己的命名空间名称

8.3 删除

bash
[root@master ~]# kubectl delete namespace your_namespace # 简写, 其中:your_namespace 为你自己的命名空间名称
[root@master ~]# kubectl delete namespace your_namespace # 全写, 其中:your_namespace 为你自己的命名空间名称
[root@master ~]# kubectl delete namespace your_namespace # 简写, 其中:your_namespace 为你自己的命名空间名称
[root@master ~]# kubectl delete namespace your_namespace # 全写, 其中:your_namespace 为你自己的命名空间名称

8.4 查看

bash
[root@master ~]# kubectl describe ns your_namespace
[root@master ~]# kubectl describe ns your_namespace