Kubernetes 实战入门:从本地集群到云端部署
Kubernetes 不只是容器编排工具,它已成为管理分布式应用的行业标准。本文面向想快速上手实践的开发者和工程师:从部署本地集群开始,掌握基本概念,并为使用托管云服务打下基础。
设置工作环境
第一步是安装 kubectl,这是与 Kubernetes API 交互的主要命令行工具。客户端版本应与集群版本相差不超过一个次要版本分支。安装方式因操作系统而异:
- Linux:Kubernetes 仓库中的官方脚本;
- macOS:
brew install kubectl; - Windows:通过 winget、Chocolatey 或直接下载二进制文件。
重要提示:如果使用 Docker Desktop,其内置的 kubectl 可能与主安装冲突。建议使用单一安装点并管理 PATH 环境变量。
本地开发常用两种方案:
Minikube
Minikube 在虚拟机或容器中创建单节点集群(取决于驱动)。只需一条命令即可启动:
minikube start
启动后,检查节点状态:
kubectl get nodes
预期结果:一个状态为 Ready 的节点。
Kind (Kubernetes in Docker)
Kind 将节点作为 Docker 容器运行。这与现有 Docker 工作流紧密集成,非常方便:
kind create cluster
Kind 的优势包括启动快和清理容易。不过,对于初学者,Minikube 仍是首选,因为其文档丰富且社区活跃。
启动集群后,验证连通性:
kubectl cluster-info
如果命令返回控制平面组件信息,则环境已就绪。
Kubernetes 基本对象
Kubernetes 中的任何应用都基于三个关键抽象:Pod、Deployment 和 Service。
Pod —— 最小的可执行单元
Pod 是共享网络命名空间、卷和 IPC 的一组或多个容器。Pod 中的所有容器可以通过 localhost 相互访问。但是,Pod 是暂时的:由于故障、更新或扩展,它们随时可能被删除。不推荐直接管理 Pod。
Deployment —— 声明式副本管理
Deployment 定义了应用的期望状态:副本数、容器镜像、更新策略。示例清单:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:v1.2
ports:
- containerPort: 80
应用清单:
kubectl apply -f deployment.yaml
Kubernetes 会自动创建 ReplicaSet,确保指定数量的 Pod 运行。
Service —— 稳定的网络入口点
Service 为通过标签选中的 Pod 组提供稳定的 IP 地址和 DNS 名称。示例内部服务:
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- port: 8080
targetPort: 80
type: ClusterIP
在 Minikube 中本地访问,使用:
minikube service my-app-service
该命令会自动在浏览器中打开正确的 URL。
迁移到云端:托管集群
掌握本地环境后,自然会转向生产部署。使用 kubeadm 手动设置集群虽然可行,但大多数场景下不实用。最好使用托管服务:
- Amazon EKS —— 灵活,但需要深入了解 AWS IAM 和 VPC;
- Google GKE —— 最成熟的实现,支持自动节点管理和内置安全;
- Azure AKS —— 在使用 Microsoft 生态系统和 Azure DevOps 时非常方便。
推荐使用基础设施即代码 (IaC) 方法。例如,使用 Terraform 可以声明式描述集群和节点组,实现可重现性和版本控制。
在云端创建集群后,更新 kubeconfig:
aws eks update-kubeconfig --name my-app-cluster
现在所有 kubectl 命令将针对云端集群。
调试常见问题
Kubernetes 错误往往有重复模式。采用系统化方法:
- 检查 Pod 状态:
kubectl get pods - 查看日志:
kubectl logs <pod-name> - 分析事件:
kubectl describe pod <pod-name> - 如需进入容器:
kubectl exec -it <pod-name> -- /bin/sh
常见问题及修复:
- ImagePullBackOff:验证镜像名称、标签,以及私有仓库的
imagePullSecrets; - CrashLoopBackOff:检查应用日志和事件,查找
OOMKilled或初始化错误; - Service unreachable:确保 Pod 标签与 Service 选择器匹配,且端口(
port、targetPort、containerPort)对齐。
始终为 CPU 和内存指定 resources.requests 和 resources.limits —— 这可防止节点不稳定和调度不良。
接下来学习什么
掌握基础后,重点学习:
- Ingress 和 Gateway API —— 外部流量路由;
- ConfigMaps 和 Secrets —— 无硬编码的配置管理;
- Jobs 和 CronJobs —— 一次性及周期性任务;
- Horizontal Pod Autoscaler —— 基于指标的自动扩展。
Kubernetes 生态系统日新月异:新标准(如 Gateway API)逐步取代旧标准。保持更新,但优先解决具体问题,而不是一次性学完所有内容。
关键要点
- Kubernetes 需要声明式方法:描述期望状态,系统会努力实现它。
- 本地集群(Minikube、Kind)提供安全沙箱,用于实验而无生产风险。
- 托管云服务(EKS、GKE、AKS)节省数百小时运维时间。
- 调试从
kubectl get、describe和logs开始 —— 这些解决 90% 的问题。 - 始终设置资源限制,避免集群不稳定。
— Editorial Team
暂无评论。