Kubectl常用命令

一、常用命令

1. kubectl get

获取相应资源信息

# 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.*'
2. kubectl delete

删除相应资源

# 删除在 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
3. kubectl logs

查看日志

# 获取 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
4. kubectl apply

创建/更新资源
使用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
5. kubectl create

创建相关资源

# 启动单实例 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
6. kubectl run

运行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 -- <cmd> <arg1> ... <argN>
7. kubectl scale

对资源进行伸缩

# 将名为 '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
8. kubectl describe

查看描述

# 查看一个节点描述                                                                  
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                                                  

二、常用场景

1.节点维护
# 维护前
# 标记 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
2 更新应用
# 滚动更新 "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
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值