高效率运维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 Name | Short Names | Namespaced | Resource Kind |
---|---|---|---|
bindings | TRUE | Binding | |
componentstatuses | cs | FALSE | ComponentStatus |
configmaps | cm | TRUE | ConfigMap |
endpoints | ep | TRUE | Endpoints |
events | ev | TRUE | Event |
limitranges | limits | TRUE | LimitRange |
namespaces | ns | FALSE | Namespace |
nodes | no | FALSE | Node |
persistentvolumeclaims | pvc | TRUE | PersistentVolumeClaim |
persistentvolumes | pv | FALSE | PersistentVolume |
pods | po | TRUE | Pod |
podtemplates | TRUE | PodTemplate | |
replicationcontrollers | rc | TRUE | ReplicationController |
resourcequotas | quota | TRUE | ResourceQuota |
secrets | TRUE | Secret | |
serviceaccounts | sa | TRUE | ServiceAccount |
services | svc | TRUE | Service |
mutatingwebhookconfigurations | FALSE | MutatingWebhookConfiguration | |
validatingwebhookconfigurations | FALSE | ValidatingWebhookConfiguration | |
customresourcedefinitions | crd, crds | FALSE | CustomResourceDefinition |
apiservices | FALSE | APIService | |
controllerrevisions | TRUE | ControllerRevision | |
daemonsets | ds | TRUE | DaemonSet |
deployments | deploy | TRUE | Deployment |
replicasets | rs | TRUE | ReplicaSet |
statefulsets | sts | TRUE | StatefulSet |
tokenreviews | FALSE | TokenReview | |
localsubjectaccessreviews | TRUE | LocalSubjectAccessReview | |
selfsubjectaccessreviews | FALSE | SelfSubjectAccessReview | |
selfsubjectrulesreviews | FALSE | SelfSubjectRulesReview | |
subjectaccessreviews | FALSE | SubjectAccessReview | |
horizontalpodautoscalers | hpa | TRUE | HorizontalPodAutoscaler |
cronjobs | cj | TRUE | CronJob |
jobs | TRUE | Job | |
certificatesigningrequests | csr | FALSE | CertificateSigningRequest |
leases | TRUE | Lease | |
endpointslices | TRUE | EndpointSlice | |
events | ev | TRUE | Event |
ingresses | ing | TRUE | Ingress |
networkpolicies | netpol | TRUE | NetworkPolicy |
runtimeclasses | FALSE | RuntimeClass | |
poddisruptionbudgets | pdb | TRUE | PodDisruptionBudget |
podsecuritypolicies | psp | FALSE | PodSecurityPolicy |
clusterrolebindings | FALSE | ClusterRoleBinding | |
clusterroles | FALSE | ClusterRole | |
rolebindings | TRUE | RoleBinding | |
roles | TRUE | Role | |
priorityclasses | pc | FALSE | PriorityClass |
csidrivers | FALSE | CSIDriver | |
csinodes | FALSE | CSINode | |
storageclasses | sc | FALSE | StorageClass |
volumeattachments | FALSE | VolumeAttachment |
根据kubectl操作,支持以下输出格式:
Output format | Description |
---|---|
-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 多平台发布