《OpenShift 4.x HOL教程汇总》
在 podman-desktop 1.2.1 + podman 4.4 环境中验证。
文章目录
什么是 podman 和 podman-desktop
- podman 是 RedHat 公司主导的一个免费的开源容器项目,目标是平替安全能力较差的 Docker。作为运行容器的独立环境,podman 目前已经广泛被用在 Linux、MacOS 或 Windows 环境中。尤其在 RHEL、CentOS、SUSE、Ubuntu 等 Linux 中,podman 已经是默认的容器运行环境了。除了比 Docker 有更优的安全运行特性外,podman 还有很多其他特性。例如 podman 不但可以运行标准容器,还可以像 Kubernetes 那样运行 Pod(但不能调度 Pod),因此可以作为容器应用开发、测试和运行的环境。
- podman desktop 是运行 podman 的图形化工具,可以让对容器/Pod的操作更加容易。
安装 podman 和 podman-desktop 基本环境
本文使用了运行Fedora 38 桌面版的虚机,其中缺省会自带 podman 运行环境。另外由于要在其中运行 Kubernetes 集群,因此虚机内存最少配置 6G。
- 查看 podman 版本。
$ podman version
Client: Podman Engine
Version: 4.4.2
API Version: 4.4.2
Go Version: go1.20.1
Built: Wed Mar 1 19:22:39 2023
OS/Arch: linux/amd64
- 在 https://podman-desktop.io/downloads 页面下载 tar.gz 形式的 podman-desktop 文件包。
- 解压文件,然后运行 podman-desktop。
$ tar -xvf podman-desktop-1.2.1.tar.gz
$ cd podman-desktop-1.2.1
$ podman-desktop
- 在初始界面中点击下方的 Go to Podman Desktop 进入正式界面。
Image、Container 和 Pod 的基本操作
拉取 Image
- 在 Setting 栏目中的 Registries 中可以添加 Registry 的地址、访问用户名和密码。
- 在 Images 栏目中点击 Pull an image 拉取 httpd:2.4.57 镜像。
运行 Container
- 先点击上图 httpd 镜像右侧的 Run Image 箭头,然后在下图的界面中提供 Container name 为 apache-httpd-1,最后点击下方的 Start Container 按钮。
- 点击 Containers 栏目中的 apache-httpd-1 右侧的下拉菜单,然后再点击 Open Browser。
- 可以在浏览器中访问到运行在容器中的httpd页面。
- 点击第2部的 Generate Kube 菜单,然后将生成的内容保存到本地 pod-httpd.yaml 文件中。
- 停止 apache-httpd-1 容器运行。
- 在 Pods 栏目界面中点击右上方的 Play Kubernetes YAML 按钮,然后在下图的界面中为 Kubernetes YAML file 选择 pod-httpd.yaml 文件。
- 在 Pods 栏目中可以看到运行的 Pod。最后可以刷新步骤 3 的浏览器,确认可以正常访问到 httpd 页面。
将 Pod 部署到 Kubernetes
安装 Kind 扩展插件
- 在 Podman Desktop 窗口下方点击 Kind。
- 在弹出窗口中点击 Yes 开始下载 Kind 软件。
- 下载完在提示窗口中点击 Yes,然后提供管理员权限。
创建 Kubernetes 集群
-
在 Settings 栏目中进入 Resources,然后点击 Kind 下面的 Create new 按钮。
-
在 Create a Kind cluster 界面中点击 Create 按钮。
-
在创建完 Kind 集群后可以看到 kind-cluster 已经是 Running 状态了,同时还能看到 Kubernetes endpoint 地址。此外在状态栏可以看到识别出的刚刚创建的 Kubernetes 集群名称。注意:如果没有识别出 Kubernetes 集群名称,可以尝试关闭并重启 Podman Desktop。
-
运行命令,查看运行 Kubernetes 的容器。
$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abbe67e830d3 docker.io/kindest/node@sha256:3966ac761ae0136263ffdb6cfd4db23ef8a83cba8a463690e98317add2c9ba72 5 hours ago Up 5 hours 0.0.0.0:9090->80/tcp, 0.0.0.0:9443->443/tcp, 127.0.0.1:41535->6443/tcp kind-cluster-control-plane
- 在浏览器中确认可以访问 Kubernetes endpoint。
- 安装 kubectl 命令。
$ sudo yum install kubernetes-client
- 使用 ~/.kube/config 访问 Kubernetes,查看 Kubernetes 命名空间。
$ more ~/.kube/config
$ kubectl get namespace
NAME STATUS AGE
default Active 9m45s
kube-node-lease Active 9m45s
kube-public Active 9m45s
kube-system Active 9m45s
local-path-storage Active 9m34s
projectcontour Active 9m32s
向 Kubernetes 部署 Pod
- 在 Containers 栏目中点击 apache-httpd-1 右侧下拉菜单的 Deploy to Kubernetes。
- 在下图的 Deploy generated pod to Kubernetes 窗口中确认部署的 Kubernetes Context 和 Kubernetes namespace,最后点击 Deploy 按钮。
- 部署成功后可以在下图界面中看到 pod 是 Running 状态了,最后点击 Done 按钮即可。
访问 Kubernetes 中的 Pod
- 查看运行在 Kubernetes 中的 apache-httpd-1-pod 和 Service,然后记下 apache-httpd-1-pod-9000 服务的 CLUSTER-IP 地址。
$ kubectl get pod -n default
NAME READY STATUS RESTARTS AGE
apache-httpd-1-pod 1/1 Running 0 37s
$ kubectl get svc -n default
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
apache-httpd-1-pod-9000 ClusterIP 10.96.119.200 <none> 9000/TCP 58s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 29m
- 点击 kind-cluster-control-plane 容器,进入容器内部。
- 在容器中的 Terminal 中执行 “curl 10.96.119.200:9000”,然后确认可以访问到页面。
视频
参考
https://redhat-scholars.github.io/podman-desktop-tutorial/podman-desktop-tutorial/index.html