Kubernetes命令速查

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 上运行的所有 pod
kubectl get pod -o wide |grep <node_name> 

# 查看组件状态 
kubectl get cs (componentstatuses)

# 列出所有 pod,并包含附加信息(如节点名)。 
kubectl get pods -n <namespace> -o wide  // <namesapce>命名空间的 pod
kubectl get pods -A -o wide  // -A 所有<namesapce>的 pod

# 查看集群节点信息 
kubectl get nodes 

# 查看集群命名空间 
kubectl get ns 

# 查看指定命名空间的服务 
kubectl get svc -n kube-system 

# 列出在节点 server01 上运行的所有 pod
kubectl 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> 匹配到具体的 pod
kubectl 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)" >> ~/.bashrc

ZSH
# 在 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
© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
图片正在生成中,请稍后...