一、Kubernetes 是什么?
Kubernetes 是一个开源的容器编排引擎,用于自动化容器化应用的部署、扩展和管理。它源自 Google,其设计灵感来源于该公司多年运行大规模生产工作负载的经验。
核心价值:
- 服务发现与负载均衡:自动将流量分配到健康的容器。
- 存储编排:自动挂载存储系统(本地、云存储)。
- 自动发布与回滚:可控地部署应用版本,出错时立即回滚。
- 自我修复:重启失败容器、替换并杀死不健康的容器。
- 密钥与配置管理:安全地存储和管理敏感信息。
二、核心架构与组件
Kubernetes 采用主从(Master-Node)架构。

1. 控制平面 (Control Plane / Master)
- kube-apiserver:集群的前端和总网关,所有内外部请求都必须通过它。
- etcd:一个高可用的键值数据库,是 Kubernetes 存储所有集群数据的唯一真实数据源。
- kube-scheduler:负责调度 Pods 到合适的 Node 上(根据资源需求、策略等因素)。
- kube-controller-manager:运行着多种控制器,这些控制器负责处理集群中的常规任务(如确保 Pod 数量、处理节点故障等)。
- cloud-controller-manager:用于与底层云提供商(如 AWS、Azure)的 API 交互。
2. 工作节点 (Worker Nodes)
- kubelet:节点上的代理,负责与控制平面通信,管理本节点上 Pod 的生命周期。
- kube-proxy:维护节点上的网络规则,实现服务负载均衡。
- 容器运行时 (Container Runtime):负责运行容器的软件,如 containerd、CRI-O。
3. 抽象概念:Pod
- Pod 是 Kubernetes 中最小的可部署和管理的计算单元。
- 一个 Pod 包含一个或多个容器(一般是一个)、存储资源和唯一的网络 IP。
- 同一个 Pod 中的容器共享网络命名空间和存储卷,可以通过 localhost 相互通信。
三、核心对象与概念
|
对象 (Object) |
作用 |
类比 |
|
Pod |
最小的部署单元,包含一个或多个容器。 |
一台物理机/虚拟机上的一个应用环境。 |
|
Deployment |
最常用的对象。定义 Pod 的期望状态(副本数、镜像版本),实现无状态应用的部署、滚动更新和回滚。 |
应用发布的管家。 |
|
Service |
为一组 Pod 提供固定的网络入口和负载均衡。Pod 的 IP 会变,但 Service 的 IP/DNS 名不变。 |
应用的稳定访问地址或负载均衡器。 |
|
ConfigMap |
将非机密的配置数据(如配置文件、环境变量)与容器镜像解耦。 |
应用的外部配置文件。 |
|
Secret |
用于存储敏感信息(如密码、令牌、密钥),以加密或编码的方式存储。 |
保险柜。 |
|
Volume |
为 Pod 提供持久化存储,容器重启后数据不会丢失。 |
外接硬盘/U盘。 |
|
Namespace |
在物理集群中创建虚拟的隔离空间,用于资源隔离和权限管理(如 dev, prod 环境)。 |
文件夹/工作区。 |
四、基本操作流程(示例:部署一个应用)
1. 编写 YAML 声明文件 (my-app.yaml)
Kubernetes 采用声明式 API,你告知它“期望的状态是什么”,它负责调整当前状态以达到期望状态。
# 创建一个 Deployment,它负责管理 Pod
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-web-app
spec:
replicas: 3 # 期望运行 3 个副本(Pod)
selector:
matchLabels:
app: my-web-app
template: # 这是 Pod 的模板
metadata:
labels:
app: my-web-app # 这个标签很重大,Service 靠它识别 Pod
spec:
containers:
- name: nginx-container
image: nginx:1.25 # 容器镜像
ports:
- containerPort: 80 # 容器暴露的端口
---
# 创建一个 Service,为上面的 Pod 提供固定访问入口
apiVersion: v1
kind: Service
metadata:
name: my-web-app-service
spec:
selector:
app: my-web-app # 选择所有带有 `app: my-web-app` 标签的 Pod
ports:
- protocol: TCP
port: 80 # Service 的端口
targetPort: 80 # 容器端口
type: LoadBalancer # 如果是云平台,会创建一个外部负载均衡器
2. 使用kubectl部署
kubectl 是与 Kubernetes 集群交互的命令行工具。
# 应用 YAML 文件,创建资源
kubectl apply -f my-app.yaml
# 查看 Deployment 状态
kubectl get deployments
# 查看 Pod 状态(每个 Pod 都是一个运行中的容器实例)
kubectl get pods
# 查看 Service 状态,获取外部访问地址(EXTERNAL-IP)
kubectl get services
3. 其他常用命令
# 查看日志(排查问题)
kubectl logs <pod-name>
# 进入容器内部(调试)
kubectl exec -it <pod-name> -- /bin/bash
# 查看详细的资源描述
kubectl describe pod <pod-name>
# 删除资源
kubectl delete -f my-app.yaml
五、学习路径提议
- 本地搭建环境:使用 minikube 或 kind 快速在本地搭建一个单节点 K8s 集群进行实验。
- 掌握核心概念:彻底理解 Pod, Deployment, Service 这三个最核心的对象。
- 练习 YAML 编写:熟能生巧,理解每个字段的含义。
- 学习存储(Volume/PVC)和配置(ConfigMap/Secret)。
- 探索进阶概念:Ingress(7层路由)、StatefulSet(部署有状态应用)、Helm(包管理工具)。
© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END
















- 最新
- 最热
只看作者