在这个项目中,我想应用 Kubernetes 概念,例如 init 容器和 sidecar 容器,但我不想仅仅遵循教程。
我的目标是打造一些令人难忘的东西。
经过一番集思广益,我向您展示Get Me 应用程序!
Get Me 应用程序 旨在动态获取和显示来自各种 GitHub 存储库的内容。该应用程序在 Kubernetes Pod 中运行,包含两个主要组件:
Nginx 容器:它作为主应用程序,托管动态获取的内容。它轻量级且高效,非常适合提供静态网页。
Sidecar Container:它与主 nginx 容器一起运行。它负责通过从随机选择的 GitHub 页面获取最新的 HTML,每 5 秒刷新一次内容。这确保了 Nginx 提供的内容始终是最新的。
Init Container:这会在主容器启动之前初始化环境。它通过解析 Get Me 应用服务的 DNS 条目来检查其可用性。此步骤可确保应用程序在开始运行后准备好与服务交互。在这里阅读更多内容(我必须)
然后,nginx 容器提供更新后的 HTML 网页,使其可以通过 NodePort 服务通过浏览器进行访问。
在开始之前,请确保您拥有用于创建 Kubernetes 集群的配置文件。请参阅 Kind 快速入门指南,了解有关设置 Kind 集群的详细说明。
创建一个名为 config.yml 的文件,其中包含以下内容来定义您的 Kind 集群:
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 name: cka-cluster nodes: - role: control-plane extraPortMappings: - containerPort: 30001 # Change this to match the NodePort hostPort: 30001 listenAddress: "0.0.0.0" protocol: tcp - role: worker - role: worker
运行以下命令来创建集群:
kind create cluster --name kind-cka-cluster --config config.yml
使用以下命令将上下文设置为新集群:
kubectl config use-context kind-kind-cka-cluster
首先,设置项目的目录和文件结构。
mkdir get-me-app cd get-me-app nano get-me-app.yml
在 get-me-app.yml 文件中,我们将定义一个 Kubernetes pod,其中包含 nginx 容器、用于刷新内容的 sidecar 容器以及用于初始数据获取的 init 容器。
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 name: cka-cluster nodes: - role: control-plane extraPortMappings: - containerPort: 30001 # Change this to match the NodePort hostPort: 30001 listenAddress: "0.0.0.0" protocol: tcp - role: worker - role: worker
nginx 容器:这是主容器,在端口 80 上提供内容。volumeMount 使 /usr/share/nginx/html 目录在 pod 的 workdir 卷中可用。
Sidecar 容器(内容刷新器):此容器运行 while true 循环,每 5 秒下载最新版本的网页。这可确保 workdir 卷中的内容保持更新。
初始化容器 (init-myservice):这会通过持续执行 DNS 查找来等待 get-me-app-service 变得可用。初始化时只运行一次,完成后不会重新启动。
卷:workdir 卷(emptyDir 类型)在容器之间共享,允许 init 容器、sidecar 和 nginx 访问和提供相同的内容。
要使应用程序可通过本地计算机上的浏览器访问,请配置 NodePort 服务以公开 pod 的端口 80。
在 get-me-app-service.yml 中添加此服务定义:
kind create cluster --name kind-cka-cluster --config config.yml
使用以下命令部署设置:
kubectl config use-context kind-kind-cka-cluster
通过在浏览器中访问 http://localhost:30001 来访问它,您应该访问 github 页面。 5 秒后刷新页面,您应该会看到不同的 github 页面。
这个项目帮助我了解 init 容器如何初始化共享资源以及 sidecar 容器如何为主应用程序更新这些资源。这是一种尝试和了解 Kubernetes 中实时数据处理的有趣方式。
以下是您提供的部分的格式化内容:
尾注:请记住,该项目不是视频教程的一部分。我想使用教程中的概念作为一般指导来自己构建一些东西。
以上是CKA 全日课程多容器 Pod Kubernetes - Sidecar 与 Init Container的详细内容。更多信息请关注PHP中文网其他相关文章!