使用 Podman Desktop 设置和运行本地 Kubernetes 集群
在本博文中,您将学习使用 Podman Desktop 运行 Kubernetes 文档示例:使用 Redis 部署 PHP Guestbook 应用程序。
议程
- 安装 Podman Desktop。
- 安装和初始化您的容器引擎:Podman。
- 安装和启动您的本地 Kubernetes 提供者:Kind。
- 启动 Redis 主节点。
- 启动和扩展 Redis 从节点。
- 启动并公开 Guestbook 前端。
安装 Podman Desktop
您需要 Podman Desktop。
- 访问 Podman Desktop 安装文档。
- 点击您的平台名称:Windows、macOS 或 Linux。
- 按照说明进行操作。坚持使用默认安装方法。
- 启动 **Podman Desktop**。
此时,您拥有一个图形用户界面,可以
- 安装 Podman 和 Kind。
- 控制和使用您的容器引擎和 Kubernetes 集群。
- 在您的容器引擎上运行您的应用程序,并将其迁移到 Kubernetes。
安装和初始化您的容器引擎:Podman
Podman Desktop 可以控制各种容器引擎,例如
- Docker
- Lima
- Podman
考虑安装 Podman 容器引擎以获得
- 增强的安全性
- 无守护进程
- 开源
容器是 Linux 技术。
- 在 Linux 上,您可以本地安装 Podman。请参阅:在 Linux 上安装 Podman。
- 在 macOS 和 Windows 上,Podman 需要在 Linux 虚拟机中运行:Podman 机器。使用 Podman Desktop 安装 Podman 并初始化您的 Podman 机器
步骤
- 打开 Podman Desktop **仪表盘**
- **仪表盘**显示“Podman Desktop 无法找到 Podman 安装”。
- 点击 **安装**。
- Podman Desktop 检查安装 Podman Engine 的先决条件。如有必要,请按照说明安装先决条件。
- Podman 显示对话框:“此系统上未安装 Podman,您是否要安装 Podman?”。点击 **是** 以安装 Podman。
- 点击 **初始化并启动**。
验证
-
**仪表盘**显示“Podman 正在运行”。
此时,您可以开始使用容器。
安装和启动您的本地 Kubernetes 提供者:Kind
您希望将您的应用程序部署到本地 Kubernetes 集群。
Podman Desktop 可以帮助您在容器引擎(例如 Podman)上运行 Kind 支持的本地 Kubernetes 集群。
Podman Desktop 帮助您 安装 kind
CLI
-
在状态栏中,点击 **Kind**,并按照提示进行操作。
-
当
kind
CLI 可用时,状态栏不再显示 **Kind**。 -
在 Windows 上,在 rootful 模式下配置 Podman
$ podman system connection default podman-machine-default-root
-
转到 ** 设置 > 资源**
-
在 ** Podman** 磁贴中,点击 **** 图标以重新启动 Podman 容器引擎。
-
在 ** Kind** 磁贴中,点击 **创建新** 按钮。
- **名称**:输入
kind-cluster
。 - **提供者类型**:选择
podman
。 - **HTTP 端口**:选择
9090
。 - **HTTPS 端口**:选择
9443
。 - **设置入口控制器**:
已启用
- 点击 **创建** 按钮。
- **名称**:输入
-
创建成功后,点击 **返回资源** 按钮
验证
-
在 ** 设置 > 资源** 中,您的 Kind 集群正在运行。
-
在 **Podman Desktop** 托盘中,打开 **Kubernetes** 菜单:您可以将上下文设置为 Kind 集群:
kind-kind-cluster
。此时,您可以开始使用容器和本地 Kubernetes 集群。
其他资源
启动 Redis 主节点
Guestbook 应用程序使用 Redis 来存储数据。
使用 Podman Desktop,您可以在本地容器引擎上准备 Redis 主节点镜像和容器,并将结果部署到 Kubernetes Pod 和服务中。这在功能上等同于 Kubernetes 示例中提出的 redis-leader
部署。
步骤
-
打开 ** 镜像 > 拉取镜像**。
- 镜像拉取地址: 输入
docker.io/redis:6.0.5
- 点击 **拉取镜像** 将镜像拉取到您容器引擎的本地镜像仓库。
- 点击 **完成** 返回镜像列表。
- 镜像拉取地址: 输入
-
搜索镜像: 输入
redis:6.0.5
搜索镜像。 -
点击 **** 打开 **从镜像创建容器** 对话框。
- 容器名称: 输入
leader
, 6379/tcp
的本地端口:6379
。- 点击 ** 启动容器** 在您的容器引擎中启动容器。
- 容器名称: 输入
-
搜索容器: 输入
leader
搜索正在运行的容器。 -
点击 **** 停止容器,并将
6379
端口留给 Redis 跟踪器容器使用。 -
点击 ** > 部署到 Kubernetes** 打开 **将生成的 Pod 部署到 Kubernetes** 屏幕。
- Pod 名称: 输入
redis-leader
。 - 使用 Kubernetes 服务: 选择 **用服务替换容器上的
hostPort
暴露。这是推荐的暴露端口方式,因为集群策略可能会阻止使用hostPort
。** - 使用 Kubernetes Ingress 在本地暴露服务: 取消选择 **创建一个 Kubernetes Ingress 来访问此 Pod 公开的端口,在默认 Ingress 控制器位置。例如,在使用 Podman Desktop 创建的默认 Kind 集群上:
https://127.0.0.1:9090
。要求:您的集群有一个 Ingress 控制器`**。 - Kubernetes 命名空间: 选择
default
。 - 点击 ** 部署**。
- 等待 Pod 达到状态:阶段:运行。
- 点击 **完成**。
- Pod 名称: 输入
验证
-
Pods** 屏幕列出了正在运行的
redis-leader
Pod。
启动 Redis 跟踪器
虽然 Redis 主节点是一个单独的 Pod,但您可以通过添加一些 Redis 跟踪器或副本,使其具有高可用性并满足流量需求。
使用 Podman Desktop,您可以在本地容器引擎上准备 Redis 跟踪器镜像和容器,并将结果部署到 Kubernetes Pods 和服务中。 这在功能上等同于 Kubernetes 示例中提出的 redis-follower
部署。
步骤
- 打开 ** 镜像 > 拉取镜像**。
- 镜像拉取地址: 输入
gcr.io/google_samples/gb-redis-follower:v2
- 点击 **拉取镜像** 将镜像拉取到您容器引擎的本地镜像仓库。
- 点击 **完成** 返回镜像列表。
- 镜像拉取地址: 输入
- 搜索镜像: 输入
gb-redis-follower:v2
搜索镜像。 - 点击 **** 打开 **从镜像创建容器** 对话框。
- 容器名称: 输入
follower
, 6379/tcp
的本地端口:6379
。- 点击 ** 启动容器** 在您的容器引擎中启动容器。
- 容器名称: 输入
- 搜索容器: 输入
follower
搜索正在运行的容器。 - 点击 **** 停止容器:您不需要在容器引擎中运行它。
- 点击 ** > 部署到 Kubernetes** 打开 **将生成的 Pod 部署到 Kubernetes** 屏幕。
- Pod 名称: 输入
redis-follower
。 - 使用 Kubernetes 服务: 选择 **用服务替换容器上的
hostPort
暴露。这是推荐的暴露端口方式,因为集群策略可能会阻止使用hostPort
。** - 使用 Kubernetes Ingress 在本地暴露服务: 取消选择 **创建一个 Kubernetes Ingress 来访问此 Pod 公开的端口,在默认 Ingress 控制器位置。例如,在使用 Podman Desktop 创建的默认 Kind 集群上:
https://127.0.0.1:9090
。要求:您的集群有一个 Ingress 控制器`**。 - Kubernetes 命名空间: 选择
default
。 - 点击 ** 部署**。
- 等待 Pod 达到状态:阶段:运行。
- 点击 **完成**。
- Pod 名称: 输入
- 要添加副本,请使用另一个 **Pod 名称** 值重复最后一步。
验证
-
在 ** Pods** 屏幕列出了运行中的 `redis-follower` pod。
启动默认前端
现在您已经启动并运行了 Guestbook 的 Redis 存储,可以启动 Guestbook Web 服务器。与 Redis follower 一样,使用 Kubernetes pod 和服务部署前端。
Guestbook 应用使用 PHP 前端。它被配置为与 Redis follower 或 leader 服务通信,具体取决于请求是读操作还是写操作。前端公开了一个 JSON 接口,并提供了一个基于 jQuery-Ajax 的用户界面。
使用 Podman Desktop,您可以在本地容器引擎上准备 Guestbook 前端镜像和容器,并将结果部署到 Kubernetes pod 和服务。这在功能上等同于 Kubernetes 示例提出的 `frontend` 部署。
步骤
- 打开 ** 镜像 > 拉取镜像**。
- **要拉取的镜像**: 输入 `gcr.io/google_samples/gb-frontend:v5`
- 点击 **拉取镜像** 将镜像拉取到您容器引擎的本地镜像仓库。
- 等待拉取完成。
- 点击 **完成** 返回镜像列表。
- ** 搜索镜像**: 输入 `gb-frontend:v5` 查找镜像。
- 点击 **** 打开 **从镜像创建容器** 对话框。
- **容器名称**: 输入 `frontend`,
- **`80/tcp` 的本地端口**: `9000`。
- 点击 ** 启动容器** 在您的容器引擎中启动容器。
- ** 搜索容器**: 输入 `frontend` 查找运行中的容器。
- 点击 **** 停止容器:您不需要在容器引擎中运行它。
- 点击 ** > 部署到 Kubernetes** 打开 **将生成的 Pod 部署到 Kubernetes** 屏幕。
- **Pod 名称**: 输入 `frontend`。
- 使用 Kubernetes 服务: 选择 **用服务替换容器上的
hostPort
暴露。这是推荐的暴露端口方式,因为集群策略可能会阻止使用hostPort
。** - **使用 Kubernetes Ingress 在本地公开服务**: 选择 **创建 Kubernetes ingress 以访问此 pod 公开的端口,位于默认的 ingress 控制器位置。例如:在使用 Podman Desktop 创建的默认 Kind 集群上:`https://127.0.0.1:9090`。要求:您的集群有一个 ingress 控制器`**。
- Kubernetes 命名空间: 选择
default
。 - 点击 ** 部署**。
- 等待 Pod 达到状态:阶段:运行。
- 点击 **完成**。
验证
-
在 ** Pods** 屏幕列出了运行中的 `frontend` pod。
-
访问 `https://127.0.0.1:9090`:Guestbook 应用正在运行。