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