Podman与Kubernetes交互实践
立即解锁
发布时间: 2025-08-14 00:33:30 阅读量: 11 订阅数: 14 

Podman for DevOps: 使用容器化技术革新
### 在Podman和Kubernetes中运行WordPress应用
#### 1. 在Podman中运行Kubernetes资源文件
在生成包含部署应用所需资源的Kubernetes YAML文件后,我们可以在实际场景中对其进行测试。这里以WordPress应用为例,分别展示单容器和多容器的情况。
在测试Kubernetes资源创建之前,需要清理之前的所有工作负载。使用`podman play kube`命令可以方便地管理复杂堆栈的执行,并且具有一定的自定义程度。
##### 1.1 单容器示例
首先基于单容器清单运行:
```bash
$ podman play kube wordpress-single-pod.yaml
```
执行上述命令后,会创建一个名为`wordpress-pod`的容器,它由两个容器和必要的卷组成。我们可以通过以下命令检查结果:
- 检查容器:
```bash
$ podman pod ps
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
5f8ecfe66acd wordpress-pod Running 4 minutes ago 46b4bdfe6a08 3
```
- 检查运行的容器:
```bash
$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
46b4bdfe6a08 localhost/podman-pause:4.0.0-rc4-1643988335 4 minutes ago Up 4 minutes ago 0.0.0.0:8080->80/tcp 5f8ecfe66acd-infra
ef88a5c8d1e5 docker.io/library/mysql:latest mysqld 4 minutes ago Up 4 minutes ago 0.0.0.0:8080->80/tcp wordpress-pod-db
76c6b6328653 docker.io/library/wordpress:latest apache2-foregroun... 4 minutes ago Up 4 minutes ago 0.0.0.0:8080->80/tcp wordpress-pod-wordpress
```
- 检查卷是否创建:
```bash
$ podman volume ls
DRIVER VOLUME NAME
local dbvol
local wpvol
```
在查看多容器示例之前,需要清理环境。可以手动清理,也可以使用`podman play kube --down`命令:
```bash
$ podman play kube --down wordpress-single-pod.yaml
```
需要注意的是,卷默认不会被删除,如果要删除未使用的卷,可以使用`podman volume prune`命令。
##### 1.2 多容器示例
使用基本导出的清单运行多容器示例:
```bash
$ podman play kube --network kubenet \
wordpress-multi-pod-basic.yaml
```
这里的`--network`参数用于指定容器将连接的网络,因为Kubernetes YAML文件中不包含Podman网络的信息。
我们可以通过以下命令检查两个容器是否正确创建:
```bash
$ podman pod ps
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
c9d775da0379 mysql-pod Running 8 minutes ago 71c93fa6080b 2
3b497cbaeebc wordpress-pod Running 8 minutes ago 0c52ee133f0f 2
```
检查运行的容器:
```bash
$ podman ps --format "{{.Image }} {{.Names}}"
localhost/podman-pause:4.0.0-rc5-1644672408 3b497cbaeebc-infra
docker.io/library/wordpress:latest wordpress-pod-wordpress
localhost/podman-pause:4.0.0-rc5-1644672408 c9d775da0379-infra
docker.io/library/mysql:latest mysql-pod-db
```
使用`podman volume ls`命令确认两个卷的存在:
```bash
$ podman volume ls
DRIVER VOLUME NAME
local dbvol
local wpvol
```
可以使用`podman unshare`命令检查无特权网络配置:
```bash
$ podman unshare --rootless-netns ip addr show
```
注意,`--rootless-netns`选项仅在Podman 4中可用。
最后,检查DNS行为。在Podman 4中,自定义网络的名称解析由`aardvark-dns`守护进程管理。可以在`/run/user/<UID>/containers/networks/aardvark-dns/<NETWORK_NAME>`文件中找到管理记录。例如,`kubenet`网络的配置如下:
```bash
$ cat /run/user/1000/containers/networks/aardvark-dns/kubenet
10.89.0.1
0c52ee133f0fec5084f25bd89ad8bd0f6af2fc46d696e2b8161
```
0
0
复制全文


