如何部署和管理 Kubernetes 应用程序

KubernetesKubernetesBeginner
立即练习

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

简介

本教程将引导你了解领先的容器编排平台 Kubernetes 的基本概念。你将学习 Kubernetes 架构、如何部署 Kubernetes 集群以及如何管理 Kubernetes 应用程序。通过本教程的学习,你将对 Kubernetes 有扎实的理解,并能够利用其强大功能来处理你的容器化工作负载。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/ClusterInformationGroup(["Cluster Information"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/CoreConceptsGroup(["Core Concepts"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/CoreConceptsGroup -.-> kubernetes/architecture("Architecture") kubernetes/ClusterInformationGroup -.-> kubernetes/cluster_info("Cluster Info") subgraph Lab Skills kubernetes/initialization -.-> lab-411656{{"如何部署和管理 Kubernetes 应用程序"}} kubernetes/get -.-> lab-411656{{"如何部署和管理 Kubernetes 应用程序"}} kubernetes/create -.-> lab-411656{{"如何部署和管理 Kubernetes 应用程序"}} kubernetes/apply -.-> lab-411656{{"如何部署和管理 Kubernetes 应用程序"}} kubernetes/architecture -.-> lab-411656{{"如何部署和管理 Kubernetes 应用程序"}} kubernetes/cluster_info -.-> lab-411656{{"如何部署和管理 Kubernetes 应用程序"}} end

理解 Kubernetes 架构

Kubernetes 是一个强大的开源容器编排系统,已成为大规模管理和部署容器化应用程序的事实上的标准。其核心是提供了一个强大的架构,能够高效管理容器化工作负载,确保高可用性、可扩展性和容错能力。

Kubernetes 组件

Kubernetes 架构由几个关键组件组成,它们协同工作以提供全面的容器管理解决方案。这些组件包括:

  1. Kubernetes 主节点:Kubernetes 主节点负责管理集群的整体状态,包括调度和编排容器,并提供与集群交互的 API。

  2. Kubernetes 节点:Kubernetes 节点是运行容器化应用程序的工作机器。每个节点运行一个 Kubelet 代理,它与 Kubernetes 主节点通信以管理节点上的容器。

  3. Pod:Pod 是 Kubernetes 中最小的可部署单元,代表一个或多个共享资源和网络命名空间的容器。Pod 是部署和扩展应用程序的基本构建块。

  4. 部署:部署是 Kubernetes 资源,用于管理无状态应用程序的生命周期,确保运行所需数量的副本,并自动处理更新和回滚。

  5. 服务:服务为访问一组 Pod 提供稳定的网络端点,实现 Kubernetes 集群内的负载均衡和服务发现。

  6. :卷用于为 Pod 提供持久存储,允许容器之间共享数据,并在单个 Pod 的生命周期之外持久存在。

Kubernetes 架构图

graph TD A[Kubernetes Master] --> B[API Server] A --> C[Scheduler] A --> D[Controller Manager] A --> E[etcd] B --> F[Kubernetes Nodes] F --> G[Kubelet] F --> H[Container Runtime] F --> I[Pods] I --> J[Containers] I --> K[Volumes] F --> L[Services]

Kubernetes 的实际应用

为了展示 Kubernetes 的强大功能,让我们考虑一个部署容器化 Web 应用程序的简单示例。假设我们有一个用于 Web 应用程序的 Docker 镜像,我们可以创建一个 Kubernetes 部署来管理应用程序的生命周期:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
        - name: web-app
          image: username/web-app:v1
          ports:
            - containerPort: 80

此部署确保 Web 应用程序的三个副本始终运行,提供高可用性和可扩展性。Kubernetes 将自动处理应用程序的调度、扩展和自我修复,确保维持所需状态。

部署 Kubernetes 集群

可以通过多种方法来部署 Kubernetes 集群,每种方法都有其自身的优点和适用场景。在本节中,我们将探讨设置 Kubernetes 集群的不同方法,包括使用 kubeadm、托管 Kubernetes 服务以及流行的基于云的 Kubernetes 平台。

使用 kubeadm 进行部署

kubeadm 是 Kubernetes 社区提供的一个强大工具,它简化了设置 Kubernetes 集群的过程。它可用于在本地或云端创建高可用的 Kubernetes 控制平面和工作节点。

以下是在 Ubuntu 22.04 上使用 kubeadm 部署 Kubernetes 集群的示例:

## 安装 kubeadm、kubelet 和 kubectl
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg]  kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

## 初始化 Kubernetes 控制平面
sudo kubeadm init

## 配置 kubectl 以与集群进行交互
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

托管 Kubernetes 服务

云提供商提供托管 Kubernetes 服务,这些服务消除了设置和管理 Kubernetes 集群的复杂性。示例包括:

  • Google Kubernetes Engine (GKE)
  • Amazon Elastic Kubernetes Service (EKS)
  • Microsoft Azure Kubernetes Service (AKS)

这些服务负责 Kubernetes 控制平面和工作节点的供应、扩展和维护,使你能够专注于部署和管理应用程序。

Kubernetes 集群生命周期管理

无论采用哪种部署方法,Kubernetes 都提供了用于管理集群生命周期的工具和 API,包括升级、扩展以及备份/恢复操作。这可确保你的 Kubernetes 基础设施始终保持最新状态,并能适应变化。

管理 Kubernetes 应用程序

Kubernetes 提供了一套全面的工具和功能来管理容器化应用程序的生命周期。在本节中,我们将探讨管理 Kubernetes 应用程序的各个方面,包括服务、卷、扩展、监控和故障排除。

Kubernetes 服务

Kubernetes 服务是用于公开和访问在 Pod 中运行的应用程序的关键组件。服务提供了一个稳定的网络端点,实现 Kubernetes 集群内的负载均衡和服务发现。以下是一个简单的 Kubernetes 服务示例:

apiVersion: v1
kind: Service
metadata:
  name: web-app
spec:
  selector:
    app: web-app
  ports:
    - port: 80
      targetPort: 8080

此服务在端口 80 上公开 web - app 部署,将流量转发到在端口 8080 上运行的容器。

Kubernetes 卷

Kubernetes 卷为 Pod 提供持久存储,允许容器之间共享数据,并在单个 Pod 的生命周期之外持久存在。这对于需要持久存储的有状态应用程序至关重要。Kubernetes 支持各种卷类型,包括本地存储、网络附加存储和基于云的存储解决方案。

扩展 Kubernetes 应用程序

Kubernetes 提供了内置机制,可根据需求向上或向下扩展应用程序。这可以使用管理所需副本数的部署来实现,或者通过基于资源利用率自动扩展 Pod 的水平 Pod 自动缩放(HPA)来实现。

监控和故障排除

Kubernetes 提供了丰富的工具和 API 来监控应用程序的运行状况和性能。这包括内置指标、日志记录和事件监控,以及与外部监控解决方案的集成。排查 Kubernetes 应用程序故障需要了解各个组件及其交互,以及利用特定于 Kubernetes 的工具和命令。

Kubernetes 工作流程

Kubernetes 支持各种用于管理应用程序部署和生命周期的工作流程,如蓝绿部署、金丝雀发布和滚动更新。这些工作流程实现了无缝的应用程序更新和回滚,确保高可用性并最大限度地减少停机时间。

总结

Kubernetes 已成为大规模管理和部署容器化应用程序的事实上的标准。在本教程中,你已经了解了 Kubernetes 架构的关键组件,包括 Kubernetes 主节点、节点、Pod、部署、服务和卷。你还了解了如何部署 Kubernetes 集群以及管理 Kubernetes 应用程序,从而能够有效地编排和扩展你的容器化工作负载。