Kubernetes(常简称为k8s)作为开源容器编排平台,在容器化应用的自动化部署、扩展与管理方面,发挥着举足轻重的作用。无论是运维工程师,还是开发人员,熟练掌握Kubernetes命令都是有效管理集群的必备技能。下面,将从多个维度为大家梳理Kubernetes的常用命令。
一、集群信息查询
- 查看集群版本
kubectl version
该命令能获取集群的版本信息,帮助运维人员确认集群的Kubernetes版本,判断是否需要进行版本升级。
2. 获取API组及版本
kubectl api-versions
输出一系列API组及其对应的版本号,让使用者了解集群支持的API版本,以便编写符合规范的配置文件。
3. 查看服务端支持的资源类型
kubectl api-resources
通过此命令可获取服务端API支持的资源类型,在操作各类资源时做到心中有数。
4. 查询集群信息
kubectl cluster-info
执行后显示集群的基本信息,如Kubernetes控制平面的地址等。如需更详细的信息,可使用
kubectl cluster-info dump
全面了解集群状态。
二、资源详细信息查看
- 查看特定资源详细信息
kubectl describe <资源类型,如:deployments> <资源名称>
能获取指定资源的详细配置、运行状态等信息,帮助排查资源运行过程中出现的问题。
2. 查看指定命名空间下的Pod详情
kubectl -n <命名空间> describe pod <pod-name>
配合-o wide
参数,能显示更全面的Pod信息,如IP地址、节点信息等。
3. 查看集群节点资源使用情况
kubectl describe nodes
该命令展示集群节点的资源使用情况,包括CPU、GPU、内存的使用以及标签信息。若要查看特定节点,在nodes
后加上具体节点名即可。
三、资源创建
- 更新和创建资源
kubectl apply -f <文件名>
此命令既能创建新资源,也能更新已存在的资源,是日常操作中推荐使用的方式。
2. 创建资源
kubectl create -f <文件名>
根据指定的文件创建资源。若要创建当前目录下的所有YAML资源,可使用
kubectl create -f.
此外,
kubectl create -f./app1.yaml -f./app2.yaml
支持批量创建多个资源文件。
四、资源删除
4.1 删除指定资源
- 删除指定Pod
kubectl delete pod <pod-name>
- 删除指定Service
kubectl delete service <service-name>
- 通用删除命令
kubectl delete <资源类型> <资源名称>
4.2 根据文件删除资源
kubectl delete -f./pod.json
删除文件中定义的Pod。
4.3 删除命名空间下的所有资源
- 删除指定命名空间下的所有Pod
kubectl delete pods --all -n <命名空间>
将pods
替换为services
,则可删除所有服务。
4.4 强制删除Pod
kubectl delete pod <pod-name> -n <命名空间> --force --grace-period=0
用于强制删除处于异常状态的Pod。
4.5 按标签删除资源
kubectl delete pods,services -l name=<标签名>
可删除指定标签的Pod和Service,加上--include-uninitialized
参数,能删除尚未初始化的资源。
五、资源扩缩容
5.1 手动扩缩容
- 扩展副本数
kubectl scale <资源类型,如rc> <资源名称,如rc-nginx-2> --replicas=5
将指定资源的副本数扩展到5。
- 缩减副本数
kubectl scale rc rc-nginx-2 —replicas=3
将副本数缩减到3。
5.2 自动扩缩容
kubectl autoscale deployment my-app --min=3 --max=10
自动扩缩容my-app
的部署,确保副本数在3到10之间。若加上--cpu-percent=80
,当CPU使用率达到80%时,触发自动扩缩容操作。
六、资源使用情况查询
6.1 查看节点资源使用情况
- 查看特定节点
kubectl top node k8s-node
显示指定节点的资源使用情况。
- 查看所有节点
kubectl top node
展示集群所有节点的资源使用情况。
6.2 查看命名空间下Pod的资源使用情况
kubectl top pod -n logging
输出指定命名空间(如logging
)下Pod的资源使用情况。
七、资源注解更新
更新Pod注解
kubectl annotate pods <pod-name> description='my frontend'
将指定Pod的description
注解值更新为my frontend
。
八、容器操作
8.1 登录容器
kubectl -n <命名空间> exec -it <Pod名称> -- bash
进入指定命名空间下的Pod容器,方便进行调试和管理。
8.2 文件复制
- 从本地复制到Pod
kubectl -n <命名空间> cp /opt/sql <Pod名称>:/tmp/
将本地文件复制到Pod的指定路径。
- 从Pod复制到本地
kubectl -n <命名空间> cp <Pod名称>:/tmp/app_bak ./mysql_bak/
将Pod内的文件复制到本地。
九、回滚和历史查看
9.1 应用配置
cat pod.json | kubectl apply -f -
将控制台输入的JSON配置应用到Pod。
9.2 查看修订历史
kubectl rollout history deployment nginx-deployment
查看指定Deployment的修订版本历史记录。
9.3 回滚操作
kubectl rollout undo deployment nginx-deployment --to-revision=1
回滚到指定版本。若不加–to-revision=版本号
,则回退到上一个版本。
十、资源配额与限制查看
10.1 查看资源配额
kubectl describe quota
获取集群的资源配额信息,了解各命名空间的资源使用限制。
10.2 查看资源限制
kubectl describe limitrange
查看集群的资源限制配置,确保资源的合理使用。
十一、日志查看
11.1 实时查看日志
kubectl logs -f <Pod名称> -n <命名空间>
实时跟踪指定Pod的日志输出。
11.2 查看指定行数日志
kubectl logs --tail=10 <Pod名称>
获取指定Pod的最后10行日志。
11.3 按关键字筛选日志
kubectl logs <Pod名称> -n <命名空间> | grep关键字
根据指定关键字筛选日志信息。
十二、节点与标签操作
12.1 查看节点和标签
kubectl get nodes --show-labels
获取所有节点及其标签信息。
12.2 标签管理
- 增加标签
kubectl label nodes <节点名> <标签键>=<标签名>
- 删除标签
kubectl label nodes <节点名> <标签键>-
12.3 污点管理
- 增加污点
kubectl taint nodes <节点名> <标签键>=true:NoSchedule
- 删除污点
kubectl taint nodes <节点名> <标签键>:NoSchedule-
- 删除所有节点的指定污点
kubectl taint nodes --all <标签键>:NoSchedule-
十三、服务编辑
编辑Service
kubectl edit svc/docker-registry
对指定的Service进行编辑操作,修改配置信息。
十四、资源列表查看
14.1 查看Pod列表
- 查看所有Pod
kubectl get pods -A
- 查看特定命名空间下的Pod
kubectl get pods -n <命名空间>
- 查看异常Pod
kubectl get po -A|grep -Ev '1/1|2/2|3/3|4/4|Com'
- 按关键字查询Pod
kubectl get pods -o wide | grep <需查询Pod的关键字>
并输出详细信息。
14.2 查看命名空间列表
kubectl get namespaces
14.3 查看节点列表
kubectl get nodes
加上--show-labels
可查看标签,加上-o wide
可查看IP。
14.4 查看服务列表
kubectl get services
kubectl get svc
后者可指定-A
参数查看所有命名空间中的服务。
14.5 查看StatefulSet列表
kubectl get statefulset
14.6 查看DaemonSet列表
kubectl get daemonset
14.7 查看Deployment列表
kubectl get deployments
14.8 查看域名列表
kubectl get ingress -A
14.9 查看自定义资源列表
kubectl get crd -A
14.10 查看网络策略
kubectl get networkpolicies
14.11 查看存储类
kubectl get storageclass
十五、资源格式信息获取
15.1 获取YAML格式信息
kubectl get <资源类型,如deployment> <资源名称,如my-deployment> -o yaml
获取指定资源的YAML格式配置信息。
15.2 获取JSON格式信息
kubectl get <资源类型,如deployment> <资源名称,如my-deployment> -o json
获取指定资源的JSON格式配置信息。
十六、节点调度管理
16.1 标记节点不可调度
kubectl cordon k8s-node
阻止新的Pod调度到指定节点。
16.2 标记节点可调度
kubectl uncordon k8s-node
恢复节点的可调度状态。
16.3 排除节点进行维护
kubectl drain k8s-node
将指定节点上的Pod驱逐,准备进行维护操作。