Kubernetes 核心概念与实战:从 Pod 到 Deployment 的第一步
为什么需要 Kubernetes
当容器数量从几个增长到几十上百个,手动管理容器的启动、扩缩容、故障恢复和网络互联变得不再现实。Kubernetes(简称 K8s)正是为解决这个问题而生的容器编排平台:它把一组机器抽象成统一的资源池,你只需声明式地描述“应用应该长什么样”,平台会负责把实际状态收敛到期望状态。
架构速览
Kubernetes 集群分为控制平面(Control Plane)和工作节点(Node)。控制平面包含 API Server、etcd、Scheduler 和 Controller Manager,负责做决策;工作节点运行 kubelet 和容器运行时,负责执行。kubectl 是我们与 API Server 对话的命令行工具,几乎所有操作都通过它完成。
核心概念
Pod 是 Kubernetes 中最小的调度单元。一个 Pod 可以包含一个或多个共享网络与存储的容器,通常一个 Pod 运行一个应用实例。Pod 是短暂的,重建后 IP 会变化,因此不要直接依赖 Pod 做服务发现。
Deployment 管理 Pod 的副本数与滚动更新。我们声明“需要 3 个副本”,Deployment 控制器会保证始终有 3 个 Pod 在运行;某个 Pod 崩溃后会自动重建,更新镜像时则自动完成滚动发布。
Service 为一组 Pod 提供稳定的访问入口。Service 通过标签选择器把流量转发到后端 Pod,并提供 ClusterIP、NodePort、LoadBalancer 等类型,屏蔽了 Pod IP 变化带来的影响。
Namespace 用于在同一集群内做资源隔离,例如 dev、test、prod 各用一个命名空间,互不干扰。
ConfigMap 与 Secret 把配置与镜像解耦,避免把数据库密码写死在镜像里,是云原生应用的必备实践。
实战:部署第一个应用
把下面内容保存为 deploy.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-demo
spec:
replicas: 3
selector:
matchLabels:
app: web-demo
template:
metadata:
labels:
app: web-demo
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
依次执行:
kubectl apply -f deploy.yaml
kubectl get pods -l app=web-demo
kubectl scale deployment web-demo --replicas=5
扩缩容只需要修改 replicas,Kubernetes 会自动增减 Pod。对外暴露服务:
kubectl expose deployment web-demo --port=80 --type=NodePort
kubectl get svc web-demo
常用命令速查
- kubectl get pods/svc/deploy:查看资源
- kubectl describe pod <名称>:排查问题先看事件
- kubectl logs -f <Pod>:实时查看日志
- kubectl exec -it <Pod> – sh:进入容器调试
小结
掌握 Pod、Deployment、Service 这三个概念,就掌握了 Kubernetes 的大半日常操作。建议在本地用 minikube 或 kind 搭建单节点集群,把上面的 YAML 亲手跑一遍。“描述期望状态、平台自动收敛”的声明式思想,是云原生时代最重要的思维转变,也是继续学习 HPA、Ingress、Helm 的基础。
- 点赞
- 收藏
- 关注作者
评论(0)