如何部署和管理 Kubernetes 工作负载

KubernetesBeginner
立即练习

简介

本教程将指导你完成使用 Kubernetes 命名空间和部署的过程。命名空间在 Kubernetes 集群中提供逻辑隔离和组织功能,使你能够创建具有自己的资源、策略和访问控制的虚拟集群。另一方面,部署是一种更高级别的 Kubernetes 资源,用于管理容器化应用程序的生命周期。在本教程结束时,你将学习如何创建、管理和验证 Kubernetes 命名空间和部署的创建,从而能够在 Kubernetes 集群中有效地组织和管理你的应用程序。

介绍 Kubernetes 命名空间

Kubernetes 命名空间是一项强大的功能,可在 Kubernetes 集群中提供逻辑隔离和组织。命名空间允许你在单个物理集群中创建虚拟集群,每个虚拟集群都有自己的一组资源、策略和访问控制。

命名空间在你有多个需要相互隔离的团队、应用程序或环境的场景中特别有用。通过创建单独的命名空间,你可以确保诸如 Pod、服务和部署等资源限定于特定的命名空间,从而防止冲突并改善资源管理。

graph TD A[Kubernetes 集群] --> B[命名空间 1] A --> C[命名空间 2] A --> D[命名空间 3] B --> E[Pod 1] B --> F[服务 1] C --> G[Pod 2] C --> H[服务 2] D --> I[Pod 3] D --> J[服务 3]

要在 Kubernetes 中创建新的命名空间,你可以使用 kubectl create namespace 命令:

kubectl create namespace my-namespace

创建命名空间后,你可以使用 --namespace-n 标志将上下文切换到该命名空间:

kubectl --namespace my-namespace get pods

命名空间还支持资源配额,这使你能够设置命名空间内可消耗的资源量(CPU、内存、存储等)的限制。这有助于确保公平的资源分配并防止资源耗尽。你可以使用以下 YAML 配置定义资源配额:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
  namespace: my-namespace
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi

通过使用 Kubernetes 命名空间,你可以在 Kubernetes 集群中有效地组织和管理你的应用程序和资源,确保隔离、资源控制并改善整体集群管理。

使用 Kubernetes 部署管理应用程序

Kubernetes 部署是一种强大的抽象概念,可简化在 Kubernetes 集群中对无状态应用程序的管理。部署提供了一种声明式方式来描述应用程序的期望状态,包括副本数量、要使用的容器镜像以及各种配置设置。

graph TD A[Kubernetes 集群] --> B[部署] B --> C[副本集] C --> D[Pod 1] C --> E[Pod 2] C --> F[Pod 3]

当你创建一个部署时,Kubernetes 将自动管理底层的副本集和 Pod,确保运行并保持期望数量的副本处于健康状态。这包括自动向上或向下扩展应用程序、执行滚动更新以部署应用程序的新版本,以及通过替换任何失败的 Pod 进行自我修复。

要创建新的部署,你可以使用 kubectl create deployment 命令或以 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: my-app:v1
          ports:
            - containerPort: 80

此部署将创建 my-app 容器的三个副本,每个副本在其自己的 Pod 上运行。Kubernetes 将自动管理这些 Pod 的生命周期,确保始终运行期望数量的副本。

部署还支持高级功能,如滚动更新和回滚。当你更新部署的容器镜像或配置时,Kubernetes 将执行滚动更新,逐渐用新的 Pod 替换旧的 Pod,以尽量减少停机时间。如有必要,你还可以回滚到部署的先前版本。

通过使用 Kubernetes 部署,你可以轻松管理无状态应用程序的生命周期,确保它们具有高可用性、可扩展性和自我修复能力。

验证 Kubernetes 资源创建

确保 Kubernetes 资源被正确创建和配置是管理 Kubernetes 集群的一个关键方面。Kubernetes 提供了一组命令行工具和 API,使你能够验证各种资源(如命名空间、部署、Pod 和服务)的创建和状态。

用于验证资源创建的主要命令之一是 kubectl get。此命令允许你列出命名空间内或整个集群中特定类型的资源。例如,要列出集群中的所有命名空间,你可以运行:

kubectl get namespaces

同样,要列出特定命名空间中的所有部署,你可以使用:

kubectl --namespace my-namespace get deployments

你还可以使用 kubectl describe 命令获取特定资源的详细信息。这在排查问题或了解资源配置时很有帮助。例如,要描述一个部署:

kubectl --namespace my-namespace describe deployment my-deployment

除了命令行工具外,Kubernetes 还提供了一个全面的 API,允许你以编程方式与资源进行交互。这对于构建自定义监控和自动化工具很有用。例如,你可以使用你喜欢的编程语言中的 Kubernetes 客户端库来检查资源的状态,并根据其状态采取适当的操作。

from kubernetes import client, config

## 加载 Kubernetes 配置
config.load_kube_config()

## 创建一个 Kubernetes API 客户端
api = client.CoreV1Api()

## 列出所有命名空间
namespaces = api.list_namespace()
for namespace in namespaces.items:
    print(f"命名空间: {namespace.metadata.name}")

## 获取特定的部署
deployment = api.read_namespaced_deployment(
    name="my-deployment",
    namespace="my-namespace"
)
print(f"部署: {deployment.metadata.name}, 副本数: {deployment.status.replicas}")

通过利用各种 Kubernetes 命令和 API,你可以有效地验证 Kubernetes 资源的创建和状态,确保你的应用程序在集群中得到正确的部署和配置。

总结

在本教程中,你学习了如何利用 Kubernetes 命名空间来创建虚拟集群,并管理应用程序和资源的隔离。你还探索了如何使用 Kubernetes 部署来管理容器化应用程序的生命周期。通过理解这些核心的 Kubernetes 概念,你现在可以在 Kubernetes 环境中有效地组织、部署和维护你的应用程序,确保资源的高效利用并改善整体集群管理。