文档,
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