构建 Kubernetes 集群架构

KubernetesBeginner
立即练习

介绍

Kubernetes 是一个容器编排平台,能够实现容器化应用程序的自动化部署、扩展和管理。本挑战将带你探索 Kubernetes 的架构,包括组成 Kubernetes 集群的各个组件及其相互作用方式。

这是一个「挑战」项目,它与「引导实验」不同,你需要尝试独立完成挑战任务,而不是按照实验步骤一步步学习。挑战通常具有一定的难度。如果你觉得困难,可以与 Labby 讨论或查看解决方案。历史数据显示,这是一个 初学者 级别的挑战,通过率为 91%。它在学习者中获得了 100% 的好评率。

Kubernetes 控制平面组件

Kubernetes 控制平面(Control Plane)负责管理集群的整体状态,以及应用程序的部署和扩展。控制平面组件包括:

  • kube-apiserver:Kubernetes 控制平面的前端,处理集群所有的管理请求。
  • etcd:一个分布式键值存储,用于保存 Kubernetes 集群的所有配置数据。
  • kube-scheduler:负责将 Pod 调度到集群中的合适节点上运行。
  • kube-controller-manager:运行控制器,负责管理各种 Kubernetes 对象的状态。

任务

你的任务是获取并显示控制平面组件的状态,包括 kube-apiserver、etcd、kube-scheduler 和 kube-controller-manager。

要求

  • 使用 kubectl 命令获取控制平面组件的状态。
  • /home/labex/project 目录下执行命令。
  • 输出应显示每个控制平面组件的健康状态。

示例

以下是获取控制平面组件状态时预期的输出示例:

NAME                 STATUS    MESSAGE                         ERROR
controller-manager   Healthy   ok
etcd-0               Healthy   {"health":"true","reason":""}
scheduler            Healthy   ok
✨ 查看解决方案并练习

Kubernetes 节点组件

Kubernetes 节点(Node)组件运行在每个节点上,负责维护运行中的 Pod 并提供容器运行时环境。节点组件包括:

  • kubelet:集群中每个节点上运行的代理,负责管理节点状态并确保容器运行在 Pod 中。
  • kube-proxy:集群中每个节点上运行的网络代理,负责维护节点上的网络规则,实现流量转发。

任务

显示 Kubernetes 集群中正在运行的节点信息,包括节点名称、状态和其他相关详细信息。

要求

  • 使用 kubectl 命令列出 Kubernetes 集群中的节点。
  • /home/labex/project 目录下执行命令。
  • 输出应显示集群中每个节点的详细信息。

示例

以下是显示节点信息时预期的输出示例:

NAME       STATUS   ROLES           AGE     VERSION
minikube   Ready    control-plane   2m52s   v1.26.1
✨ 查看解决方案并练习

Kubernetes Pod 组件

Pod 是 Kubernetes 中最小的可部署单元,代表集群中运行进程的一个实例。每个 Pod 由一个或多个容器组成,这些容器共享相同的网络命名空间和存储卷。

任务

  1. 创建一个名为 simple-pod.yaml 的文件,配置一个运行 Nginx 容器的 Pod。
  2. 使用相应的 kubectl 命令部署该 Pod。
  3. 显示 Kubernetes 集群中正在运行的 Pod 信息。

要求

  • /home/labex/project 目录下创建 simple-pod.yaml 文件,配置一个名为 simple-pod 且使用 nginx 镜像的 Pod。
  • 使用 kubectl 命令根据 YAML 文件创建 Pod。
  • 使用另一个 kubectl 命令列出集群中运行的 Pod。

示例

以下是部署并显示 Pod 时预期的输出示例:

pod/simple-pod created
NAME         READY   STATUS    RESTARTS   AGE
simple-pod   1/1     Running   0          29s
✨ 查看解决方案并练习

Kubernetes 服务组件

Kubernetes 服务(Service)是一种抽象,它定义了一组 Pod 的逻辑集合以及访问它们的策略。服务组件包括:

  • 服务 IP(Service IP):分配给服务的虚拟 IP 地址。
  • 服务端口(Service Port):分配给服务的端口号。
  • 端点(Endpoint):指向服务后端 Pod 的 IP 地址和端口号列表。

任务

  1. 创建一个名为 nginx-service.yaml 的文件,为 Nginx Pod 配置服务。
  2. 使用相应的 kubectl 命令部署该服务。
  3. 显示 Kubernetes 集群中正在运行的服务信息。

要求

  • /home/labex/project 目录下创建 nginx-service.yaml 文件,配置一个名为 nginx-service 且暴露 80 端口的服务。
  • 使用 kubectl 命令根据 YAML 文件创建服务。
  • 使用另一个 kubectl 命令列出集群中运行的服务。

示例

以下是显示服务信息时预期的输出示例:

NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes      ClusterIP   10.96.0.1      <none>        443/TCP   5m42s
nginx-service   ClusterIP   10.96.184.71   <none>        80/TCP    4s
✨ 查看解决方案并练习

总结

在本挑战中,我们探索了 Kubernetes 的架构,包括控制平面、节点、Pod 和服务组件。我们学习了如何检查各种组件的状态,如何创建简单的 Pod 和服务,以及如何将 Pod 暴露给外部应用。理解 Kubernetes 集群的组成部分及其交互方式,为部署和管理容器化应用程序奠定了坚实的基础。