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

浙公网安备 33010602011771号