获取相应资源信息
# get 命令的基本输出
kubectl get services # 列出当前命名空间下的所有 services
kubectl get pods --all-namespaces # 列出所有命名空间下的全部的 Pods
kubectl get pods -o wide # 列出当前命名空间下的全部 Pods,并显示更详细的信息
kubectl get deployment my-dep # 列出某个特定的 Deployment
kubectl get pods # 列出当前命名空间下的全部 Pods
kubectl get pod my-pod -o yaml # 获取一个 pod 的 YAML
# 列出当前名字空间下所有 Services,按名称排序
kubectl get services --sort-by=.metadata.name
# 列出 Pods,按重启次数排序
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
# 列举所有 PV 持久卷,按容量排序
kubectl get pv --sort-by=.spec.capacity.storage
# 获取包含 app=cassandra 标签的所有 Pods 的 version 标签
kubectl get pods --selector=app=cassandra -o \
jsonpath='{.items[*].metadata.labels.version}'
# 检索带有 “.” 键值,例: 'ca.crt'
kubectl get configmap myconfig \
-o jsonpath='{.data.ca\.crt}'
# 获取所有工作节点(使用选择器以排除标签名称为 'node-role.kubernetes.io/master' 的结果)
kubectl get node --selector='!node-role.kubernetes.io/master'
# 获取当前命名空间中正在运行的 Pods
kubectl get pods --field-selector=status.phase=Running
# 获取全部节点的 ExternalIP 地址
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
# 显示所有 Pods 的标签(或任何其他支持标签的 Kubernetes 对象)
kubectl get pods --show-labels
# 检查哪些节点处于就绪状态
JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \
&& kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"
# 列出被一个 Pod 使用的全部 Secret
kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq
# 列举所有 Pods 中初始化容器的容器 ID(containerID)
# 可用于在清理已停止的容器时避免删除初始化容器
kubectl get pods --all-namespaces -o jsonpath='{range .items[*].status.initContainerStatuses[*]}{.containerID}{"\n"}{end}' | cut -d/ -f3
# 列出事件(Events),按时间戳排序
kubectl get events --sort-by=.metadata.creationTimestamp
# 集群中运行着的所有镜像
kubectl get pods -A -o=custom-columns='DATA:spec.containers[*].image'
# 列举 default 名字空间中运行的所有镜像,按 Pod 分组
kubectl get pods --namespace default --output=custom-columns="NAME:.metadata.name,IMAGE:.spec.containers[*].image"
# 除 "k8s.gcr.io/coredns:1.6.2" 之外的所有镜像
kubectl get pods -A -o=custom-columns='DATA:spec.containers[?(@.image!="k8s.gcr.io/coredns:1.6.2")].image'
# 输出 metadata 下面的所有字段,无论 Pod 名字为何
kubectl get pods -A -o=custom-columns='DATA:metadata.*'
删除相应资源
# 删除在 pod.json 中指定的类型和名称的 Pod
kubectl delete -f ./pod.json
# 删除名称为 "baz" 和 "foo" 的 Pod 和服务
kubectl delete pod,service baz foo
# 删除包含 name=myLabel 标签的 pods 和服务
kubectl delete pods,services -l name=myLabel
# 删除在 my-ns 名字空间中全部的 Pods 和服务
kubectl -n my-ns delete pod,svc --all
# 删除所有与 pattern1 或 pattern2 awk 模式匹配的 Pods
kubectl get pods -n mynamespace --no-headers=true | awk '/pattern1|pattern2/{print $1}' | xargs kubectl delete -n mynamespace pod
查看日志
# 获取 pod 日志(标准输出)
kubectl logs my-pod
# 获取 pod 最后100行日志日志(标准输出)
kubectl logs --tail=100 my-pod
# 获取含 name=myLabel 标签的 Pods 的日志(标准输出)
kubectl logs -l name=myLabel
# 获取上个容器实例的 pod 日志(标准输出)
kubectl logs my-pod --previous
# 获取 Pod 容器的日志(标准输出, 多容器场景)
kubectl logs my-pod -c my-container
# 获取含 name=myLabel 标签的 Pod 容器日志(标准输出, 多容器场景)
kubectl logs -l name=myLabel -c my-container
# 获取 Pod 中某容器的上个实例的日志(标准输出, 多容器场景)
kubectl logs my-pod -c my-container --previous
# 流式输出 Pod 的日志(标准输出)
kubectl logs -f my-pod
# 流式输出 Pod 容器的日志(标准输出, 多容器场景)
kubectl logs -f my-pod -c my-container
# 流式输出含 name=myLabel 标签的 Pod 的所有日志(标准输出)
kubectl logs -f -l name=myLabel --all-containers
创建/更新资源
使用apply如果有些资源无法更新的话,可以使用replace --force更新
● kubectl replace 的执行过程,是使用新的 YAML 文件中的 API 对象,替换原有的 API 对象
● kubectl apply,则是执行了一个对原有 API 对象的 PATCH 操作
# 创建资源
kubectl apply -f ./my-manifest.yaml
# 使用多个文件创建
kubectl apply -f ./my1.yaml -f ./my2.yaml
# 基于目录下的所有清单文件创建资源
kubectl apply -f ./dir
# 从 URL 中创建资源
kubectl apply -f https://git.io/vPieo
创建相关资源
# 启动单实例 nginx
kubectl create deployment nginx --image=nginx
# 创建一个打印 “Hello World” 的 Job
kubectl create job hello --image=busybox -- echo "Hello World"
# 创建一个打印 “Hello World” 间隔1分钟的 CronJob
kubectl create cronjob hello --image=busybox --schedule="*/1 * * * *" -- echo "Hello World"
# 基于文件bar创建名为my-config的configmap
kubectl create configmap my-config --from-file=path/to/bar
# 创建名为my-config的configmap使用多个文件,并使用自定义key名(默认是文件名)
kubectl create configmap my-config --from-file=key1=/path/to/bar/file1.txt --from-file=key2=/path/to/bar/file2.txt
# 创建名为my-config的configmap,并指定key,value
kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2
# 创建名为my-service-account的serviceaccount
kubectl create serviceaccount my-service-account
# 创建名称为 "pod-reader" 的 Role 对象,允许用户对 Pods 执行 get、watch 和 list 操作:
kubectl create role pod-reader --verb=get,list,watch --resource=pods
#创建名称为 "pod-reader" 的 ClusterRole对象,允许用户对 Pods 对象执行 get、watch和list` 操作:
kubectl create clusterrole pod-reader --verb=get,list,watch --resource=pods
#在名字空间 "acme" 中,将名为 admin 的 ClusterRole 中的权限授予名称 "bob" 的用户:
kubectl create rolebinding bob-admin-binding --clusterrole=admin --user=bob --namespace=acme
#在名字空间 "acme" 中,将名为 view 的 ClusterRole 中的权限授予名字空间 "acme" 中名为 myapp 的服务账户:
kubectl create rolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp --namespace=acme
#在整个集群范围,将名为 cluster-admin 的 ClusterRole 中定义的权限授予名为 "root" 用户:
kubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root
运行pod实例
# 使用ningx镜像启动一个名叫nginx的pod
kubectl run nginx --image=nginx
# 使用hazelcast/hazelcast镜像启动一个名叫hazelcast的pod,并暴露5701
kubectl run hazelcast --image=hazelcast/hazelcast --port=5701
# 使用hazelcast/hazelcast镜像启动一个名叫hazelcast的pod,并设置2个环境变量 "DNS_DOMAIN=cluster"和 "POD_NAMESPACE=default"
kubectl run hazelcast --image=hazelcast/hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"
# 使用hazelcast/hazelcast镜像启动一个名叫hazelcast的pod,并设置标签"app=hazelcast"和"env=prod"
kubectl run hazelcast --image=hazelcast/hazelcast --labels="app=hazelcast,env=prod"
# Dry run模拟执行,不会真正创建pod
kubectl run nginx --image=nginx --dry-run=client
# 用自定义启动命令启动一个nginx pod
kubectl run nginx --image=nginx --command -- ...
对资源进行伸缩
# 将名为 'foo' 的副本集伸缩到 3 副本
kubectl scale --replicas=3 rs/foo
# 将在 "foo.yaml" 中的特定资源伸缩到 3 个副本
kubectl scale --replicas=3 -f foo.yaml
# 如果名为 mysql 的 Deployment 的副本当前是 2,那么将它伸缩到 3
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql
# 伸缩多个副本控制器
kubectl scale --replicas=5 rc/foo rc/bar rc/baz
查看描述
# 查看一个节点描述
kubectl describe nodes kubernetes-node-emt8.c.myproject.internal
# 查看一个pod描述
kubectl describe pods/nginx
# 查看当前命名空间下所有pod描述
kubectl describe pods
# 查看带标签name=myLabel pod的描述
kubectl describe po -l name=myLabel
# 维护前
# 标记 my-node 节点为不可调度
kubectl cordon my-node
# 对 my-node 节点进行清空操作,为节点维护做准备
#强制驱逐除daemonsets的所有pod
kubectl drain my-node
kubectl drain my-node --ignore-daemonsets --delete-local-data=false --force --grace-period 0
# 完成维护后
# 标记 my-node 节点为可以调度
kubectl uncordon my-node
# 滚动更新 "frontend" Deployment 的 "www" 容器镜像
kubectl set image deployment/frontend www=image:v2
# 检查 Deployment 的历史记录,包括版本
kubectl rollout history deployment/frontend
# 回滚到上次部署版本
kubectl rollout undo deployment/frontend
# 回滚到特定部署版本
kubectl rollout undo deployment/frontend --to-revision=2
# 监视 "frontend" Deployment 的滚动升级状态直到完成
kubectl rollout status -w deployment/frontend
# 轮替重启 "frontend" Deployment
kubectl rollout restart deployment/frontend