Kubernetes(简称K8s)作为一种开源的容器编排平台,在云计算和微服务架构中扮演着至关重要的角色。无论是自动化部署、扩展还是管理容器化应用,K8s都能提供强大的功能。对于运维人员来说,掌握K8s的常用运维命令和解决方案是保障系统高效运行的关键。这篇博文将为你详细列出日常K8s容器运维中可能用到的常见命令,并分析运维过程中可能遇到的一些问题及解决方案。
一. Kubernetes 基础命令
1.1 安装与检查 K8s 版本
在使用 Kubernetes 前,你需要确认 Kubernetes 已正确安装并运行。检查版本可以确保你使用的是最新的稳定版本。
bash
# 查看 Kubernetes 版本
kubectl version --client
1.2 集群状态检查
bash
# 检查集群节点状态
kubectl get nodes
# 查看集群状态(详细信息)
kubectl cluster-info
# 获取 Kubernetes 配置上下文
kubectl config current-context
二. Pod 管理命令
2.1 创建与运行 Pod
bash
# 创建一个 Pod
kubectl run my-pod --image=nginx
# 创建一个 Pod 并设置资源限制
kubectl run my-pod --image=nginx --requests=cpu=100m,memory=128Mi --limits=cpu=200m,memory=256Mi
2.2 查看 Pod 状态
bash
# 查看 Pod 列表
kubectl get pods
# 查看 Pod 详细信息
kubectl describe pod my-pod
# 查看 Pod 的日志
kubectl logs my-pod
# 查看 Pod 状态和事件
kubectl get pods --all-namespaces
2.3 删除 Pod
bash
# 删除单个 Pod
kubectl delete pod my-pod
# 删除所有 Pod(慎用)
kubectl delete pods --all
2.4 扩展 Pod 副本数
bash
# 扩展 Pod 副本数
kubectl scale deployment my-deployment --replicas=3
三. Deployment 管理命令
3.1 创建与管理 Deployment
bash
# 创建 Deployment
kubectl create deployment my-deployment --image=nginx
# 更新 Deployment 中的镜像版本
kubectl set image deployment/my-deployment nginx=nginx:latest
# 查看 Deployment 状态
kubectl get deployments
# 查看 Deployment 详细信息
kubectl describe deployment my-deployment
3.2 删除 Deployment
bash

# 删除 Deployment
kubectl delete deployment my-deployment
四. Service 管理命令
4.1 创建与管理 Service
bash
# 创建 Service(ClusterIP 类型)
kubectl expose pod my-pod --port=80 --target-port=80 --name=my-service
# 创建 Service(LoadBalancer 类型)
kubectl expose pod my-pod --port=80 --target-port=80 --type=LoadBalancer --name=my-service
# 查看 Service 列表
kubectl get svc
# 查看 Service 详细信息
kubectl describe svc my-service
4.2 删除 Service
bash
# 删除 Service
kubectl delete svc my-service
五. Namespace 管理命令
5.1 创建与查看 Namespace
bash
# 创建 Namespace
kubectl create namespace my-namespace
# 查看所有 Namespace
kubectl get namespaces
5.2 删除 Namespace
bash
# 删除 Namespace
kubectl delete namespace my-namespace
六. 配置与管理 ConfigMap 和 Secret
6.1 配置 ConfigMap
bash
# 创建 ConfigMap
kubectl create configmap my-config --from-literal=key1=value1
# 查看 ConfigMap 列表
kubectl get configmap
# 查看 ConfigMap 详细信息
kubectl describe configmap my-config
6.2 配置 Secret
bash
# 创建 Secret
kubectl create secret generic my-secret --from-literal=password=my-password
# 查看 Secret 列表
kubectl get secret
# 查看 Secret 详细信息
kubectl describe secret my-secret
七. 常见问题及解决方案
在实际运维过程中,Kubernetes 集群和容器的管理可能会遇到一些常见问题。以下是一些常见问题及其解决方案:
7.1 Pod 处于 CrashLoopBackOff 状态
问题描述
Pod 启动失败,并且状态显示为 CrashLoopBackOff
。
解决方案
-
查看 Pod 日志,检查具体错误原因:
kubectl logs my-pod
-
检查容器的资源限制,确认是否有足够的 CPU 和内存。
-
如果是镜像问题,可以重新拉取镜像,或者修复镜像配置。
7.2 节点不可用或状态为 NotReady
问题描述
有些节点的状态变为 NotReady
,导致 Pod 调度失败。
解决方案
-
查看节点状态和事件:
kubectl describe node my-node
-
检查节点上的 Kubelet 是否正常运行。通过以下命令重启 Kubelet 服务:
sudo systemctl restart kubelet
-
如果是资源不足问题,可以适当调整资源限制,或者添加新的节点。
7.3 Service 无法访问
问题描述
创建的 Service 无法从外部访问。
解决方案
-
检查 Service 的类型。确保正确选择了
LoadBalancer
或NodePort
类型。kubectl describe svc my-service
-
如果是 LoadBalancer 类型,确认云提供商是否支持 LoadBalancer,或者你可以使用 Ingress 资源来实现外部访问。
-
如果使用
NodePort
类型,确保节点的防火墙或安全组规则允许访问对应的端口。
7.4 Kubernetes 资源限制导致 Pod 被 OOMKill
问题描述
Pod 被操作系统终止,状态为 OOMKilled
(Out of Memory Killed)。
解决方案
-
调整 Pod 的资源限制:
bash
kubectl set resources deployment my-deployment --limits=memory=1Gi
-
检查应用程序是否存在内存泄漏,必要时优化代码。
7.5 Pod 之间的网络通信问题
问题描述
不同 Pod 之间无法正常通信,导致应用程序无法工作。
解决方案
- 检查 Pod 所在的网络是否存在问题,可以通过查看 CNI 插件(如 Calico 或 Flannel)来确认。
- 确保 Pod 所在的 Namespace 或网络策略没有限制网络通信。
八. 总结
Kubernetes 提供了强大的容器编排功能,而掌握 K8s 的运维命令是保障集群稳定运行的基础。通过掌握本文中的常见命令和解决方案,你能够高效地管理和维护 Kubernetes 集群。如果你遇到其他问题或者需要更深入的帮助,欢迎留言讨论。