如何编写 Kubernetes 部署清单

KubernetesKubernetesBeginner
立即练习

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

简介

本教程将探讨 Kubernetes 部署的基础知识,这是 Kubernetes 生态系统中的一个基本概念,它提供了一种声明式的方式来管理容器化应用程序的生命周期。你将了解部署清单的结构和语法,以及扩展、滚动更新和应用程序自我修复的常见用例。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/CoreConceptsGroup(["Core Concepts"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/ConfigurationandVersioningGroup(["Configuration and Versioning"]) kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/edit("Edit") kubernetes/BasicCommandsGroup -.-> kubernetes/run("Run") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/CoreConceptsGroup -.-> kubernetes/architecture("Architecture") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/config("Config") subgraph Lab Skills kubernetes/create -.-> lab-434720{{"如何编写 Kubernetes 部署清单"}} kubernetes/edit -.-> lab-434720{{"如何编写 Kubernetes 部署清单"}} kubernetes/run -.-> lab-434720{{"如何编写 Kubernetes 部署清单"}} kubernetes/apply -.-> lab-434720{{"如何编写 Kubernetes 部署清单"}} kubernetes/architecture -.-> lab-434720{{"如何编写 Kubernetes 部署清单"}} kubernetes/describe -.-> lab-434720{{"如何编写 Kubernetes 部署清单"}} kubernetes/config -.-> lab-434720{{"如何编写 Kubernetes 部署清单"}} end

Kubernetes 部署基础

Kubernetes 部署是 Kubernetes 生态系统中的一个基本概念,它提供了一种声明式的方式来管理容器化应用程序的生命周期。部署可确保始终运行指定数量的 Pod 副本,并自动处理诸如扩展、滚动更新和回滚等任务。

在本节中,我们将探讨 Kubernetes 部署的基础知识,包括其结构、配置和实际用例。

部署基础

Kubernetes 部署是使用 YAML 清单定义的,该清单指定了应用程序的期望状态,包括容器镜像、资源需求和扩展选项。以下是一个示例部署清单:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: myregistry.azurecr.io/my-app:v1
          ports:
            - containerPort: 80

在此示例中,部署使用镜像“myregistry.azurecr.io/my-app:v1”创建了名为“my-app”的容器化应用程序的三个副本。该应用程序在容器内监听端口 80。

部署用例

Kubernetes 部署通常用于以下场景:

  • 扩展:通过调整清单中的 replicas 字段,部署可轻松扩展应用程序的规模,实现向上或向下扩展。
  • 滚动更新:部署支持滚动更新,使你能够在不中断服务的情况下更新容器镜像或配置。
  • 自我修复:部署会自动监控 Pod 的运行状况,如果 Pod 出现故障,它会重新调度或重新创建它们。
  • 蓝绿部署:部署可用于实施蓝绿部署策略,通过该策略你可以在应用程序的两个版本之间逐步转移流量。

部署配置

部署清单支持广泛的配置选项,包括:

  • 副本数:要运行的 Pod 副本的期望数量。
  • 选择器:用于标识由部署管理的 Pod 的标签选择器。
  • 模板:Pod 模板,它定义了容器规范和其他 Pod 级别的配置。
  • 更新策略:推出更改时使用的更新策略,例如“RollingUpdate”或“Recreate”。
  • 资源请求和限制:为容器请求或限制的 CPU 和内存资源。

你可以在 Kubernetes 部署文档中找到有关这些配置选项的更多信息。

部署清单结构与语法

Kubernetes 部署清单是使用 YAML 语法定义的,它允许你以声明方式指定应用程序的期望状态。理解部署清单的结构和语法对于有效管理容器化工作负载至关重要。

部署清单结构

一个典型的 Kubernetes 部署清单由以下主要部分组成:

  1. apiVersion:指定要使用的 Kubernetes API 版本,在此示例中为 apps/v1
  2. kind:声明资源类型,在此示例中为 Deployment
  3. metadata:提供有关部署的信息,例如名称。
  4. spec:定义部署的期望状态,包括副本数量、容器镜像和其他配置选项。

以下是一个部署清单的示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: myregistry.azurecr.io/my-app:v1
          ports:
            - containerPort: 80

部署清单语法

部署清单使用 YAML 语法,这是一种人类可读的数据序列化格式。以下是 Kubernetes 部署中使用的 YAML 语法的一些关键方面:

  1. 缩进:YAML 使用缩进来定义文档的结构。正确的缩进对于正确解释清单至关重要。
  2. 键值对:清单中的每个字段都定义为一个键值对,用冒号(:)分隔。
  3. 列表:可以有多个值的字段,例如 containers 字段,定义为 YAML 列表。
  4. 注释:你可以通过在一行开头使用 # 字符向清单添加注释。

通过理解部署清单的结构和语法,你可以有效地创建、更新和管理你的 Kubernetes 应用程序。

部署管理与优化

Kubernetes 部署为管理和优化容器化应用程序的生命周期提供了丰富的功能和选项。在本节中,我们将探讨一些关键的部署管理和优化技术。

部署策略

Kubernetes 部署支持不同的更新策略来处理应用程序的更改。两种最常见的策略是:

  1. 滚动更新(RollingUpdate):这是默认的更新策略,它通过用新的 Pod 替换旧的 Pod 来逐步推出应用程序的更改。这确保了在更新过程中应用程序仍然可用。
  2. 重新创建(Recreate):此策略首先终止所有现有的 Pod,然后使用更新后的配置创建新的 Pod。这种方法适用于可以接受停机时间的情况。

你可以在部署的 spec.strategy 字段中配置更新策略。

扩展部署

扩展你的部署是一个简单的过程。你可以调整 spec.replicas 字段来增加或减少 Pod 副本的数量。Kubernetes 将自动向上或向下扩展应用程序,以匹配期望的状态。

例如,要将部署从 3 个副本扩展到 5 个副本,你可以更新清单:

spec:
  replicas: 5

部署更新

Kubernetes 部署支持滚动更新,允许你在不停机的情况下更新容器镜像或配置。当你对部署清单应用更改时,Kubernetes 将逐步推出新版本,确保你的应用程序仍然可用。

你可以使用 kubectl rollout status 命令监控滚动更新的进度。

资源管理

正确的资源管理对于 Kubernetes 应用程序的性能和稳定性至关重要。你可以使用 spec.containers[].resources 字段为容器配置资源请求和限制。这确保了你的 Pod 拥有有效运行所需的必要资源,同时也防止它们消耗过多资源并影响其他应用程序。

通过理解和利用这些部署管理和优化技术,你可以有效地管理 Kubernetes 应用程序的生命周期,并确保它们可靠且高效地运行。

总结

Kubernetes 部署是管理容器化应用程序生命周期的强大工具。通过定义部署清单,你可以轻松扩展应用程序、执行滚动更新并确保自我修复功能。本教程概述了部署概念,包括其结构、配置和实际用例。有了这些知识,你现在可以自信地创建和管理 Kubernetes 部署来部署和维护你的应用程序。