podman实现网络隔离和容器开机自启动
ubuntu20.04安装Podman
读取当前系统的操作系统版本信息
. 是 source 命令的简写,会把这些变量加载进当前 Shell 环境。
后续命令中会使用 ${VERSION_ID} 获取系统版本号(比如 20.04、22.04)
. /etc/os-release
添加 Podman 的 APT 软件源
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
导入该源的 GPG 公钥
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
更新 APT 包索引
sudo apt-get update
安装 Podman
apt install -y podman
查看版本
podman --version
让 Podman 容器开机自启动
方法一(不使用pod单容器)
1.生成 systemd 服务文件:
podman generate systemd --name (容器名字) --files
这会在当前目录生成 container-(容器名字).service 文件。
2.将服务文件复制到 systemd 目录:
sudo mv container-(容器名字).service /etc/systemd/system/
3.启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable container-(容器名字).service
sudo systemctl start container-(容器名字).service
这样宿主机重启时,Podman 容器会自动启动。
方法二(使用Pod 在独立的网络命名空间中运行多个容器)
1.生成一个 systemd的配置文件
podman generate systemd --name (容器名字) --files
2.在用户的home目录上 创建一个文件夹
mkdir -p ~/.config/systemd/user/
3.把刚才生成的所有配置文件
cp pod-my-pod.service container-*.service ~/.config/systemd/user/
4.刷新 systemd 用户配置缓存
systemctl --user daemon-reload
5.启用并立即启动 Pod 服务
systemctl --user enable --now pod-my-pod.service
6.允许用户级服务在用户未登录时也运行
sudo loginctl enable-linger $(whoami)
实现网络隔离
Podman 的 Pod 概念,在一个独立的网络命名空间(private_net)中运行多个容器,实现网络隔离
1.创建一个私有网络
podman network create private_net
2.然后分别运行 MySQL 和 Redis 容器,并接入该网络
要在启动容器命令里加上这个 --network private_net \
拿MySql和Redis举例
podman run -d --name mysql8 \
--network private_net \
-p 3306:3306 \
-v /mhzch/mysql8.0.20/etc/mysql:/etc/mysql \
-v /mhzch/mysql8.0.20/logs:/var/log/mysql \
-v /mhzch/mysql8.0.20/data:/var/lib/mysql \
-v /mhzch/mysql8.0.20/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root \
mysql:8.0
podman run -d --name Mhzchredis \
--network private_net \
-p 6379:6379 \
-v /etc/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf:ro \
-v /etc/redis/data:/data \
redis:latest redis-server /usr/local/etc/redis/redis.conf
podman pod 共享 网络空间 IPC命名 挂载卷
可以使用 podman 创建出一个 pod 然后把一个或多个容器添加进去(对pod的原生支持)
pod里面 所有容器公用同一个网络 同一个ip
1.创建 pod
--name 后面是自定义名字 添加映射
podman pod create --name my-pod -p 8081:8081
2.查看创建出来的pod
podman pod list
3.创建挂载路径
比如 redis
mkdir /etc/redis/data
4.启动容器
加上 --pod my-pod \
podman run -d --name Mhzchredis \
--pod my-pod \
-p 6379:6379 \
-v /etc/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf:ro \
-v /etc/redis/data:/data \
redis:latest redis-server /usr/local/etc/redis/redis.conf
这样就加到了 刚刚创建的pod里了
再加入 mysql
podman run -d --name mysql8 \
--pod my-pod \
-p 3306:3306 \
-v /mhzch/mysql8.0.20/etc/mysql:/etc/mysql \
-v /mhzch/mysql8.0.20/logs:/var/log/mysql \
-v /mhzch/mysql8.0.20/data:/var/lib/mysql \
-v /mhzch/mysql8.0.20/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root \
mysql:8.0
就可以显示出每个容器的 所属pod
podman ps --pod
就可以停止整个pod
podman pod stop my-pod
可以启动所有pod容器
podman pod start my-pod
5.把pod 导出成一个 k8s的配置文件 (my-pod.yaml 是一个配置文件名字 )
podman generate kube my-pod>my-pod.yaml
查看一下配置文件 (这是一份跟K8S兼容的配置文件)
vi my-pod.yaml
执行 K8S命令 直接把这个pod导入K8S里面进行运行
有了这个配置文件 可以在podman 里面把这个pod在创建回来
在本机测试 把刚刚创建的pod先删除
podman pod rm -f my-pod
使用配置文件 再把pod创建出来
podman play kube my-pod.yaml
这样 之前的两个容器 也就创建回来了(可以无缝衔接切换到K8S上面运行)

浙公网安备 33010602011771号