K8s: Kubernetes
🧭 Kubernetes 是一个开源的 容器编排平台,用于自动化容器的部署、扩缩、负载均衡、健康检查和管理。
它的目标是:让大规模容器应用像自动驾驶一样运行。
假设你用 Docker 部署了 3 个服务实例,你可能会问:
- 怎么自动重启挂掉的容器?
- 怎么把用户请求分发到多个容器?
- 怎么做到宕机自动拉起?资源不够时扩容?
- 怎么更新应用不中断服务?
🧱 K8s 就是为了解决这些问题的!
文章目录
- K8s
K8s
🌐 K8s 能做什么?
能力 | 简介 |
---|---|
部署管理 | 一条 YAML 语句就能部署一个服务 |
服务发现与负载均衡 | 自动创建 ClusterIP、Service 供内部调用 |
滚动更新 | 无缝发布新版容器镜像,逐个替换,确保不中断 |
自我修复 | 容器挂了会自动拉起来,Pod 异常会被替换 |
水平扩缩容 | 根据 CPU/内存/自定义指标自动加减容器数量 |
配置与密钥管理 | 使用 ConfigMap 和 Secret 管理配置、安全凭据 |
🔧 核心组件(简化版)
组件 | 说明 |
---|---|
Pod | 最小的部署单元,通常一个 Pod 包含一个容器 |
Service | 为 Pod 提供稳定的网络入口和负载均衡能力 |
Deployment | 控制 Pod 的副本数、升级、回滚等 |
ReplicaSet | Deployment 底层控制器,负责副本数量 |
Node | 工作节点,运行容器的实际机器(物理或虚拟) |
Kubelet | 每个 Node 上的 agent,负责启动/管理 Pod |
Controller Manager / Scheduler / API Server | 控制中枢 |
🎬 操作流程:
- 编写 Deployment 的 YAML 文件(定义镜像、端口、副本数)
kubectl apply -f xxx.yaml
部署- Kubernetes 创建 Pod,并确保它们始终运行
- 可通过 Service 访问你的服务
🧪 示例 YAML
- Deployment:定义你的后端服务运行镜像、端口、副本数:
apiVersion: apps/v1 # 指定使用的 API 版本,apps/v1 是当前推荐的 Deployment 所属版本
kind: Deployment # 声明这个资源是一个 Deployment(部署控制器)
metadata: # 元数据部分,主要用于标识这个 Deployment 的名称name: my-backend # 【Deployment 的名称,可以用于 kubectl 操作】,比如 kubectl get deployment my-backend
spec: # Deployment 的核心配置 ( Specification 规格,说明)replicas: 3 # 期望运行的 Pod 【副本】数量,也就是部署 3 个后端服务实例selector: # 选择器,用于匹配哪些 Pod 属于这个 Deployment 【控制的范围】matchLabels:app: my-backend # 和下面 template.metadata.labels 对应,用来选出正确的 Podtemplate: # 【Pod】 的模板,定义了 Pod 应该怎么创建metadata:labels:app: my-backend # 这个 label 会打到每个 Pod 上,供 selector 匹配spec:containers:- name: backend # 容器名称(自定义),便于日志、调试等引用image: mycompany/my-backend:v1 # 容器镜像,通常是你构建好的后端服务镜像ports:- containerPort: 8080 # 容器监听的端口(应用服务端口),供 Service 转发使用
- Service:对外暴露这个服务,让别人能访问 8080 端口
apiVersion: v1
kind: Service
metadata:name: my-backend-service
spec:selector:app: my-backendports:- port: 80 # Service 对外暴露的端口targetPort: 8080 # 实际 Pod 的端口type: ClusterIP # 集群内部访问
Service 类型 | 特点 | 使用场景 |
---|---|---|
ClusterIP | 默认类型,仅集群内部访问 | 服务间调用 |
NodePort | 在每个 Node 上开放端口访问 | 简单测试 |
LoadBalancer | 云环境中通过云负载均衡器访问 | 线上发布 |
ExternalName | 通过 DNS 别名指向外部服务 | 引用外部 |