K8S命令详解汇总
1 kubectl命令工具
kubectl是kubernetes的命令行工具。它允许用户与kubernetes集群交互,并管理kubernetes对象资源。
安装kubernetes集群时一般都会安装kubectl工具,一般安装在master节点上,不过node节点也可以自行安装kubectl工具。
(1)安装kubectl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 下载最新版本: curl -LO https: //storage .googleapis.com /kubernetes-release/release/ $(curl -s https: //storage .googleapis.com /kubernetes-release/release/stable .txt) /bin/linux/amd64/kubectl # 下载特定版本: curl -LO https: //storage .googleapis.com /kubernetes-release/release/v1 .7.0 /bin/linux/amd64/kubectl # 下载到本地后,对kubectl二进制添加可执行权限: chmod +x . /kubectl # 将二进制文件移动到PATH中: mv . /kubectl /usr/local/bin/kubectl # 将master节点中/etc/kubernetes/admin.conf文件拷贝到node节点 scp /etc/kubernetes/admin .conf root@10.0.0.106: /etc/kubernetes |
在node节点上配置环境变量
1 2 | echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile source ~/.bash_profile |
检查
1 2 3 4 5 | [root@k8s-node1 ~] # kubectl get node NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane 4d19h v1.28.2 k8s-node1 Ready worker 4d19h v1.28.2 k8s-node2 Ready worker 4d19h v1.28.2 |
(2)kubectl基本语法
1 | kubectl [ command ] [TYPE] [NAME] [flags] |
command:子命令,用于操作资源对象;如get,create,delete,describe等。
TYPE:资源对象的类型,区分大小写,还能以简写方式表示。如pod,deployment,service
等。
NAME:资源对象的名称,区分大小写;如不指定则返回全部资源对象的列表。
注:在一个命令行中也可以同时对多个资源对象进行操作,以多个TYPE和NAME的组合表示。
flags:命令行选项,如“-o <format>
”用于指定输出格式。
2 kubectl命令概述
可以使用kubectl --help
来打印出kubectl的子命令,工作中经常需要用到--help来帮忙
2.1 基本命令 (初级):
1 2 3 4 | create 从文件或标准输入创建资源,一般使用-f来指定文件创建资源 expose 基于rc,service,deploy或pod创建Service资源 run 创建并运行特定的镜像, 创建使用 deployment 或 job 管理的容器 set 设置指定资源的特定属性, 例如发布, 每次去 set 不用image tag |
2.2 基本命令 (中级):
1 2 3 4 | explain 文档或者资源, 可以用来查看资源清单写法 get 显示一个或多个资源 edit 编辑服务器上的资源 delete 按文件名, 标准输入, 资源和名称或资源和标签选择器删除资源 |
get命令的常用输出方式:
输出格式 | 格式说明 |
-o wide | 显示资源的额外信息 |
-o yaml | YAML格式化输出API对象信息 |
-o json | JSON格式化输出API对象信息 |
2.3 部署命令:
1 2 3 | rollout 管理资源的滚动更新 scale 伸缩RS, RC, Job,deploment等资源的规模 autoscale 自动调整资源对象规模, 如:RS, RC, Job,deploment |
2.4 群集管理命令:
1 2 3 4 5 6 7 | certificate 修改证书资源 cluster-info 显示群集信息 top 显示资源(CPU / 内存/ 存储)使用情况, 需要安装metrics-server cordon 将节点标记为不可调度(unschedulable) uncordon 将节点标记为可调度(schedulable drain 设定 node 进入维护模式 taint 更新一个或多个节点上的污点 |
2.5 故障排除和调试命令:
1 2 3 4 5 6 7 8 | describe 显示特定资源或资源组的详细信息 logs 在容器中打印容器的日志 attach 附加到正在运行的容器 exec 在容器中执行命令 port-forward 将一个或多个本地端口转发到指定的 pod proxy 运行代理到 Kubernetes API 服务器 cp 将文件和目录复制到容器, 和从容器复制, 跨容器复制文件 auth 检查授权 |
2.6 高级命令
1 2 3 4 | apply 通过文件名或标准输入将配置应用于资源 patch 使用策略合并补丁更新资源的字段 replace 用文件名或标准输入替换资源 convert 在不同的API版本之间转换配置文件 |
2.7 设置命令:
1 2 3 | label 设置或更新资源上的标签 annotate 更新资源上的注释 completion 命令补全相关功能 |
2.8 其他命令:
1 2 3 4 5 | api-resources 在服务器上打印支持的API资源 api-versions 以 "group/version" 的形式在服务器上打印支持的API版本 config 修改 kubeconfig 文件 plugin 提供与插件交互的实用程序 version 打印客户端和服务器版本信息 |
3 对象资源管理
资源对象缩写一览表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | NAME SHORTNAMES APIGROUP NAMESPACED 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 admissionregistration.k8s.io false MutatingWebhookConfiguration validatingwebhookconfigurations admissionregistration.k8s.io false ValidatingWebhookConfiguration customresourcedefinitions crd,crds apiextensions.k8s.io false CustomResourceDefinition apiservices apiregistration.k8s.io false APIService controllerrevisions apps true ControllerRevision daemonsets ds apps true DaemonSet deployments deploy apps true Deployment replicasets rs apps true ReplicaSet statefulsets sts apps true StatefulSet tokenreviews authentication.k8s.io false TokenReview localsubjectaccessreviews authorization.k8s.io true LocalSubjectAccessReview selfsubjectaccessreviews authorization.k8s.io false SelfSubjectAccessReview selfsubjectrulesreviews authorization.k8s.io false SelfSubjectRulesReview subjectaccessreviews authorization.k8s.io false SubjectAccessReview horizontalpodautoscalers hpa autoscaling true HorizontalPodAutoscaler cronjobs cj batch true CronJob jobs batch true Job certificatesigningrequests csr certificates.k8s.io false CertificateSigningRequest leases coordination.k8s.io true Lease bgpconfigurations crd.projectcalico.org false BGPConfiguration clusterinformations crd.projectcalico.org false ClusterInformation felixconfigurations crd.projectcalico.org false FelixConfiguration globalnetworkpolicies crd.projectcalico.org false GlobalNetworkPolicy globalnetworksets crd.projectcalico.org false GlobalNetworkSet hostendpoints crd.projectcalico.org false HostEndpoint ippools crd.projectcalico.org false IPPool networkpolicies crd.projectcalico.org true NetworkPolicy events ev events.k8s.io true Event daemonsets ds extensions true DaemonSet deployments deploy extensions true Deployment ingresses ing extensions true Ingress networkpolicies netpol extensions true NetworkPolicy podsecuritypolicies psp extensions false PodSecurityPolicy replicasets rs extensions true ReplicaSet nodes metrics.k8s.io false NodeMetrics pods metrics.k8s.io true PodMetrics networkpolicies netpol networking.k8s.io true NetworkPolicy poddisruptionbudgets pdb policy true PodDisruptionBudget podsecuritypolicies psp policy false PodSecurityPolicy clusterrolebindings rbac.authorization.k8s.io false ClusterRoleBinding clusterroles rbac.authorization.k8s.io false ClusterRole rolebindings rbac.authorization.k8s.io true RoleBinding roles rbac.authorization.k8s.io true Role storageclasses sc storage.k8s.io false StorageClass volumeattachments storage.k8s.io false VolumeAttachment |
在日常运维管理中,经常使用资源对象的名称缩写来操作
3.1 集群管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # 查看集群信息 kubectl cluster-info # 查看节点状态 kubectl get node # 查看更详细的节点信息 kubectl get node -o wide # 查看节点详细情况 kubectl describe node k8s-master # 查看节点使用情况,需要安装metrics kubectl top nodes # 查看最近的集群事件 kubectl get events -- sort -by=.metadata.creationTimestamp kubectl get events -n prod # 给节点打标签 kubectl label nodes <node-name> key=value kubectl label nodes k8s-node1 node-role.kubernetes.io /worker =worker # 取消节点标签 kubectl label nodes <node-name> key- |
3.2 Namespace管理
Namespace(命名空间) 用于在同一个集群中逻辑地划分资源,以支持不同的环境、团队或项目。Namespace 能够将资源隔离管理,防止命名冲突,并便于访问控制和配额管理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # 创建命令空间 kubectl create namespace liyb # 查看命名空间 kubectl get ns # 查看命令空间详细信息 kubectl get ns -o yaml kubectl describe get ns prod # 删除命令空间 kubectl delete ns liyb #查看命名空间下所有deployment kubectl get deploy -o wide -n prod #查看指定deployment的详细信息 kubectl get deploy nginx -o yaml -n prod kubectl get deployment nginx -o json -n prod |
如果不指定命名空间,创建的资源对象默认存放在default
命名空间。
在生产环境中,一般是一个项目放在一个命名空间中,在处理对象资源时,需要使用 -n 命名空间
来对资源进行操作
3.3 Pod管理
Pod 是最小的可部署单元。它是运行应用容器的集合,通常包含一个或多个容器,负责应用的运行、管理和监控。管理 Pods 是 Kubernetes 日常运维的重要部分,常用命令可以帮助用户高效地创建、查看、更新和删除 Pods
(1)创建pod
1 2 3 4 | # 创建 podkubectl apply -f pod.yaml kubectl run my-pod --image=nginx --port=80 |
(2)查看pod
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # 查看pod资源使用情况 kubectl top pod # 查看所有的pod kubectl get pod -A # 查看命名空间下所有pod kubectl get pod -o wide -n prod # 查看指定pod的详细信息 kubectl get pod <pod-name> -o yaml -n <namespace> kubectl get pod nginx -o yaml -n prod # 查看pod日志 kubectl logs nginx-f49c8d898-njgzk -n prod kubectl logs -f nginx-f49c8d898-njgzk -n prod # 查看pod详细信息 kubectl describe pod nginx-f49c8d898-njgzk -n prod # 显示所有pod的标签 kubectl get pods --show-labels -A # 列出 Pods,按重启次数排序 kubectl get pods -- sort -by= '.status.containerStatuses[0].restartCount' # 列出pod的亲和性规则 kubectl get pod nginx-f49c8d898-njgzk -o=jsonpath= '{.spec.affinity}' # 列出pod的反亲和性规则 kubectl get pod nginx-f49c8d898-njgzk -o=jsonpath= '{.spec.affinity.podAntiAffinity}' |
(3)修改pod
1 2 3 4 5 6 7 8 9 | # 进入到pod容器内,使用exit退出容器 kubectl exec -it <pod-name> -n <namespace> -- < command > kubectl exec -it nginx-f49c8d898-njgzk -- bash -n prod # 将文件或文件夹拷入pod kubectl cp /etc/nginx/nginx .conf nginx-f49c8d898-njgzk: /etc/nginx/conf .d /nginx .conf -n prod # 将文件或文件夹从pod拷出 kubectl cp nginx-f49c8d898-njgzk:etc /nginx/conf .d /nginx .conf /opt -n prod |
(4)删除pod
1 2 3 4 5 | # 删除pod(如果是deploy部署,相当于重启) kubectl delete pod nginx-f49c8d898-njgzk -n prod # 强制删除pod kubectl delete pod nginx-f49c8d898-njgzk --grace-period=0 --force -n app |
(5)Pod网络诊断
1 2 3 4 5 6 7 8 9 10 11 | # 运行网络诊断 Pod进行调试 kubectl run -it -- rm --restart=Never --image=docker.m.daocloud.io /busybox debug-pod -- /bin/sh # 测试从 Pod 到特定端点的连接 kubectl exec -it <pod-name> -n <namespace> -- curl <endpoint-url> # 跟踪从一个 Pod 到另一个 Pod 的网络路径 kubectl exec -it < source -pod-name> -n <namespace> -- traceroute <destination-pod-ip> # 检查 Pod 的 DNS 解析 kubectl exec -it <pod-name> -n <namespace> -- nslookup <domain-name> |
3.4 deployment管理
Deployment 是一种用于管理 Pod 副本的控制器,提供滚动更新、扩缩容、回滚等功能
(1)创建deployment
有两种方式,一种是命令行,一种是写一个资源清单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # 命令行创建deployment kubectl create deployment <deployment-name> --image=<container-image> kubectl create deploy mynginx --image=nginx:1.25 # 基于yaml方式创建 # 创建资源清单 vi deployment.yaml apiVersion: apps /v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.25 ports: - containerPort: 80 kubectl apply -f deployment.yaml |
(2)查看deployment
1 2 3 4 5 6 7 | # 查看deployment信息 kubectl get deploy -n <namespace> kubectl get deploy nginx # 查看某个deploy详细信息 kubectl get deploy nginx -o wide kubectl describe deploy nignx |
(3)更新deployment
1 2 3 | kubectl set image <deploy-name> my-container=my-image:newtag kubectl set image mynginx nginx=nginx:1.26 |
(4)伸缩deployment
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 手动伸缩 kubectl scale deployment <deployment-name> --replicas=<replica-count> -n <namespace> # 指定伸缩数量 kubectl scale deploy nginx --replicas=3 # 设置自动伸缩 kubectl autoscale deployment <deployment-name> --min=<min-pods> --max=<max-pods> --cpu-percent=<cpu-percent> -n <namespace> # CPU超过70%就进行伸缩 kubectl autoscale deploy nginx --min=1 --max=3 --cpu-percent=70 # 检查自动伸缩器状态 kubectl get hpa |
(5)版本回滚
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # 查看滚动更新状态 kubectl rollout status deployment/<deployment-name> -n <namespace> kubectl rollout status deployment /nginx # 查看deployment所有历史版本 kubectl rollout history deployment /nginx # 查看deployment某个历史版本的详细信息 kubectl rollout history deployment /nginx --revision=1 # 回滚到上一个版本 kubectl rollout undo deployment nginx # 指定版本回滚 kubectl rollout undo 资源类型/资源名称 --to-revision=版本号 kubectl rollout undo deployment /nginx --to-revision=3 |
(6)删除deployment
1 2 3 4 5 6 | # 命令行删除 kubectl delete deploy <deploy-name> kubectl delete deploy mynginx # 基于资源清单删除 kubectl delete -f deploy.yaml |
3.5 Service管理
(1)创建service
——————————————————————————————————————————————————————————————————————————
无敌小马爱学习
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步