如何创建基本的 Kubernetes 部署

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本教程将引导你了解领先的开源容器编排平台 Kubernetes 的基本概念和实践方面。你将学习 Kubernetes 的基础知识、其架构和关键组件,以及如何在 Kubernetes 集群上部署和管理容器化应用程序。在本教程结束时,你将对 Kubernetes 有扎实的理解,并能够创建基本部署,以便在可扩展且有弹性的环境中运行你的应用程序。

Kubernetes 基础

Kubernetes 基础

Kubernetes 是一个开源容器编排平台,可自动执行容器化应用程序的部署、扩展和管理。它为运行和管理分布式系统提供了一个强大且可扩展的基础架构。

Kubernetes 架构

Kubernetes 采用主从架构。Kubernetes 主节点负责管理整个集群,而工作节点运行容器化应用程序。Kubernetes 架构的关键组件包括:

graph TD A[Kubernetes 主节点] --> B[API 服务器] A --> C[控制器管理器] A --> D[调度器] A --> E[etcd] B --> F[工作节点] F --> G[Kubelet] F --> H[容器运行时] F --> I[Kube-proxy]

Kubernetes 组件

  1. API 服务器:作为中央控制点,公开 Kubernetes API 并处理 RESTful 请求。
  2. 控制器管理器:通过监控 API 服务器来维护集群的期望状态。
  3. 调度器:根据资源需求和约束条件将 Pod 分配到合适的节点。
  4. etcd:一个分布式键值存储,用于保存 Kubernetes 集群的状态。
  5. Kubelet:在每个节点上运行的代理,负责管理 Pod 的生命周期。
  6. 容器运行时:负责运行容器的软件,如 Docker 或 containerd。
  7. Kube-proxy:管理集群内服务和 Pod 之间的网络连接。

Kubernetes 概念

  1. Pod:Kubernetes 中最小的可部署单元,代表一个或多个容器。
  2. 部署:管理无状态应用程序生命周期的声明式方式。
  3. 服务:为访问集群内的应用程序提供稳定的网络端点。
  4. :提供一种在 Pod 生命周期之外持久保存数据的方法。
  5. ConfigMap 和 Secret:将应用程序配置与容器镜像解耦。

Kubernetes 用例

Kubernetes 广泛用于:

  • 部署和扩展容器化应用程序
  • 实现持续集成和持续部署(CI/CD)管道
  • 运行和管理基于微服务的架构
  • 为运行有状态和无状态应用程序提供平台
  • 支持混合云和多云部署

Kubernetes 部署与管理

Kubernetes 部署

Kubernetes 提供了多种用于部署和管理应用程序的资源类型,包括:

  1. Pod:在 Kubernetes 中运行容器的基本单元。Pod 可以包含一个或多个共享相同网络和存储资源的容器。
  2. 部署:管理无状态应用程序生命周期的声明式方式。部署确保始终运行指定数量的 Pod 副本。
graph LR A[部署] --> B[副本集] B --> C[Pod] B --> D[Pod] B --> E[Pod]
  1. 服务:为访问集群内的应用程序提供稳定的网络端点。服务可以在多个 Pod 之间进行流量负载均衡。

Kubernetes 扩展

Kubernetes 支持应用程序的手动和自动扩展:

  1. 手动扩展:手动更新部署或副本集中所需的副本数量。
  2. 水平 Pod 自动扩展(HPA):根据 CPU 利用率或其他自定义指标自动扩展 Pod 副本的数量。
graph LR A[部署] --> B[副本集] B --> C[Pod] B --> D[Pod] B --> E[Pod] F[水平 Pod 自动缩放器] --> B

Kubernetes 网络

Kubernetes 提供了一个强大的网络模型,以实现 Pod 与服务之间的通信:

  1. Pod 网络:每个 Pod 都有自己的 IP 地址,允许 Pod 之间直接通信。
  2. 服务网络:服务为访问集群内的应用程序提供稳定的网络端点,抽象出各个 Pod 的细节。
  3. 入口:入口资源为将服务暴露给外部世界提供高级路由和负载均衡功能。

Kubernetes 管理

Kubernetes 提供了多种用于管理集群和已部署应用程序的工具和 API:

  1. Kubectl:用于与 Kubernetes API 服务器进行交互的命令行工具。
  2. Kubernetes 仪表板:用于管理集群和已部署应用程序的基于 Web 的用户界面。
  3. Helm:用于部署和管理 Kubernetes 应用程序的包管理器。

Kubernetes 实践操作

Kubernetes 安装

要开始使用 Kubernetes,你需要设置一个 Kubernetes 集群。你可以通过在本地机器上安装像 minikube 或 kind 这样的 Kubernetes 发行版来实现,或者使用像 Google Kubernetes Engine (GKE) 或 Amazon Elastic Kubernetes Service (EKS) 这样的托管 Kubernetes 服务。

以下是在 Ubuntu 22.04 上安装 minikube 的示例:

curl -LO
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube start

Kubernetes Pod 创建

一旦你设置好了 Kubernetes 集群,就可以开始部署应用程序了。Kubernetes 中的基本部署单元是 Pod,它代表一个或多个共享相同网络和存储资源的容器。

以下是创建一个简单的 nginx Pod 的示例:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
    - name: nginx
      image: nginx:latest
      ports:
        - containerPort: 80

将此内容保存为 nginx-pod.yaml 并应用到你的集群:

kubectl apply -f nginx-pod.yaml

Kubernetes 配置

Kubernetes 提供了几种配置应用程序的方法,包括:

  1. ConfigMap:用于存储非敏感配置数据。
  2. Secret:用于存储密码或 API 密钥等敏感信息。
  3. :为你的应用程序提供持久存储。

以下是创建一个 ConfigMap 并在 Pod 中使用它的示例:

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  APP_ENV: production
  APP_LOG_LEVEL: info
---
apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  containers:
    - name: app
      image: myapp:v1
      envFrom:
        - configMapRef:
            name: app-config

Kubernetes 故障排除

当出现问题时,Kubernetes 提供了几种用于故障排除的工具和命令:

  1. Kubectl:使用 kubectl getkubectl describekubectl logs 来检查你的集群和已部署资源的状态。
  2. Kubernetes 仪表板:基于 Web 的用户界面可以提供你的集群的可视化概述,并帮助你识别问题。
  3. Kubernetes 事件:监控 Kubernetes 控制平面生成的事件以识别错误或警告。

通过遵循这些实践操作步骤,你将在成为 Kubernetes 专家的道路上迈出坚实的步伐!

总结

在本教程中,你已经学习了 Kubernetes 的基础知识,包括其架构、关键组件以及诸如 Pod、部署和服务等基本概念。你已经获得了在 Kubernetes 集群上部署和管理容器化应用程序的实践经验,为更高级的 Kubernetes 使用和部署场景奠定了基础。有了这些知识,你现在有能力继续深入学习 Kubernetes,并利用其强大功能简化你的应用程序部署和管理流程。