《OpenShift 4.x HOL教程匯總》
在 podman-desktop 1.2.1 + podman 4.4 環境中驗證。
文章目錄
- 什么是 podman 和 podman-desktop
- 安裝 podman 和 podman-desktop 基本環境
- Image、Container 和 Pod 的基本操作
- 拉取 Image
- 運行 Container
- 將 Pod 部署到 Kubernetes
- 安裝 Kind 擴展插件
- 創建 Kubernetes 集群
- 向 Kubernetes 部署 Pod
- 訪問 Kubernetes 中的 Pod
- 視頻
什么是 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”,然后確認可以訪問到頁面。
視頻
視頻