k8s常用命令查看所有 pod 列表, -n 后跟 namespace, 查看指定的命名空间kubectl get podkubectl get pod-nkube-system#查看指定命名空间的podkubectl get pod-owide#查看更详细的信息比如pod所在节点kubectl get pod --show-labels#获取pod并查看pod的标签查看 RC 和 service 列表 -o wide 查看详细信息kubectl get rc,svc kubectl get pod,svc-owide kubectl get podpod name-oyaml显示 Node 的详细信息kubectl describenode192.168.0.212#可以跟Node IP或者主机名显示 Pod 的详细信息, 特别是查看 pod 无法创建的时候的日志kubectl describe podpod-nameeg:kubectl describe pod redis-master-tqds9根据 yaml 创建资源, apply 可以重复执行create 不行kubectl create-fpod.yamlkubectl apply-fpod.yaml基于 pod.yaml 定义的名称删除指定资源kubectl delete-fpod.yaml删除所有包含某个 label 的pod 和 servicekubectl delete pod,svc-lnamelabel-name删除默认命名空间下的所有 Pod生产环境慎用kubectl delete pod--all执行 pod 命令kubectlexecpod-name--datekubectlexecpod-name--bashkubectlexecpod-name--ping10.24.51.9通过bash获得 pod 中某个容器的TTY相当于登录容器kubectlexec-itpod-name-ccontainer-name--basheg:kubectlexec-itredis-master-cln81 --bash查看容器的日志kubectl logspod-namekubectl logs-fpod-name# 实时查看日志kubectl logpod-name-ccontainer_name# 若 pod 只有一个容器可以不加 -ckubectl logs-lappfrontend# 返回所有标记为 appfrontend 的 pod 的合并日志。查看节点 labelskubectl getnode--show-labels重启 podkubectl get podpod_name-nnamespace-oyaml|kubectl replace--force-f-kubectl get podPOD名称-nNAMESPACE名称-oyaml|kubectl replace--force-f-创建命令kubectl apply-f./my-manifest.yaml# 创建资源kubectl apply-f./my1.yaml-f./my2.yaml# 使用多个文件创建kubectl apply-f./dir# 基于目录下的所有清单文件创建资源kubectl apply-fhttps://git.io/vPieo# 从 URL 中创建资源kubectl create deployment nginx--imagenginx# 启动单实例 nginxkubectl explain pods,svc# 获取 pod 清单的文档说明从标准输入创建多个 YAML 对象catEOF|kubectl apply-f-apiVersion: v1 kind: Pod metadata: name: busybox-sleep spec: containers: - name: busybox image: busybox args: - sleep - 1000000 --- apiVersion: v1 kind: Pod metadata: name: busybox-sleep-less spec: containers: - name: busybox image: busybox args: - sleep - 1000 EOF创建有多个 key 的 SecretcatEOF|kubectl apply-f-apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: password:$(echo-ns33msi4|base64-w0)username:$(echo-njane|base64-w0)EOF查看和查找资源get 命令的基本输出kubectl get services# 列出当前命名空间下的所有 serviceskubectl get pods --all-namespaces# 列出所有命名空间下的全部的 Podskubectl get pods-owide# 列出当前命名空间下的全部 Pods并显示更详细的信息kubectl get deployment my-dep# 列出某个特定的 Deploymentkubectl get pods# 列出当前命名空间下的全部 Podskubectl get pod my-pod-oyaml# 获取一个 pod 的 YAMLdescribe 命令的详细输出kubectl describe nodes my-nodekubectl describe pods my-pod列出当前名字空间下所有 Services按名称排序kubectl get services --sort-by.metadata.name列出 Pods按重启次数排序kubectl get pods --sort-by.status.containerStatuses[0].restartCount列举所有 PV 持久卷按容量排序kubectl getpv--sort-by.spec.capacity.storage获取包含 appcassandra 标签的所有 Pods 的 version 标签kubectl get pods--selectorappcassandra-osonpath{.items[*].metadata.labels.version}获取所有工作节点使用选择器以排除标签名称为 ‘node-role.kubernetes.io/master’ 的结果kubectl getnode--selector!node-role.kubernetes.io/master获取当前命名空间中正在运行的 Podskubectl get pods --field-selectorstatus.phaseRunning获取全部节点的 ExternalIP 地址kubectl get nodes-ojsonpath{.items[*].status.addresses[?(.typeExternalIP)].address}列出属于某个特定 RC 的 Pods 的名称在转换对于 jsonpath 过于复杂的场合“jq” 命令很有用可以在 https://stedolan.github.io/jq/ 找到它。sel${$(kubectl get rc my-rc --outputjson | jq -j .spec.selector | to_entries | .[]| \(.key)\(.value),)%?}echo$(kubectl get pods--selector$sel--outputjsonpath{.items..metadata.name})显示所有 Pods 的标签或任何其他支持标签的 Kubernetes 对象kubectl get pods --show-labels检查哪些节点处于就绪状态JSONPATH{range .items[*]}{.metadata.name}:{range .status.conditions[*]}{.type}{.status};{end}{end}\kubectl get nodes-ojsonpath$JSONPATH|grepReadyTrue列出被一个 Pod 使用的全部 Secretkubectl get pods-ojson|jq.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name|grep-vnull|sort|uniq列举所有 Pods 中初始化容器的容器 IDcontainerIDHelpful when cleaning up stopped containers, while avoiding removal of initContainers.kubectl get pods --all-namespaces-ojsonpath{range .items[*].status.initContainerStatuses[*]}{.containerID}{\n}{end}|cut-d/-f3列出事件Events按时间戳排序kubectl get events --sort-by.metadata.creationTimestamp比较当前的集群状态和假定某清单被应用之后的集群状态kubectldiff-f./my-manifest.yaml更新资源kubectlsetimage deployment/frontendwwwimage:v2# 滚动更新 frontend Deployment 的 www 容器镜像kubectl rollouthistorydeployment/frontend# 检查 Deployment 的历史记录包括版本kubectl rollout undo deployment/frontend# 回滚到上次部署版本kubectl rollout undo deployment/frontend --to-revision2# 回滚到特定部署版本kubectl rollout status-wdeployment/frontend# 监视 frontend Deployment 的滚动升级状态直到完成kubectl rollout restart deployment/frontend# 轮替重启 frontend Deploymentcatpod.json|kubectl replace-f-# 通过传入到标准输入的 JSON 来替换 Pod强制替换删除后重建资源。会导致服务不可用。kubectl replace--force-f./pod.json为多副本的 nginx 创建服务使用 80 端口提供服务连接到容器的 8000 端口。kubectl expose rc nginx--port80--target-port8000将某单容器 Pod 的镜像版本标签更新到 v4kubectl get pod mypod-oyaml|seds/\(image: myimage\):.*$/\1:v4/|kubectl replace-f-kubectl label pods my-pod new-labelawesome# 添加标签kubectl annotate pods my-pod icon-urlhttp://goo.gl/XXBTWq# 添加注解kubectl autoscale deployment foo--min2--max10# 对 foo Deployment 自动伸缩容##部分更新资源部分更新某节点kubectl patchnodek8s-node-1-p{spec:{unschedulable:true}}更新容器的镜像spec.containers[*].name 是必须的。因为它是一个合并性质的主键。kubectl patch pod valid-pod-p{spec:{containers:[{name:kubernetes-serve-hostname,image:new image}]}}使用带位置数组的 JSON patch 更新容器的镜像kubectl patch pod valid-pod--typejson-p[{op: replace, path: /spec/containers/0/image, value:new image}]使用带位置数组的 JSON patch 禁用某 Deployment 的 livenessProbekubectl patch deployment valid-deployment--typejson-p[{op: remove, path: /spec/template/spec/containers/0/livenessProbe}]在带位置数组中添加元素kubectl patch sa default--typejson-p[{op: add, path: /secrets/1, value: {name: whatever } }]删除资源kubectl delete-f./pod.json# 删除在 pod.json 中指定的类型和名称的 Podkubectl delete pod,service baz foo# 删除名称为 baz 和 foo 的 Pod 和服务kubectl delete pods,services-lnamemyLabel# 删除包含 namemyLabel 标签的 pods 和服务kubectl delete pods,services-lnamemyLabel --include-uninitialized# 删除包含 label namemyLabel 标签的 Pods 和服务kubectl-nmy-ns delete po,svc--all# 删除在 my-ns 名字空间中全部的 Pods 和服务删除所有与 pattern1 或 pattern2 awk 模式匹配的 Podskubectl get pods-nmynamespace --no-headerstrue|awk/pattern1|pattern2/{print $1}|xargskubectl delete-nmynamespace podPod常用操作kubectl logs my-pod# 获取 pod 日志标准输出kubectl logs-lnamemyLabel# 获取含 namemyLabel 标签的 Pods 的日志标准输出kubectl logs my-pod--previous# 获取上个容器实例的 pod 日志标准输出kubectl logs my-pod-cmy-container# 获取 Pod 容器的日志标准输出, 多容器场景kubectl logs-lnamemyLabel-cmy-container# 获取含 namemyLabel 标签的 Pod 容器日志标准输出, 多容器场景kubectl logs my-pod-cmy-container--previous# 获取 Pod 中某容器的上个实例的日志标准输出, 多容器场景kubectl logs-fmy-pod# 流式输出 Pod 的日志标准输出kubectl logs-fmy-pod-cmy-container# 流式输出 Pod 容器的日志标准输出, 多容器场景kubectl logs-f-lnamemyLabel --all-containers# 流式输出含 namemyLabel 标签的 Pod 的所有日志标准输出kubectl run-i--ttybusybox--imagebusybox --sh# 以交互式 Shell 运行 Podkubectl run nginx--imagenginx-nmynamespace# 在指定名字空间中运行 nginx Podkubectl run nginx--imagenginx# 运行 ngins Pod 并将其规约写入到名为 pod.yaml 的文件--dry-runclient-oyamlpod.yamlkubectl attach my-pod-i# 挂接到一个运行的容器中kubectl port-forward my-pod5000:6000# 在本地计算机上侦听端口 5000 并转发到 my-pod 上的端口 6000kubectlexecmy-pod --ls/# 在已有的 Pod 中运行命令单容器场景kubectlexecmy-pod-cmy-container --ls/# 在已有的 Pod 中运行命令多容器场景kubectltoppod POD_NAME--containers# 显示给定 Pod 和其中容器的监控数据节点操作kubectl cordon my-node# 标记 my-node 节点为不可调度kubectl drain my-node# 对 my-node 节点进行清空操作为节点维护做准备kubectl uncordon my-node# 标记 my-node 节点为可以调度kubectltopnodemy-node# 显示给定节点的度量值kubectl cluster-info# 显示主控节点和服务的地址kubectl cluster-info dump# 将当前集群状态转储到标准输出kubectl cluster-info dump --output-directory/path/to/cluster-state# 将当前集群状态输出到 /path/to/cluster-state如果已存在具有指定键和效果的污点则替换其值为指定值kubectl taint nodes foodedicatedspecial-user:NoSchedule格式化输出要以特定格式将详细信息输出到终端窗口可以将 -o 或 --output 参数添加到支持的 kubectl 命令输出格式描述-ocustom-columnsspec使用逗号分隔的自定义列来打印表格-ocustom-columns-filefilename使用 文件中的自定义列模板打印表格-ocustom-columns-filefilename使用 文件中的自定义列模板打印表格-ojson输出 JSON 格式的 API 对象-ojsonpathtemplate打印在 文件中定义的 jsonpath 表达式所指定的字段。--oname仅打印资源名称而不打印其他内容-owide以纯文本格式输出额外信息对于 Pod 来说输出中包含了节点名称-oyaml输出 YAML 格式的 API 对象使用 -ocustom-columns 的示例集群中运行着的所有镜像kubectl get pods-A-ocustom-columnsDATA:spec.containers[*].image除 “k8s.gcr.io/coredns:1.6.2” 之外的所有镜像kubectl get pods-A-ocustom-columnsDATA:spec.containers[?(.image!k8s.gcr.io/coredns:1.6.2)].image输出 metadata 下面的所有字段无论 Pod 名字为何kubectl get pods-A-ocustom-columnsDATA:metadata.*将宿主主机文件复制到运行容器中kubectlcp-nnamespace filename docker-container-name:container-patheg:kubectlcp-nmy namespace jdk8.jar ms-server-g-nnnnn-aaaa:/usr/local/java/jdk8.jar