Kubernetes命令速查

艺帆风顺 发布于 2025-04-29 20 次阅读


1、kubectl get ------列出一个或多个资源

语法: kubectl get [(-o|--output=)json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|
jsonpath-as-json|jsonpath-file|custom-columns|custom-columns-file|wide](TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...) [flags] [options]

*****查看pod中的容器名称*****# 不包括 init 容器kubectl get pods <POD_NAME> -o jsonpath={.spec.containers[*].name} -n <namespace># 查看 init 容器kubectl get pods <POD_NAME> -o jsonpath={.spec.initContainers[*].name} -n <namespace># 查看所有容器kubectl get pod <POD_NAME> -o jsonpath="{.spec['containers','initContainers'][*].name}" -n <namespace># 查看指定 node 上运行的所有 podkubectl get pod -o wide |grep <node_name> # 查看组件状态 kubectl get cs (componentstatuses)# 列出所有 pod,并包含附加信息(如节点名)。 kubectl get pods -n <namespace> -o wide  // <namesapce>命名空间的podkubectl get pods -A -o wide  // -A 所有<namesapce>的 pod# 查看集群节点信息 kubectl get nodes # 查看集群命名空间 kubectl get ns # 查看指定命名空间的服务 kubectl get svc -n kube-system # 列出在节点 server01 上运行的所有 podkubectl get pods --field-selector=spec.nodeName=server01 -A # 列出所有副本控制器和服务。 kubectl get rc,services -A# 列出所有守护程序集,包括未初始化的守护程序集。 kubectl get daemonsets -A# 显示名为<pod-name>的pod节点的标签信息kubectl get pod <pod-name> --show-labels -n <namespace># 根据指定标签为<example> 匹配到具体的podkubectl get pods -l app=<example> -n <namespace>

 

2、kubectl describe ----- 显示资源的详细状态

# kubectl describe --- 显示一个或多个资源的详细状态
语法:kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME) [options]

# 显示名称为 <node-name> 的节点的详细信息。 kubectl describe nodes <node-name> # 显示名为 <pod-name> 的 pod 的详细信息。 kubectl describe pods <pod-name> -n <namespace># 显示名为 <svc-name> 的service的详细信息kubectl describe pods <svc-name> -n <namespace>

 

3、kubectl delete -----删除资源

# kubectl delete` - 从文件、stdin 或指定标签选择器、名称、资源选择器或资源中删除资源。
语法:kubectl delete ([-f FILENAME] | [-k DIRECTORY] | TYPE [(NAME | -l label | --all)]) [options]

# 使用 pod.yaml 文件中指定的类型和名称删除 pod。 kubectl delete -f pod.yaml # 删除标签名= <label-name> 的所有 pod 和服务。 kubectl delete pods,services -l name=<label-name> -n <namespace># 删除所有 pod,包括未初始化的 pod。 kubectl delete pods -A 

 

4、kubectl exec ------进入容器命令

# kubectl exec - 对 pod 中的容器执行命令,与docker的exec命令非常类似。
语法:kubectl exec (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...] [options]

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

 

5、kubectl   logs ------查询资源日志

# kubectl logs - 打印 Pod 中容器的日志
语法:kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER] [options]

# 打印pod 为 的日志信息kubectl logs  -n <namespace># 从 pod 开始流式传输日志,打印1000行kubectl logs -n <namespace> -f --tail=1000

6、kubectl run   ----- 创建并运行容器镜像

# kubectl run 命令:在集群中创建并运行一个或多个容器镜像
语法:run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...]

# 示例,运行一个名称为nginx,副本数为3,标签为app=example,镜像为nginx:1.10,端口为80的容器实例$ kubectl run nginx --replicas=3 --labels="app=example" --image=nginx:1.10 --port=80# 示例,运行一个名称为nginx,副本数为3,标签为app=example,镜像为nginx:1.10,端口为80的容器实例,并绑定到k8s-node1上$ kubectl run nginx --image=nginx:1.10 --replicas=3 --labels="app=example" --port=80 --overrides='{"apiVersion":"apps/v1","spec":{"template":{"spec":{"nodeSelector":{"kubernetes.io/hostname":"k8s-node1"}}}}}' 

7、kubectl expose   ----- 创建service服务

# kubectl expose 命令:创建一个service服务,并且暴露端口让外部可以访问
语法:kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=number-or-name] [-name=name] [--external-ip=external-ip-of-service] [--type=type] [options]

# 创建一个nginx服务并且暴露端口让外界可以访问$ kubectl expose deployment nginx --port=88 --type=NodePort --target-port=80 --name=nginx-service# 创建一个名为 ideo-stream 的服务,名为 streamer 的 ReplicationController管理的所有Pod,并绑定外口访问端口为4100。$  kubectl expose rc streamer --port=4100 --protocol=UDP --name=video-stream

8、kubectl  set  ----- 配置或修改资源

# kubectl set 命令:配置应用的一些特定资源,也可以修改应用已有的资源
子命令:
env                  (环境参数)
image                (镜像)
resources            (资源请求/限制)
selector             (选择器)
serviceaccount       (服务帐户)
subject              (用户、组、角色)

**** kubectl set resources 命令 ****
语法:resources (-f FILENAME | TYPE NAME) ([--limits=LIMITS & --requests=REQUESTS]

例如:# 将deployment的nginx容器cpu限制为“200m”,将内存设置为“512Mi”$ kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi# 设置所有nginx容器中 Requests和Limits$ kubectl set resources deployment nginx --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi# 删除nginx中容器的计算资源值$ kubectl set resources deployment nginx --limits=cpu=0,memory=0 --requests=cpu=0,memory=0

**** kubectl set selector 命令 ****
语法:selector (-f FILENAME | TYPE NAME) EXPRESSIONS [--resource-version=version]

设置资源的 selector(选择器)。如果在调用"set selector"命令之前已经存在选择器,则新创建的选择器将覆盖原来的选择器。
注意:目前selector命令只能用于Service对象。

**** kubectl set image 命令 ****
语法:image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N [options]

用于更新现有资源的容器镜像
可用资源对象包括:pod (po)、replicationcontroller (rc)、deployment (deploy)、daemonset (ds)、job、replicaset (rs)。

例如:

# 将deployment中的nginx容器镜像设置为“nginx:1.9.1$ kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1# 所有deployment和rc的nginx容器镜像更新为“nginx:1.9.1”$ kubectl set image deployments,rc nginx=nginx:1.9.1 --all# 将daemonset abc的所有容器镜像更新为“nginx:1.9.1”$ kubectl set image daemonset abc *=nginx:1.9.1# 从本地文件中更新nginx容器镜像$ kubectl set image -f path/to/file.yaml nginx=nginx:1.9.1 --local -o yaml

9、kubectl   explain ----- 显示资源文档信息

# kubectl explain 命令:描述各种资源的文档和结构信息。
语法:kubectl explain TYPE [--recursive=FALSE|TRUE] [--api-version=api-version-group] [--output=plaintext|plaintext-openapiv2] [options]

例如:# 获取 replicaset (rs)说明$ kubectl explain rs# 获取支持的api版本中的部署说明$ kubectl explain deployments --api-version=apps/v1

10、kubectl   edit   ----- 编辑资源

# kubectl edit 命令: 用于编辑资源信息
语法: kubectl edit (RESOURCE/NAME | -f FILENAME) [options]

# 编辑Deployment nginx的一些信息$ kubectl edit deployment nginx -n <namespace># 编辑service类型的nginx的一些信息$ kubectl edit service/nginx  -n <namespace> 

11、kubectl  label  ----- 修改资源标签

# kubectl label命令:用于更新(增加、修改或删除)资源上的 label(标签)
语法:kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version] [options]

例如:

# 给名为foo的Pod添加label unhealthy=true$ kubectl label pods foo unhealthy=true# 给名为foo的Pod修改label 为 'status' / value 'unhealthy',且覆盖现有的value$ kubectl label --overwrite pods foo status=unhealthy# 给 namespace 中的所有 pod 添加 label$ kubectl label  pods --all status=unhealthy# 仅当resource-version=1时才更新 名为foo的Pod上的label$ kubectl label pods foo status=unhealthy --resource-version=1

12、kubectl  annotate  ----- 更新修改资源注释信息

# kubectl annotate命令:更新一个或多个资源的Annotations信息。也就是注解信息,可以方便的查看做了哪些操作。
语法:kubectl annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version] [options]

例如:# 更新Pod“foo”,设置annotation “description”的value “my frontend”,如果同一个annotation多次设置,则只使用最后设置的value值。$ kubectl annotate pods foo description='my frontend'# 根据“pod.json”中的type和name更新pod的annotation$ kubectl annotate -f pod.json description='my frontend'# 更新Pod"foo",设置annotation“description”的value“my frontend running nginx”,覆盖现有的值$ kubectl annotate --overwrite pods foo description='my frontend running nginx'# 更新 namespace中的所有pod$ kubectl annotate pods --all description='my frontend running nginx'# 只有当resource-version为1时,才更新pod 'foo'$ kubectl annotate pods foo description='my frontend running nginx' --resource-version=1

13、kubectl   completion ----- 设置 kubectl 命令自动补全

# kubectl completion命令:用于设置 kubectl 命令自动补全BASH# 在 bash 中设置当前 shell 的自动补全,要先安装 bash-completion 包$ source <(kubectl completion bash)# 在您的 bash shell 中永久的添加自动补全$ echo"source <(kubectl completion bash)" >> ~/.bashrcZSH# 在 zsh 中设置当前 shell 的自动补全$ source <(kubectl completion zsh)  # 在您的 zsh shell 中永久的添加自动补全$ echo"source <(kubectl completion zsh)" >> ~/.zshrc

14、kubectl  rollout  ----- 用于对资源进行管理

# kubectl rollout 命令:用于对资源进行管理
可用资源包括:deployments,daemonsets,statefulsets。

子命令:
history  (查看历史版本)
pause    (暂停资源)
resume   (恢复暂停资源)
status   (查看资源状态)
undo     (回滚版本)

语法:kubectl rollout SUBCOMMAND [options]

# 回滚到之前的deployment$ kubectl rollout undo deployment/abc# 查看daemonet的状态$ kubectl rollout status daemonset/foo# 重启nginx 的 deployment状态$ kubectl rollout restart deployment --selector=app=nginx

15、kubectl scale  ----- 资源扩容缩容

# kubectl scale 命令:扩容或缩容 Deployment、ReplicaSet、Replication Controller或 Job 中Pod数量
语法:kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME) [options]

# 将名为foo中的pod副本数设置为3。$ kubectl scale --replicas=3 rs/foo# 将由“foo.yaml”配置文件中指定的资源对象和名称标识的Pod资源副本设为3$ kubectl scale --replicas=3 -f foo.yaml# 如果当前副本数为2,则将其扩展至3。$ kubectl scale --current-replicas=2 --replicas=3 deployment/mysql# 设置多个RC中Pod副本数量$ kubectl scale --replicas=5 rc/example1 rc/example2 rc/example3

16、kubectl  autoscale  ------ 资源弹性伸缩

# kubectl autoscale 命令:这个比scale更加强大,也是弹性伸缩策略,它是根据流量的多少来自动选择和设置在Kubernetes集群中运行的Pod数量。

指定Deployment、ReplicaSet 或 ReplicationController,并创建已经定义好资源的自动伸缩器。使用自动伸缩器可以根据需要自动增加或减少系统中部署的pod数量。

语法:kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [options]

# 使用 Deployment “foo”设定,使用默认的自动伸缩策略,指定目标CPU使用率,使其Pod数量在2到10之间$ kubectl autoscale deployment foo --min=2 --max=10# 使用 RC “foo”设定,使其Pod的数量介于1和5之间,CPU使用率维持在80%$ kubectl autoscale rc foo --max=5 --cpu-percent=80

17、kubectl  certificate  -----  证书资源管理,授权

# kubectl certificate命令:修改证书资源
子命令:
approve (批准证书签名请求)
deny    (拒绝证书签名请求)

语法:kubectl certificate SUBCOMMAND [options]

# 例如:# 当有node节点要向master请求,那么是需要master节点授权的$ kubectl certificate approve node-csr-81F5uBehyEyLWco5qavBsxc1GzFcZk3aFM3XW5rT3mw node-csr-Ed0kbFhc_q7qx14H3QpqLIUs0uKo036O2SnFpIheM18

18、kubectl  top  ------查看资源信息

# kubectl top 命令:显示资源(CPU/内存)使用情况
子命令:
node          (节点CPU/内存使用情况)
pod           (POD CPU/内存使用情况)
语法:kubectl top [flags] [options]

# 显示给定节点的指标信息$ kubectl top node NODE_NAME# 查看一个 pod 或几个 pod 的资源使用情况$ kubectl top pod |grep -E "<podname1>|<podname2>|… " 

19、kubectl   cordon/uncordon  ----- 标记节点不可调度/可调度

# kubectl  cordon/uncordon  节点标记(主要用例容器迁移或排障过程)
语法:kubectl cordon/uncordon NODE [options]

例如:

# 标记节点 不可调度$ kubectl cordon k8s-node02

20、kubectl  drain ----- 驱赶、迁移节点POD

# kubectl  drain  迁移节点POD
语法:kubectl drain NODE [options]

例如:

# 强制迁移节点 foo 的pod# kubectl drain foo --force

21、kubectl  taint ----- 节点设置或者清除污点

# kubectl  taint 更新一个或多个节点上的污点
语法:kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options]

例如:# 设置节点 foo 的 dedicated 值为:NoSchedule,如果已经存在则使用当前值$ kubectl taint nodes foo dedicated=special-user:NoSchedule# 从节点“foo”中删除带有键“dedicated”的污点,如果存在,则生效“NoSchedule”$ kubectl taint nodes foo dedicated:NoSchedule-# 从节点“foo”中删除所有带有键“dedicated”的污点$ kubectl taint nodes foo dedicated-# 在节点'foo'中添加一个带有键'bar'且没有值的污点$ kubectl taint nodes foo bar:NoSchedule

22、kubectl attch  ----- 进入容器或者POD

# kubectl attch 命令:登录到已在现有容器中运行的进程。
语法:kubectl attach (POD | TYPE/NAME) -c CONTAINER [options]

例如:# 进入 mypod 的 ruby-container 容器中$ kubectl attach mypod -c ruby-container # 从pod mypod将stdin发送到ruby容器中的“bash”$ kubectl attach mypod -c ruby-container -i -t

23、kubectl  port-foward ------ 端口转发到POD

# kubectl  port-foward 命令:将一个或多个本地端口转发到pod
语法:kubectl port-forward TYPE/NAME [options] [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N]

示例:# 本地主机端口5000 转发到pod/mypod 的6000端口$ kubectl port-forward pod/mypod 5000:6000# 本地主机上的端口8888和所选IP,转发到pod中的5000$ kubectl port-forward --address localhost,10.19.21.23 pod/mypod 8888:5000# 本地主机随机端口,转发pod 的5000$ kubectl port-forward pod/mypod  :5000

24、kubectl   proxy ------ 代理服务器或应用网关

# kubectl proxy 命令:在本地主机和Kubernetes API服务器之间创建代理服务器或应用程序级网关。
语法:kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [options]

示例:# 代理所有Kubernetes API$  kubectl proxy --api-prefix=/# 仅代理部分Kubernetes API和一些静态文件开启后请求示例:curl http://localhost:8001/api/v1/pods$ kubectl proxy --www=/my/files --www-prefix=/static/ --api-prefix=/api/# 在端口8011上运行Kubernetes API服务器的代理开启后请求示例:curl http://localhost:8011/api/v1/pods$ kubectl proxy --port=8011 --www=./local/www/

25、kubectl   cp ------ 拷贝文件或者目录到pod容器中

# kubectl cp 命令:在容器或则容器有宿主机之间复制文件和目录。
语法:kubectl cp [options]

示例:# 将本地机器/tmp/foo 目录打包,解压到 <some-namespace> 命令空间 <some-pod> pod 的/tmp/bar目录下$ tar cf - /tmp/foo | kubectl exec -i -n <some-namespace> <some-pod> -- tar xf - -C /tmp/bar# 将/tmp/foo本地文件复制到命名空间中远程pod中的/tmp/bar$  kubectl cp /tmp/foo <some-namespace>/<some-pod>:/tmp/bar# 将/tmp/foo从远程pod复制到本地/tmp/bar$ kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar

26、kubectl  config  ----- 修改kubeconfig 配置文件

# kubectl  config 命令:查看使用 kubeconfig 跨集群授权访问 文档获取详情配置文件信息。
子命令:
current-context   Display the current-context
delete-cluster    Delete the specified cluster from the kubeconfig
delete-context    Delete the specified context from the kubeconfig
delete-user       Delete the specified user from the kubeconfig
get-clusters      Display clusters defined in the kubeconfig
get-contexts      Describe one or many contexts
get-users         Display users defined in the kubeconfig
rename-context    Rename a context from the kubeconfig file
set               Set an individual value in a kubeconfig file
set-cluster       Set a cluster entry in kubeconfig
set-context       Set a context entry in kubeconfig
set-credentials   Set a user entry in kubeconfig
unset             Unset an individual value in a kubeconfig file
use-context       Set the current-context in a kubeconfig file
view              Display merged kubeconfig settings or a specified kubeconfig file

语法:kubectl config SUBCOMMAND [options]

# 显示合并的 kubeconfig 配置$ kubectl config view# 显示合并的kubeconfig设置、原始证书数据和公开的密钥$ kubectl config view --raw# 获取 e2e 用户的密码$ kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'# 展示当前所处的上下文$ kubectl config current-context# 设置默认的上下文为 my-cluster-name$ kubectl config use-context my-cluster-name# 为“集群管理员”条目设置基本身份验证$  kubectl config set-credentials cluster-admin --username=admin --password=uXFGweU9l35qcif 

27、kubectl  apply ------- 将配置应用于资源

# kubectl apply命令:通过文件名或者标准输入对资源应用配置

通过文件名或控制台输入,对资源进行配置。 如果资源不存在,将会新建一个。可以使用 JSON 或者 YAML 格式。
语法:kkubectl apply (-f FILENAME | -k DIRECTORY) [options]

示例:

# 将pod.json中的配置应用到pod$ kubectl apply -f ./pod.json # 将控制台输入的JSON配置应用到Pod$ cat pod.json | kubectl apply -f -# 在manifest.yaml中应用配置,并删除文件中没有的所有其他配置映射$ kubectl apply --prune -f manifest.yaml --all --prune-allowlist=core/v1/ConfigMa

28、kubectl   patch ------ 补丁修改,资源更新

# kubectl  patch 命令:使用策略合并补丁、JSON合并补丁或JSON补丁更新资源的字段。

语法:kubectl patch (-f FILENAME | TYPE NAME) [-p PATCH|--patch-file FILE] [options]

# 使用策略合并补丁部分更新节点,补丁指定为JSON格式$ kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'# 使用JSON 补丁的位置数组更新镜像$ kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"newimage"}]'

29、kubectl  replace ------ 替换原有资源

# bectl replace命令:通过文件或者标准输入替换原有资源

语法:kubectl replace -f FILENAME [options]

# 使用pod.json中的数据替换pod$ kubectl replace -f ./pod.json# 根据传递到stdin的JSON替换pod$ cat pod.json | kubectl replace -f -# 将单个容器pod的映像版本(标签)更新为v4$ kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -# 强制替换、删除然后重新创建资源$ kubectl replace --force -f ./pod.json