Kubernetes(k8s)解析

79 阅读3分钟

Kubernetes(简称 k8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。以下是 Kubernetes 的详细解析,涵盖核心概念、架构、组件及关键功能:


1. Kubernetes 核心概念

  • Pod

    • 最小的调度单元,包含一个或多个共享网络/存储的容器。
    • 每个 Pod 有唯一 IP,内部容器通过 localhost 通信。
    • 示例:一个 Pod 包含主应用容器和日志收集 Sidecar 容器。
  • Deployment

    • 定义 Pod 的副本数和更新策略(滚动更新、回滚)。
    • 确保指定数量的 Pod 始终运行。
    • 示例:nginx-deployment 管理 3 个 Nginx Pod。
  • Service

    • 为 Pod 提供稳定的访问入口(ClusterIP、NodePort、LoadBalancer)。
    • 通过标签选择器关联 Pod。
    • 示例:ClusterIP 服务暴露一组后端 Pod。
  • Namespace

    • 逻辑隔离资源(如 devprod),支持多租户。
    • 系统命名空间:kube-system(核心组件)、default(用户资源)。
  • ConfigMap & Secret

    • ConfigMap:存储非敏感配置(如环境变量)。
    • Secret:存储敏感数据(如密码、密钥),Base64 编码。
  • Volume

    • 提供持久化存储(如 hostPathnfs、云存储)。
    • PersistentVolume (PV)PersistentVolumeClaim (PVC) 解耦存储细节。
  • Ingress

    • 管理外部访问(HTTP/HTTPS 路由),通常配合 Nginx/Istio 实现。

2. Kubernetes 架构

控制平面(Control Plane)

  1. API Server (kube-apiserver)
    • 集群的入口,处理 REST 请求,校验资源定义。
  2. Scheduler (kube-scheduler)
    • 决定 Pod 调度到哪个节点(基于资源、亲和性等)。
  3. Controller Manager (kube-controller-manager)
    • 运行核心控制器(如 Deployment、Node 控制器)。
  4. etcd
    • 分布式键值存储,保存集群状态(如 Pod、Service 信息)。

工作节点(Worker Node)

  1. kubelet
    • 负责 Pod 生命周期管理(创建、监控)。
  2. kube-proxy
    • 维护节点网络规则(Service 的 IPTABLES/IPVS 转发)。
  3. 容器运行时
    • 如 Docker、containerd、CRI-O,负责运行容器。

3. 关键功能

  • 自动扩缩

    • Horizontal Pod Autoscaler (HPA):根据 CPU/内存等指标扩缩 Pod。
    • Cluster Autoscaler:动态调整节点数量(云环境)。
  • 自我修复

    • 重启故障容器、替换不可用 Pod、重新调度节点故障的 Pod。
  • 服务发现与负载均衡

    • 通过 ServiceDNS 自动暴露应用。
  • 滚动更新与回滚

    • Deployment 支持分批次更新,失败时自动回滚到上一版本。
  • 安全机制

    • RBAC:基于角色的访问控制。
    • Network Policies:定义 Pod 间网络隔离规则。

4. 常用命令

# 查看资源
kubectl get pods -n <namespace>
kubectl describe pod <pod-name>

# 部署应用
kubectl apply -f deployment.yaml

# 调试
kubectl logs <pod-name> -c <container-name>
kubectl exec -it <pod-name> -- /bin/sh

# 扩缩容
kubectl scale deployment/nginx --replicas=3

5. 部署工具与生态

  • Minikube:本地单节点集群。
  • kubeadm:生产级集群部署工具。
  • Helm:Kubernetes 包管理器(Charts)。
  • Operator:扩展 Kubernetes 以管理有状态应用(如数据库)。
  • 服务网格:Istio、Linkerd(增强流量管理、监控)。

6. 典型工作流程

  1. 开发者编写 DeploymentService YAML。
  2. kubectl apply 提交到集群,API Server 接收请求。
  3. Scheduler 分配 Pod 到合适节点,kubelet 创建容器。
  4. Service 和 Ingress 提供访问入口,HPA 根据负载调整副本数。

7. 学习资源

  • 官方文档kubernetes.io
  • 互动教程Katacoda
  • 书籍:《Kubernetes in Action》《深入剖析Kubernetes》

Kubernetes 是云原生领域的核心工具,掌握其核心概念和运维技巧对现代 DevOps 和 SRE 至关重要。建议从本地环境(如 Minikube)开始实践,逐步深入集群管理和高级特性。