Kubernetes
服务器部署
Kubernetes

Kubernetes(简称 K8s)是一个开源的容器编排平台,由 Google 开发并捐赠给云原生计算基金会(CNCF)。它旨在自动化部署、扩展和管理容器化应用,解决了微服务架构下多容器协同工作的复杂性问题。

Kubernetes(简称 K8s)是一个开源的容器编排平台,由 Google 开发并捐赠给云原生计算基金会(CNCF)。它旨在自动化部署、扩展和管理容器化应用,解决了微服务架构下多容器协同工作的复杂性问题。以下是其核心概念和功能的简要介绍:

核心功能

  1. 自动部署与扩缩容
    • 根据资源需求或流量变化自动调整容器副本数量。
    • 支持滚动更新和回滚,确保服务不间断运行。
  2. 服务发现与负载均衡
    • 通过内部 DNS 系统自动分配服务域名,实现容器间通信。
    • 内置负载均衡器,均匀分发流量到多个容器实例。
  3. 存储编排
    • 自动挂载存储卷(如本地磁盘、云存储、NFS),支持数据持久化。
    • 动态存储卷分配与回收。
  4. 自我修复
    • 监控容器健康状态,自动重启失败的容器。
    • 替换或杀死不健康的容器实例。
  5. 配置与密钥管理
    • 分离应用配置与代码,通过 ConfigMap 和 Secret 管理敏感信息(如数据库密码)。

基本概念

  1. Pod
    • 最小部署单元,包含一个或多个紧密关联的容器,共享网络和存储。
    • 通常一个 Pod 运行一个主应用容器,可能搭配辅助容器(如日志收集器)。
  2. Node
    • 物理机或虚拟机,是运行 Pod 的工作节点。
    • 包含 Kubelet(与 Master 通信)、容器运行时(如 Docker)和网络代理(Kube-proxy)。
  3. Master 组件
    • API Server:集群的统一入口,处理 REST 请求。
    • Scheduler:负责 Pod 的调度,分配到合适的 Node。
    • Controller Manager:维护集群状态(如副本数、节点健康)。
    • etcd:分布式键值存储,保存集群的配置和状态数据。
  4. Service
    • 抽象层,为一组 Pod 提供统一访问入口,实现负载均衡。
    • 类型包括 ClusterIP(集群内部访问)、NodePort(外部访问)、LoadBalancer(云负载均衡器)。
  5. Deployment
    • 声明式资源,定义 Pod 的期望状态(如副本数、版本)。
    • 支持滚动更新和回滚策略。

架构图

plaintext
+-------------------------------------+
|          Master Node                |
|                                     |
|  +------------+  +-------------+    |
|  | API Server |  | Scheduler   |    |
|  +------------+  +-------------+    |
|                                     |
|  +----------------------------+    |
|  | Controller Manager         |    |
|  +----------------------------+    |
|                                     |
|  +------------+                   |
|  | etcd       |                   |
|  +------------+                   |
+-------------------------------------+
           ^         ^
           |         |
+-------------------------------------+
|          Worker Node                |
|                                     |
|  +------------+  +-------------+    |
|  | Kubelet    |  | Kube-proxy  |    |
|  +------------+  +-------------+    |
|                                     |
|  +------------+                   |
|  | Container  |                   |
|  | Runtime    |                   |
|  +------------+                   |
|                                     |
|  +------------+                   |
|  | Pod 1      |                   |
|  +------------+                   |
|                                     |
|  +------------+                   |
|  | Pod 2      |                   |
|  +------------+                   |
+-------------------------------------+

工作流程

  1. 部署应用
    • 编写 Deployment 配置文件,定义应用镜像、副本数等。
    • 使用 kubectl apply 提交到 API Server。
  2. 调度与运行
    • Scheduler 根据资源情况将 Pod 分配到合适的 Node。
    • Node 上的 Kubelet 启动容器并监控状态。
  3. 服务暴露
    • 创建 Service 关联到目标 Pod,提供稳定访问地址。
  4. 扩缩容与更新
    • 修改 Deployment 的副本数或镜像版本,Kubernetes 自动调整。

适用场景

  • 微服务架构:管理数十到数百个微服务容器。
  • 弹性伸缩应用:根据流量自动调整资源,降低成本。
  • 混合云 / 多云部署:在不同云服务商或本地环境统一管理。
  • CI/CD 集成:与 Jenkins、GitLab CI 等工具结合实现自动化部署。

快速上手

  1. 本地环境搭建
    • Minikube:在本地虚拟机运行单节点 K8s 集群。
    • Kind:使用 Docker 容器创建多节点集群。
    • Docker Desktop:内置 K8s 支持(Windows/macOS)。
  2. 基本命令
    bash
    # 创建 Deployment
    kubectl create deployment nginx --image=nginx:1.21
    
    # 暴露为 Service
    kubectl expose deployment nginx --port=80 --type=NodePort
    
    # 查看 Pods
    kubectl get pods
    
    # 查看 Services
    kubectl get services
    
    # 扩缩容
    kubectl scale deployment nginx --replicas=3
    
    # 更新镜像
    kubectl set image deployment nginx nginx=nginx:1.22
    
    # 查看集群状态
    kubectl cluster-info
    

生态系统

  • 监控与日志:Prometheus(指标监控)、Grafana(可视化)、Elasticsearch(日志)。
  • 服务网格:Istio(流量管理)、Linkerd(轻量级服务网格)。
  • CI/CD 工具:Jenkins、Argo CD(声明式部署)、Tekton(云原生 CI/CD)。
  • 存储插件:Rook(Ceph 存储)、Longhorn(云原生块存储)。

挑战与局限

  • 学习曲线陡峭:概念复杂,需要理解多种资源类型和交互方式。
  • 运维成本高:大规模集群需要专业团队维护。
  • 资源消耗大:至少需要 2GB 内存运行单节点测试环境。

总结

Kubernetes 是云原生时代的基础设施标准,为容器化应用提供了强大的编排能力。它解决了微服务架构下的部署、扩展和管理难题,但对初学者来说门槛较高。建议通过实践 Minikube 或云服务商提供的托管 K8s 服务(如 GKE、EKS、AKS)逐步掌握。

相关导航

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注