Bootstrap

高效率运维K8s 这些常用命令你得会

高效率运维K8s 这些常用命令你得会

日常K8s运维工作中难免会连接K8s集群哐哐哐的输出命令来进行Kubernetes应用运维工作。今天就总结一些常用的kubectl命令及应用调试技巧。以便于日常查阅或提高效率!

基本操作命令

 1. kubectl version  #显示kubectl的版本信息
 2. kubectl cluster-info # 显示集群的基本信息
 3. kubectl get nodes #显示所有的节点信息
 4. kubectl get pods # 显示所有的pods信息
 5. kubectl create deployment {name} --image={image} # 创建pods
 6. kubectl scale deployment {name} --replicas={num} # 修改pods的数量
 7. kubectl describe pod {name} # 显示指定的pod的详细信息
 8. kubectl logs {name} # 显示指定pod的日志信息
 9. kubectl exec -it {name} -- /bin/bash #进入指定pod的bash终端
 10. kubectl delete deployment {name} # 删除pods
 11. kubectl edit svc {name} # 编辑svc
 12. kubectl logs deploy/{deploy_name} --all-containers #查看deployment下的全部pod日志
 13. kubectl get cm -A #查看所有configmaps信息
 14. kubectl get sa -A # 查看所有serviceaccounts信息
 15. kubectl get ds -A # 查看所有daemonsets信息
 16. kubectl get deploy -A. # 查看所有deployments信息
 17. kubectl get rs -A # 查看所有replicasets信息
 18. kubectl get sts -A. # 查看所有statefulsets信息
 19. kubectl get jobs -A # 查看所有jobs信息
 20. kubectl get ing -A # 查看所有ingresses信息
 21. kubectl get ns # 查看有哪些名称空间
 22. kubectl -s https://172.16.1.110:6443 get cs# 查看各组件信息【172.16.1.110为master机器】
 23. kubectl get pv # 显示所有的pv信息
 24. kubectl get pvc -n {ns} #显示所有的pvc信息

资源操作类命令

  # 创建资源
  kubectl create -f xxx.yaml
  # 应用资源
  kubectl apply -f xxx.yaml
  # 应用资源,该目录下的所有 .yaml, .yml, 或 .json 文件都会被使用
  kubectl apply -f <directory>
  # 创建test名称空间
  kubectl create namespace test
  
 # 删除资源
 kubectl delete -f xxx.yaml
 kubectl delete -f <directory>
 # 删除指定的pod
 kubectl delete pod podName
 # 删除指定名称空间的指定pod
 kubectl delete pod -n test podName
 # 删除其他资源
 kubectl delete svc svcName
 kubectl delete deploy deployName
 kubectl delete ns nsName
 # 强制删除
 kubectl delete pod podName -n nsName --grace-period=0 --force
 kubectl delete pod podName -n nsName --grace-period=1
 kubectl delete pod podName -n nsName --now 
 # 编辑资源
 kubectl edit pod podName
 # kubectl label:添加label值
 kubectl label nodes k8s-node01 zone=north  #为指定节点添加标签 
 kubectl label nodes k8s-node01 zone-       #为指定节点删除标签
 kubectl label pod podName -n nsName role-name=test #为指定pod添加标签
 kubectl label pod podName -n nsName role-name=dev --overwrite  #修改lable标签值
 kubectl label pod podName -n nsName role-name-        #删除lable标签

资源部署和管理类命令

1. kubectl create deployment {name} --image={image} --replicas={num} --port={port}  #创建deployment
2. kubectl expose deployment {name} --port={port} --target-port={targetport} --type={type# 创建service
3. kubectl set image deployment/{name} {container}={image}:{tag} # 更新deployment中某个容器的镜像
4. kubectl rollout history deployment/{name} # 显示指定deployment的版本历史
5. kubectl rollout undo deployment/{name} --to-revision=1 # 回滚指定deployment到指定版本
6. kubectl rollout pause deployment/{name} # 暂停指定deployment的升级
7. kubectl rollout resume deployment/{name} # 恢复指定deployment的升级
8. kubectl rollout status deployment/{name} # 显示指定deployment的升级状态
8. kubectl rollout restart deployment/{name} # 热重启deployment
9. kubectl exec -it {name} -- /bin/bash # 在指定pod中进入bash终端
10. kubectl apply -f {filename} # 根据指定的yaml文件部署kubernetes资源

资源维护类命令

kubectl get endpoints {name} # 显示指定service的后端地址信息
kubectl get svc {name} -o jsonpath='{.spec.selector}' # 显示指定service的标签选择器
kubectl label pods {name} {label}={value} # 给指定pod打上标签
kubectl taint node {name} key=value:taint_effect # 在指定节点上添加taint特性,污点
kubectl drain <NODE_NAME> #将节点设置为不可调度状态,以便于维护和升级该节点,并避免丢失重要的运行数据
kubectl cordon <NODE_NAME> #阻止新的 Pod 调度到特定的节点上,以避免在节点维护期间出现过多负载
kubectl uncordon <NODE_NAME> #允许新的 Pod 调度到指定的节点上,以恢复该节点的正常工作状态。
kubectl debug <pod-name> -c <container-name> -it -- /bin/bash #在指定的 Pod 中的容器中运行一个新的 bash 进程,以便进行调试。


进阶命令

1. kubectl get svc {name} -o jsonpath='{.spec.clusterIP}' # 显示指定service的cluster IP地址
2. kubectl get endpoints {name} # 显示指定service的后端地址信息
3. kubectl get ingress {name} # 显示指定ingress的详细信息
4. kubectl create ingress {name} --rule={host}/{path}=svc:{service_name}:{port} # 创建ingress条目
5. kubectl delete ingress {name} # 删除指定的ingress条目
6. kubectl get svc {name} -o jsonpath='{.spec.type}' # 显示指定service的类型信息
7. kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.podIP}{"\n"}{end}' # 显示所有pods的名称和IP地址信息
8. kubectl exec -it {name} -- nc -z -v {ip} {port} # 在指定pod中使用nc工具测试TCP连接
9. kubectl exec -it {name} -- curl {url} # 在指定pod中使用curl工具测试HTTP连接
10.kubectl get pods -l {label} # 显示所有带有指定label的pods的信息
11. kubectl get pods -o jsonpath='{range .items[?(@.status.phase=="Pending")]}{.metadata.name}{"\t"}{.reason}{"\n"}{end}' # 显示所有处于Pending状态的pods
12. kubectl describe deployment {name} # 显示指定deployment的详细信息
13. kubectl rollout restart deployment {name} # 重启指定deployment
14. kubectl rollout undo deployment {name} # 回滚指定deployment
15. kubectl scale deployment {name} --replicas={num} # 修改指定deployment的pod数量
16. kubectl proxy # 打开kubernetes API服务的代理端口

自定义资源类型查看

1. kubectl api-versions # 显示kubernetes API上的所有版本
2. kubectl api-resources # 显示kubernetes API上的所有资源
3. kubectl get crds # 显示集群中所有自定义资源的定义
4. kubectl create -f {filename} # 创建自定义资源对象
5. kubectl get crd {name} # 显示指定自定义资源的定义

日志及资源使用查看

1. kubectl logs {name} #显示指定pod的日志信息
2. kubectl logs --tail={num} {name} # 显示指定pod最后几条日志信息
3. kubectl logs -f {name} # 实时显示指定pod的日志信息
4. kubectl logs deploy/{deploy_name} --all-containers #查看deployment下的全部pod日志
5. kubectl top nodes # 显示所有节点的CPU和内存使用情况
6. kubectl top pods # 显示所有pods的CPU和内存使用情况
7. kubectl get events # 显示所有事件信息
8. kubectl get pod {name} -o jsonpath='{.spec.containers[*].resources.limits.memory}' # 显示指定pod的内存限制
9.kubectl get pod {name} -o jsonpath='{.spec.containers[*].resources.requests.memory}'# 显示指定pod的内存请求
10. kubectl get pod {name} -o jsonpath='{.spec.containers[*].resources.requests.cpu}' # 显示指定pod的CPU请求
11. kubectl get pod {name} -o jsonpath='{.spec.containers[*].resources.limits.cpu}'   # 显示指定pod的CPU限制
12. kubectl get node {name} -o jsonpath='{.status.allocatable.cpu}' # 显示指定节点可用的CPU数量


yaml文件生成类命令

1. kubectl apply -f {filename} # 使用yaml文件自动创建kubernetes资源
2. kubectl delete -f {filename} # 使用yaml文件自动删除kubernetes资源
3. kubectl create deployment {name} --image={image} --dry-run -o yaml > {filename} # 生成deployment的yaml文件
4. kubectl create service {name} --tcp={port}:{targetport} --dry-run -o yaml > {filename} # 生成service的yaml文件
5. kubectl create secret generic {name} --from-literal=key=value --dry-run -o yaml > {filename} #生成secret的yaml文件
6. kubectl create cronjob [job_name] --image=[image_name] --schedule='\*/1 \* \* \* \*' --restart=OnFailure --dry-run -o yaml > [file_name].yaml #创建一个CronJob实例,并将其定义文件保存到指定的YAML文件中。
7. kubectl annotate <RESOURCE_TYPE> <RESOURCE_NAME> <KEY>=<VALUE> #给指定类型的资源对象添加注释。

kubectl语法中的TYPE资源

下表包含常用的资源类型及其缩写别名的列表。

也可以在命令行通过kubectl api-resources得到。

Resource NameShort NamesNamespacedResource Kind
bindingsTRUEBinding
componentstatusescsFALSEComponentStatus
configmapscmTRUEConfigMap
endpointsepTRUEEndpoints
eventsevTRUEEvent
limitrangeslimitsTRUELimitRange
namespacesnsFALSENamespace
nodesnoFALSENode
persistentvolumeclaimspvcTRUEPersistentVolumeClaim
persistentvolumespvFALSEPersistentVolume
podspoTRUEPod
podtemplatesTRUEPodTemplate
replicationcontrollersrcTRUEReplicationController
resourcequotasquotaTRUEResourceQuota
secretsTRUESecret
serviceaccountssaTRUEServiceAccount
servicessvcTRUEService
mutatingwebhookconfigurationsFALSEMutatingWebhookConfiguration
validatingwebhookconfigurationsFALSEValidatingWebhookConfiguration
customresourcedefinitionscrd, crdsFALSECustomResourceDefinition
apiservicesFALSEAPIService
controllerrevisionsTRUEControllerRevision
daemonsetsdsTRUEDaemonSet
deploymentsdeployTRUEDeployment
replicasetsrsTRUEReplicaSet
statefulsetsstsTRUEStatefulSet
tokenreviewsFALSETokenReview
localsubjectaccessreviewsTRUELocalSubjectAccessReview
selfsubjectaccessreviewsFALSESelfSubjectAccessReview
selfsubjectrulesreviewsFALSESelfSubjectRulesReview
subjectaccessreviewsFALSESubjectAccessReview
horizontalpodautoscalershpaTRUEHorizontalPodAutoscaler
cronjobscjTRUECronJob
jobsTRUEJob
certificatesigningrequestscsrFALSECertificateSigningRequest
leasesTRUELease
endpointslicesTRUEEndpointSlice
eventsevTRUEEvent
ingressesingTRUEIngress
networkpoliciesnetpolTRUENetworkPolicy
runtimeclassesFALSERuntimeClass
poddisruptionbudgetspdbTRUEPodDisruptionBudget
podsecuritypoliciespspFALSEPodSecurityPolicy
clusterrolebindingsFALSEClusterRoleBinding
clusterrolesFALSEClusterRole
rolebindingsTRUERoleBinding
rolesTRUERole
priorityclassespcFALSEPriorityClass
csidriversFALSECSIDriver
csinodesFALSECSINode
storageclassesscFALSEStorageClass
volumeattachmentsFALSEVolumeAttachment

根据kubectl操作,支持以下输出格式:

Output formatDescription
-o custom-columns=使用逗号分隔的自定义列列表打印表
-o custom-columns-file=使用文件中的自定义列模板打印表
-o json输出一个JSON格式的API对象
-o jsonpath=打印jsonpath表达式中定义的字段
-o jsonpath-file=通过文件打印jsonpath表达式定义的字段
-o name只打印资源名,不打印其他任何内容
-o wide以纯文本格式输出,包含附加信息。对于pods,包含节点名
-o yaml输出一个YAML格式的API对象

本文由 mdnice 多平台发布

;