Kubernetes 架构与组件

KubernetesKubernetesBeginner
立即练习

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

简介

本全面教程涵盖了准备认证Kubernetes应用开发者(CKAD)认证考试所需的核心主题和技能。通过了解Kubernetes架构、组件及各种管理功能,你将有充分准备在Kubernetes平台上设计、部署和维护容器化应用程序。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedDeploymentGroup(["Advanced Deployment"]) kubernetes(("Kubernetes")) -.-> kubernetes/CoreConceptsGroup(["Core Concepts"]) kubernetes(("Kubernetes")) -.-> kubernetes/ClusterInformationGroup(["Cluster Information"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/AdvancedDeploymentGroup -.-> kubernetes/rollout("Rollout") kubernetes/AdvancedDeploymentGroup -.-> kubernetes/scale("Scale") kubernetes/CoreConceptsGroup -.-> kubernetes/architecture("Architecture") kubernetes/ClusterInformationGroup -.-> kubernetes/cluster_info("Cluster Info") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") subgraph Lab Skills kubernetes/get -.-> lab-390477{{"Kubernetes 架构与组件"}} kubernetes/create -.-> lab-390477{{"Kubernetes 架构与组件"}} kubernetes/apply -.-> lab-390477{{"Kubernetes 架构与组件"}} kubernetes/rollout -.-> lab-390477{{"Kubernetes 架构与组件"}} kubernetes/scale -.-> lab-390477{{"Kubernetes 架构与组件"}} kubernetes/architecture -.-> lab-390477{{"Kubernetes 架构与组件"}} kubernetes/cluster_info -.-> lab-390477{{"Kubernetes 架构与组件"}} kubernetes/describe -.-> lab-390477{{"Kubernetes 架构与组件"}} end

Kubernetes 与 CKAD 认证简介

Kubernetes 是一个开源的容器编排平台,已成为管理和部署容器化应用程序的事实上的标准。它为运行和管理分布式系统提供了一个强大且可扩展的基础设施,使其成为现代软件开发和部署的重要工具。

认证 Kubernetes 应用开发者(CKAD)认证是一项基于性能的考试,用于测试个人设计、构建、配置和为 Kubernetes 公开云原生应用程序的能力。该认证证明了候选人在使用 Kubernetes 部署、扩展和管理容器化应用程序方面的熟练程度。

在本节中,我们将涵盖以下主题:

什么是 Kubernetes?

Kubernetes 是一个强大的容器编排系统,可自动执行容器化应用程序的部署、扩展和管理。它提供了一个用于管理和运行分布式系统的平台,使开发人员和运维人员能够专注于构建和运行他们的应用程序,而无需管理底层基础设施。

Kubernetes 架构与组件

Kubernetes 基于模块化架构构建,由各种组件协同工作以提供全面的容器管理解决方案。我们将探讨 Kubernetes 的关键组件,如 API 服务器、控制器管理器、调度器和 kubelet,并了解它们如何交互以管理容器化应用程序的生命周期。

CKAD 认证概述

CKAD 认证是一项基于性能的考试,用于测试候选人在实际操作环境中使用 Kubernetes 的能力。我们将讨论考试形式、评估的核心能力以及帮助你在 CKAD 认证中取得成功的备考策略。

CKAD 认证的好处

获得 CKAD 认证证明了你在设计、构建和管理基于 Kubernetes 的应用程序方面的专业知识。它可以为你打开新的职业机会,增强你的可信度,并展示你在快速发展的容器编排和云原生开发领域的熟练程度。

Kubernetes 架构与组件

Kubernetes 采用模块化架构设计,由多个协同工作的组件组成,以提供全面的容器管理解决方案。了解 Kubernetes 架构及其关键组件对于在该平台上有效部署和管理应用程序至关重要。

Kubernetes 主组件

Kubernetes 主组件负责对 Kubernetes 集群进行整体控制和管理。这些组件包括:

  1. API 服务器:Kubernetes 集群的中央控制点,负责处理和验证 API 请求。
  2. 调度器:负责根据资源可用性和其他约束条件,将 Pod(Kubernetes 中最小的可部署计算单元)调度到节点上。
  3. 控制器管理器:负责维护集群的期望状态,例如复制 Pod、处理节点故障和管理资源。
  4. etcd:一个分布式、可靠的键值存储,用于存储 Kubernetes 集群的状态。
graph LR subgraph Kubernetes Master Components API[API Server] Scheduler[Scheduler] Controller[Controller Manager] etcd[etcd] end

Kubernetes 节点组件

Kubernetes 节点组件在集群中的每个工作节点上运行,负责运行和管理容器化应用程序。这些组件包括:

  1. kubelet:在每个节点上运行的主要“节点代理”,负责与 Kubernetes 主节点通信并管理节点上 Pod 的生命周期。
  2. kube-proxy:负责管理 Pod 与外部世界之间的网络连接,以及跨服务的负载均衡。
  3. 容器运行时:负责在节点上运行容器的软件,如 Docker 或 containerd。
graph LR subgraph Kubernetes Node Components kubelet[kubelet] proxy[kube-proxy] runtime[Container Runtime] end

Kubernetes 网络

Kubernetes 提供了一个强大的网络模型,允许 Pod、服务和外部世界之间进行通信。这包括以下功能:

  • Pod 网络:每个 Pod 都被分配一个唯一的 IP 地址,Pod 之间可以使用此 IP 地址进行通信。
  • 服务网络:Kubernetes 服务提供一个稳定的、负载均衡的端点,用于访问一组 Pod。
  • 入口:入口是一个 Kubernetes 资源,用于管理对集群中服务的外部访问,通常通过 HTTP/HTTPS 进行。

通过了解 Kubernetes 架构及其关键组件,你可以在 Kubernetes 平台上有效地设计、部署和管理容器化应用程序。

Kubernetes 对象模型与 YAML 清单

Kubernetes 使用声明式对象模型来定义集群及其上运行的应用程序的期望状态。这些对象以 YAML(或 JSON)清单的形式表示,用于创建、更新和管理 Kubernetes 资源。

Kubernetes 对象

Kubernetes 的基本构建块称为对象。这些对象代表 Kubernetes 集群的各种组件,例如:

  • Pod:Kubernetes 中最小的可部署单元,代表一起运行的一个或多个容器。
  • 服务:为访问一组 Pod 提供稳定的网络端点。
  • 部署:管理无状态应用程序的生命周期,确保运行所需数量的副本。
  • 有状态集:管理有状态应用程序(如数据库)的生命周期,具有持久存储和网络标识。
  • 配置映射:存储可注入到 Pod 中的配置数据。
  • 密钥:存储敏感数据,如密码或 API 密钥,可安全地注入到 Pod 中。

YAML 清单

Kubernetes 对象使用 YAML(或 JSON)清单进行定义,该清单描述了对象的期望状态。以下是一个简单的 Nginx 部署示例:

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

此清单定义了一个 Deployment 对象,其中包含 3 个 Nginx 容器副本。spec 部分描述了 Deployment 的期望状态,包括容器镜像、端口和其他配置细节。

应用清单

Kubernetes 对象使用 kubectl 命令行工具进行创建、更新和管理。你可以使用以下命令将 YAML 清单应用到集群:

kubectl apply -f nginx-deployment.yaml

这将根据提供的 YAML 清单在 Kubernetes 集群中创建 Nginx 部署。

通过理解 Kubernetes 对象模型并使用 YAML 清单,你可以有效地定义和管理在 Kubernetes 平台上运行的应用程序所需的资源。

配置和管理 Pod

Pod 是 Kubernetes 的基本构建块,代表一起运行的一个或多个容器。配置和管理 Pod 是使用 Kubernetes 的关键环节,因为它能让你定义和控制应用程序的运行时环境。

Pod 配置

Pod 使用 YAML 清单进行定义,通过它你可以指定各种配置选项,例如:

  • 容器:定义容器镜像、资源需求以及命令/参数。
  • :将持久或临时存储附加到 Pod。
  • 环境变量:将配置数据注入容器。
  • 探针:配置存活、就绪和启动探针以监控应用程序的健康状态。
  • 标签和注解:为 Pod 应用元数据以便于组织和定位。

以下是一个包含部分这些配置选项的 Pod 清单示例:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: app-container
      image: my-app:v1
      resources:
        requests:
          cpu: 100m
          memory: 128Mi
      env:
        - name: APP_ENV
          value: production
      livenessProbe:
        httpGet:
          path: /healthz
          port: 8080
  volumes:
    - name: config-volume
      emptyDir: {}

管理 Pod

Kubernetes 提供了各种命令和工具来管理 Pod 的生命周期,包括:

  • kubectl get pods:获取集群中正在运行的 Pod 的信息。
  • kubectl describe pod <pod-name>:获取特定 Pod 的详细信息。
  • kubectl logs <pod-name>:查看 Pod 容器的日志。
  • kubectl exec <pod-name> -- <command>:在正在运行的 Pod 内执行命令。
  • kubectl delete pod <pod-name>:从集群中删除 Pod。

通过了解如何在 Kubernetes 中配置和管理 Pod,你可以有效地部署和控制容器化应用程序的运行时环境。

Kubernetes 中的网络与服务发现

Kubernetes 提供了强大的网络模型和服务发现机制,以实现 Pod、服务与外部世界之间的通信。理解这些概念对于在 Kubernetes 平台上构建和部署应用程序至关重要。

Kubernetes 网络模型

Kubernetes 遵循容器网络接口(CNI)规范,该规范定义了用于在 Linux 容器中配置网络接口的标准接口。Kubernetes 网络模型包括以下关键组件:

  • Pod 网络:每个 Pod 都被分配一个唯一的 IP 地址,Pod 之间可以使用此 IP 地址进行通信。
  • 服务网络:Kubernetes 服务提供一个稳定的、负载均衡的端点,用于访问一组 Pod。
  • 入口:入口是一个 Kubernetes 资源,用于管理对集群中服务的外部访问,通常通过 HTTP/HTTPS 进行。
graph LR Pod1[Pod 1] --> Service[Service] Pod2[Pod 2] --> Service Service --> Ingress[Ingress] Ingress --> External[External World]

服务发现

Kubernetes 提供了多种服务发现机制,使应用程序能够找到并与集群中运行的其他服务进行通信:

  1. 环境变量:创建 Pod 时,Kubernetes 会注入包含其他服务信息的环境变量,例如服务名称、命名空间和 IP 地址。
  2. DNS:Kubernetes 有一个内部 DNS 服务器,可将服务名称解析为其相应的 IP 地址,使 Pod 能够通过名称发现并与其他服务进行通信。
  3. 入口:入口资源提供了一种从集群外部将 HTTP 和 HTTPS 路由公开到集群内服务的方法。

以下是一个简单的 Kubernetes 服务清单示例:

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

此服务公开端口 80,并将流量转发到带有 app=my-app 标签的 Pod 的 targetPort(8080)。

通过理解 Kubernetes 网络和服务发现,你可以有效地设计和部署能够在 Kubernetes 集群内相互通信以及与外部世界通信的应用程序。

持久卷与存储管理

Kubernetes 提供了一个强大的存储管理系统,使你能够为应用程序配置和管理持久存储。这包括使用持久卷(PV)和持久卷声明(PVC)来将底层存储实现与应用程序抽象开来。

持久卷(PV)

持久卷是由 Kubernetes 集群管理员配置的存储资源。它们可以由各种存储类型支持,例如本地磁盘、网络附加存储(NAS)或基于云的存储解决方案。PV 使用 YAML 清单进行定义,并且具有独立于任何单个 Pod 的生命周期。

以下是一个持久卷清单的示例:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/my-pv

此 PV 表示一个由本地主机路径支持的 5 GiB 存储卷。

持久卷声明(PVC)

持久卷声明是各个 Pod 对存储的请求。然后,Pod 可以通过将 PVC 挂载为卷来使用声明的存储。Kubernetes 将自动将 PVC 与满足请求存储要求的可用 PV 进行匹配。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

此 PVC 请求一个具有“读写一次”访问模式的 3 GiB 存储卷。

存储类

Kubernetes 还支持存储类的概念,它提供了一种按需动态配置持久卷的方法。存储类抽象了底层存储实现,使你能够指定诸如存储类型、IOPS 或其他特定于供应商的配置等参数。

通过理解持久卷、持久卷声明和存储类,你可以有效地管理基于 Kubernetes 的应用程序的存储需求。

可观测性、日志记录与调试

可观测性、日志记录与调试是管理和排查在 Kubernetes 上运行的应用程序时的关键环节。Kubernetes 提供了各种工具和机制来帮助你了解应用程序以及底层集群的状态。

可观测性

Kubernetes 提供了多个内置的可观测性功能,包括:

  1. 指标:Kubernetes 通过 Kubernetes API 和 Prometheus 监控系统公开了广泛的指标,使你能够监控集群和应用程序的健康状况与性能。
  2. 事件:Kubernetes 会为各种集群和应用级别的活动生成事件,可使用 kubectl get events 命令查看这些事件,或者将其与外部日志记录和监控系统集成。
  3. Kubernetes 仪表盘:Kubernetes 仪表盘是一个基于 Web 的用户界面,为管理和监控 Kubernetes 集群及应用程序提供了可视化界面。

日志记录

Kubernetes 提供了多种用于收集和管理应用程序及集群本身日志的选项:

  1. 容器日志:每个容器的标准输出和标准错误输出都会被捕获,并可通过 kubectl logs 命令获取。
  2. 聚合日志记录:你可以将 Kubernetes 与外部日志记录解决方案(如 Elasticsearch、Fluentd 或 Splunk)集成,以集中管理整个基础架构中的日志。
  3. 节点日志:Kubernetes 还会收集和管理底层节点的日志,例如 kubelet、kube-proxy 和容器运行时日志。

调试

Kubernetes 提供了各种工具和命令来调试集群及应用程序中的问题:

  1. kubectlkubectl 命令行工具提供了大量用于检查和管理 Kubernetes 资源的命令,例如 kubectl describekubectl logskubectl exec
  2. Kubernetes 仪表盘:Kubernetes 仪表盘提供了用于调试和故障排查的可视化界面,包括查看 Pod 日志以及在运行的容器内执行命令的功能。
  3. Kubectl 插件:Kubernetes 社区开发了各种 kubectl 插件,如 kubectl debugkubectl node-shell,以增强平台的调试功能。

通过利用 Kubernetes 提供的可观测性、日志记录和调试功能,你可以有效地监控、排查故障并维护基于 Kubernetes 的应用程序的健康状态。

部署策略与发布管理

Kubernetes 提供了一系列的部署策略和发布管理功能,以帮助你安全、高效地更新应用程序。理解这些概念对于管理基于 Kubernetes 的应用程序的生命周期至关重要。

部署策略

Kubernetes 支持多种部署策略,每种策略都有其自身的优点和适用场景:

  1. 重新创建:此策略会关闭应用程序的现有版本并部署新版本。这是最简单的策略,但在部署期间会导致停机时间。
  2. 滚动更新:这是 Kubernetes 中的默认部署策略,应用程序的新版本会逐步推出,替换旧版本。这样可以实现平稳过渡,停机时间最短。
  3. 蓝绿部署:此策略涉及维护两个相同的生产环境,“蓝色”和“绿色”。你可以在两个环境之间切换以进行安全的推出或回滚。
  4. 金丝雀部署:此策略涉及逐步将流量转移到应用程序的新版本,使你能够在全面推出之前,先使用一部分用户来测试新版本。
graph LR subgraph Deployment Strategies Recreate[重新创建] RollingUpdate[滚动更新] BlueGreen[蓝绿部署] Canary[金丝雀部署] end

发布管理

Kubernetes 提供了多个功能来管理应用程序的发布:

  1. 部署对象:部署对象管理无状态应用程序的生命周期,确保运行所需数量的副本,并允许进行安全的推出和回滚。
  2. 发布历史记录:Kubernetes 会维护所有部署的历史记录,使你能够在必要时轻松查看并回滚到先前版本。
  3. 发布暂停和恢复:你可以暂停发布以检查部署状态,并在准备好时恢复发布。
  4. 发布扩展:你可以在发布期间扩展副本数量,以处理增加的流量或减少资源使用。

通过了解 Kubernetes 提供的各种部署策略和发布管理功能,你可以有效地管理应用程序的生命周期,并确保进行平稳且可靠的更新。

Kubernetes 中的安全与访问控制

Kubernetes 提供了全面的安全模型和访问控制机制,以确保应用程序和集群的安全与完整性。了解这些安全特性对于运行可用于生产环境的 Kubernetes 至关重要。

认证与授权

Kubernetes 使用以下机制进行认证与授权:

  1. 认证:Kubernetes 支持多种认证方法,包括 X.509 客户端证书、承载令牌以及用户名/密码凭证。这些认证方法用于识别向 Kubernetes API 服务器发出请求的用户或服务账户。

  2. 授权:Kubernetes 使用基于角色的访问控制(RBAC)来授权集群内的操作。RBAC 定义了具有特定权限的角色,这些角色可以分配给用户、组或服务账户。

示例 RBAC 角色:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
  - apiGroups: [""] ## "" 表示核心 API 组
    resources: ["pods"]
    verbs: ["get", "list", "watch"]

网络策略

Kubernetes 网络策略允许你控制 Pod、服务与外部世界之间的网络流量。网络策略被定义为 Kubernetes 资源,可用于实现细粒度的网络安全规则。

示例网络策略:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-external-access
spec:
  podSelector:
    matchLabels:
      app: my-app
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: allowed-app

此网络策略拒绝所有发往带有 app=my-app 标签的 Pod 的入站流量,但来自带有 app=allowed-app 标签的 Pod 的流量除外。

密钥管理

Kubernetes 提供了一个密钥(Secrets)资源来存储敏感数据,如密码、API 密钥或证书。密钥可以安全地挂载为卷或作为环境变量在 Pod 内公开。

示例密钥:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: YWRtaW4=
  password: cGFzc3dvcmQ=

通过理解并实施 Kubernetes 的安全特性,如认证、授权、网络策略和密钥管理,你可以确保基于 Kubernetes 的应用程序的安全性和可靠性。

实践练习与考试准备

为了成功备考CKAD认证考试,进行实践练习并熟悉考试形式和题型至关重要。在本节中,我们将介绍各种实践练习和策略,以帮助你在CKAD考试中取得优异成绩。

实践练习

实践经验对于掌握Kubernetes概念和技能至关重要。以下是一些你可以进行的实践练习,以巩固你的学习:

  1. 部署和管理Kubernetes集群:使用Minikube等工具在本地或在云环境中设置Kubernetes集群,并练习部署和管理应用程序。
  2. 使用Kubernetes对象:使用YAML清单和kubectl命令行工具创建、更新和删除各种Kubernetes对象,如Pod、部署、服务和密钥。
  3. 实现网络和服务发现:练习设置Kubernetes服务和入口资源,以实现应用程序与外部世界之间的通信。
  4. 管理持久存储:使用持久卷和持久卷声明为你的应用程序配置和管理存储。
  5. 观察和调试应用程序:探索Kubernetes的可观测性功能,如日志、指标和事件,并练习调试技术以识别和解决问题。
  6. 实施安全和访问控制:配置认证、授权和网络策略,以保护你的Kubernetes集群和应用程序。

考试准备策略

为了有效地备考CKAD考试,可考虑以下策略:

  1. 熟悉考试形式:了解CKAD考试的结构,包括时间限制、题型和评分标准。
  2. 练习样题:解答练习题和模拟考试,以适应考试环境和题型。
  3. 提高命令行熟练程度:熟练使用kubectl命令行工具,因为CKAD考试是基于性能的测试,需要实际操作技能。
  4. 深入理解Kubernetes概念:专注于理解Kubernetes的核心概念,如Pod、服务、部署和网络,而不仅仅是记忆命令。
  5. 复习CKAD考试课程:确保你熟悉CKAD考试涵盖的所有主题和能力。
  6. 练习时间管理:在给定的时间限制内练习完成任务,以培养高效的问题解决能力。
  7. 参与Kubernetes社区:与Kubernetes社区互动,参加聚会或会议,并与其他Kubernetes爱好者合作,以加深你的理解。

通过结合实践练习、考试准备策略以及对Kubernetes的全面理解,你可以增加在CKAD认证考试中取得成功的机会。

总结

CKAD 认证证明了你在 Kubernetes 平台上构建、部署和管理应用程序的能力。本教程引导你了解 Kubernetes 的关键概念,包括架构、网络、存储、安全和部署策略,为你提供在 CKAD 考试中取得优异成绩并成为 Kubernetes 专家所需的知识和实践技能。