《Kubernetes容器编排基础》

一、Kubernetes 是什么?

Kubernetes 是一个开源的容器编排引擎,用于自动化容器化应用的部署、扩展和管理。它源自 Google,其设计灵感来源于该公司多年运行大规模生产工作负载的经验。

核心价值

  • 服务发现与负载均衡:自动将流量分配到健康的容器。
  • 存储编排:自动挂载存储系统(本地、云存储)。
  • 自动发布与回滚:可控地部署应用版本,出错时立即回滚。
  • 自我修复:重启失败容器、替换并杀死不健康的容器。
  • 密钥与配置管理:安全地存储和管理敏感信息。

二、核心架构与组件

Kubernetes 采用主从(Master-Node)架构

《Kubernetes容器编排基础》

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

五、学习路径提议

  1. 本地搭建环境:使用 minikube 或 kind 快速在本地搭建一个单节点 K8s 集群进行实验。
  2. 掌握核心概念:彻底理解 Pod, Deployment, Service 这三个最核心的对象。
  3. 练习 YAML 编写:熟能生巧,理解每个字段的含义。
  4. 学习存储(Volume/PVC)和配置(ConfigMap/Secret)
  5. 探索进阶概念:Ingress(7层路由)、StatefulSet(部署有状态应用)、Helm(包管理工具)。
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 共2条

请登录后发表评论