1. 首页 > 软件安装教程 > 正文

Podman安装配置-Podman容器安装配置_升级迁移详细过程

1. Podman概述与环境规划

Podman是一个无守护进程的容器引擎,用于在Linux系统上管理和运行容器。Podman提供了与Docker兼容的命令行界面,支持容器的构建、运行和管理,同时不需要运行特权守护进程。更多学习教程www.fgedu.net.cn

1.1 Podman版本说明

Podman目前主要版本为4.x系列,本教程以Podman 4.9.0为例进行详细讲解。Podman 4.x版本相比之前版本在性能、稳定性和功能方面都有显著提升,支持更多的容器管理特性。

# 查看Podman版本
$ podman –version
podman version 4.9.0

# 查看系统版本
$ cat /etc/os-release
NAME=”Oracle Linux Server”
VERSION=”8.9″
ID=”ol”
PRETTY_NAME=”Oracle Linux Server 8.9″

# 查看内核版本
$ uname -r
5.4.17-2136.302.7.2.el8uek.x86_64

1.2 环境规划

本次安装环境规划如下:

Podman服务器:
podman01.fgedu.net.cn (192.168.1.51) – Podman主机

Podman版本:4.9.0
操作系统:Oracle Linux 8.9
安装目录:/usr/bin/podman
配置目录:/etc/containers
存储目录:/var/lib/containers
镜像仓库:docker.io, quay.io
网络模式:bridge, host, none, pod

2. 硬件环境要求

Podman作为容器引擎,对硬件资源要求相对较低,但需要考虑运行容器的数量和资源需求。学习交流加群风哥微信: itpux-com

2.1 物理主机环境要求

# 检查内存大小
# free -h
total used free shared buff/cache available
Mem: 16G 4.2G 10G 256M 1.8G 11G
Swap: 8G 0B 8G

# 检查磁盘空间
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 12G 39G 24% /
/dev/sdb1 500G 50G 451G 10% /data
/dev/sdc1 200G 20G 181G 10% /backup

# 检查CPU核心数
# nproc
8

# 检查系统架构
# uname -m
x86_64

# 检查内核版本
# uname -r
5.4.17-2136.302.7.2.el8uek.x86_64

生产环境建议:最小内存4GB(测试环境),生产环境建议8GB以上。磁盘空间根据容器镜像和数据大小规划,建议至少100GB。CPU核心数建议4核以上,以支持并发容器运行。

2.2 vSphere虚拟主机环境要求

虚拟机配置:
– vCPU:4核
– 内存:8GB
– 磁盘:系统盘50GB + 数据盘200GB
– 网络:VMXNET3网卡,千兆网络
– 存储:建议使用SSD存储以提高I/O性能

资源池配置:
– CPU预留:2GHz
– 内存预留:4GB
– 内存限制:8GB
– CPU份额:正常
– 内存份额:正常

2.3 云平台主机环境要求

云主机规格(阿里云/腾讯云/华为云):
– 实例规格:ecs.g6.xlarge或同等规格
– vCPU:4核
– 内存:16GB
– 系统盘:高效云盘 100GB
– 数据盘:SSD云盘 200GB
– 网络带宽:5Mbps以上

存储配置:
– OSS对象存储:用于存储容器镜像
– NAS文件存储:用于共享数据卷
– 云盘快照:定期备份容器数据

3. 操作系统环境准备

在安装Podman之前,需要对操作系统进行必要的配置和优化。

3.1 操作系统版本检查

# 检查操作系统版本
# cat /etc/os-release
NAME=”Oracle Linux Server”
VERSION=”8.9″
ID=”ol”
PRETTY_NAME=”Oracle Linux Server 8.9″

# 检查内核版本
# uname -r
5.4.17-2136.302.7.2.el8uek.x86_64

# 检查SELinux状态
# getenforce
Enforcing

# 检查防火墙状态
# systemctl status firewalld
● firewalld.service – firewalld – dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running)

3.2 内核参数优化

# 编辑sysctl.conf文件
# vi /etc/sysctl.conf

# 添加以下内核参数
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 4294967296
kernel.shmmax = 68719476736
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 1024
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5

# 容器相关内核参数
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

# 使内核参数生效
# sysctl -p

# 验证参数设置
# sysctl -a | grep fs.file-max
fs.file-max = 6815744

3.3 用户资源限制配置

# 配置用户资源限制
# vi /etc/security/limits.conf

# 添加以下内容
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
* soft stack 10240
* hard stack 32768

# 验证配置
# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 63499
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65535
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 65535
virtual memory (kbytes, -v) unlimited

3.4 依赖包安装

# 安装必要的依赖包
# yum install -y curl wget yum-utils device-mapper-persistent-data lvm2

# 安装容器相关依赖
# yum install -y runc containernetworking-plugins conmon skopeo buildah

# 验证依赖安装
# rpm -qa | grep -E “runc|containernetworking|conmon|skopeo|buildah”
runc-1.1.7-1.module+el8.9.0+20474+e4e7624c.x86_64
containernetworking-plugins-1.1.1-3.module+el8.9.0+20474+e4e7624c.x86_64
conmon-2.1.7-2.module+el8.9.0+20474+e4e7624c.x86_64
skopeo-1.10.0-2.module+el8.9.0+20474+e4e7624c.x86_64
buildah-1.31.0-1.module+el8.9.0+20474+e4e7624c.x86_64

4. Podman安装配置

完成环境准备后,开始安装Podman。

4.1 安装Podman

# 安装Podman
# yum install -y podman

# 验证安装
# podman –version
podman version 4.9.0

# 查看Podman信息
# podman info
host:
arch: amd64
buildahVersion: 1.31.0
cgroupControllers:
– cpu
– memory
– pids
cgroupManager: systemd
cgroupVersion: v2
conmon:
package: conmon-2.1.7-2.module+el8.9.0+20474+e4e7624c.x86_64
path: /usr/bin/conmon
version: ‘conmon version 2.1.7, commit: ‘
cpuUtilization:
idlePercent: 99.99
systemPercent: 0.01
userPercent: 0.0
cpus: 8
databaseBackend: boltdb
distribution:
distribution: ‘”‘”‘ol'”‘”‘
version: ‘”‘”‘8.9′”‘”‘
eventLogger: journald
hostname: podman01.fgedu.net.cn
idMappings:
gidmap:
– container_id: 0
host_id: 0
size: 1
uidmap:
– container_id: 0
host_id: 0
size: 1
kernel: 5.4.17-2136.302.7.2.el8uek.x86_64
linkmode: dynamic
logDriver: k8s-file
memFree: 10485760000
memTotal: 17179869184
networkBackend: netavark
ociRuntime:
name: runc
package: runc-1.1.7-1.module+el8.9.0+20474+e4e7624c.x86_64
path: /usr/bin/runc
version: ‘runc version spec: 1.0.2-dev’
os: linux
remoteSocket:
exists: true
path: /run/podman/podman.sock
security:
apparmorEnabled: false
capabilities:
– CAP_CHOWN
– CAP_DAC_OVERRIDE
– CAP_FOWNER
– CAP_FSETID
– CAP_KILL
– CAP_NET_BIND_SERVICE
– CAP_SETFCAP
– CAP_SETGID
– CAP_SETPCAP
– CAP_SETUID
– CAP_SYS_CHROOT
rootless: false
seccompEnabled: true
seccompProfilePath: /usr/share/containers/seccomp.json
selinuxEnabled: true
serviceIsRemote: false
slirp4netns:
executable: /usr/bin/slirp4netns
package: slirp4netns-1.2.0-2.module+el8.9.0+20474+e4e7624c.x86_64
version: |-
slirp4netns version 1.2.0
commit: 656041d45cfca7a4176f6b7eed9e4fe6c11e8383
libslirp: 4.4.0
SLIRP_CONFIG_VERSION_MAX: 3
libseccomp: 2.5.2
swapFree: 8589934592
swapTotal: 8589934592
uptime: 1h 23m 45s (Approximately 0.04 days)
plugins:
authorization:
– name: authorization
log:
– name: k8s-file
– name: none
– name: journald
network:
– name: bridge
– name: macvlan
– name: ipvlan
– name: host
– name: none
volume:
– name: local
registries:
search:
– docker.io
– quay.io
store:
configFile: /etc/containers/storage.conf
containerStore:
number: 0
paused: 0
running: 0
stopped: 0
graphDriverName: overlay
graphOptions:
overlay.mountopt: nodev,metacopy=on
graphRoot: /var/lib/containers/storage
graphStatus:
Backing Filesystem: xfs
Native Overlay Diff: “false”
Supports d_type: “true”
Using metacopy: “true”
imageStore:
number: 0
runRoot: /run/containers/storage
volumePath: /var/lib/containers/storage/volumes
version:
APIVersion: 4.9.0
Built: 1709280000
BuiltTime: Wed Feb 28 00:00:00 2024
GitCommit: “”
GoVersion: go1.20.10
Os: linux
OsArch: linux/amd64
Version: 4.9.0

4.2 配置Podman

# 编辑Podman配置文件
# vi /etc/containers/containers.conf

# 基本配置
[containers]
default_sysctls = [“net.ipv4.ip_forward=1”]
default_capabilities = [“CAP_NET_ADMIN”, “CAP_SYS_TIME”]
default_ulimits = [“nofile=65536:65536”]

# 存储配置
[storage]
driver = “overlay”
[storage.options]
overlay.mountopt = “nodev,metacopy=on”

# 网络配置
[network]
default_network = “podman”

# 验证配置
# cat /etc/containers/containers.conf | grep -v “^#” | grep -v “^$”
[containers]
default_sysctls = [“net.ipv4.ip_forward=1”]
default_capabilities = [“CAP_NET_ADMIN”, “CAP_SYS_TIME”]
default_ulimits = [“nofile=65536:65536”]
[storage]
driver = “overlay”
[storage.options]
overlay.mountopt = “nodev,metacopy=on”
[network]
default_network = “podman”

4.3 配置镜像仓库

# 编辑镜像仓库配置
# vi /etc/containers/registries.conf

# 配置镜像仓库
[[registry]]
prefix = “docker.io”
location = “docker.io”

[[registry]]
prefix = “quay.io”
location = “quay.io”

[[registry]]
prefix = “registry.access.redhat.com”
location = “registry.access.redhat.com”

# 配置镜像加速
[[registry.mirror]]
prefix = “docker.io”
location = “registry.cn-hangzhou.aliyuncs.com”

# 验证配置
# cat /etc/containers/registries.conf | grep -v “^#” | grep -v “^$”
[[registry]]
prefix = “docker.io”
location = “docker.io”
[[registry]]
prefix = “quay.io”
location = “quay.io”
[[registry]]
prefix = “registry.access.redhat.com”
location = “registry.access.redhat.com”
[[registry.mirror]]
prefix = “docker.io”
location = “registry.cn-hangzhou.aliyuncs.com”

4.4 启动Podman服务

# 启动Podman服务
# systemctl start podman
# systemctl enable podman

# 验证服务状态
# systemctl status podman
● podman.service – Podman API Service
Loaded: loaded (/usr/lib/systemd/system/podman.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2024-04-05 10:00:00 CST; 1min ago
Docs: man:podman-system-service(1)
Main PID: 12345 (podman)
Tasks: 10
Memory: 100.0M
CGroup: /system.slice/podman.service
└─12345 /usr/bin/podman system service

# 验证Podman socket
# ls -la /run/podman/podman.sock
.srw-rw—- 1 root root 0 Apr 5 10:00 /run/podman/podman.sock

5. Podman配置优化

为了提高Podman的性能和稳定性,需要进行一些配置优化。

5.1 存储配置优化

# 编辑存储配置
# vi /etc/containers/storage.conf

# 存储配置
[storage]
driver = “overlay”
graphroot = “/var/lib/containers/storage”
runroot = “/run/containers/storage”
[storage.options]
overlay.mountopt = “nodev,metacopy=off”
overlay.size = “100GB”

# 验证配置
# cat /etc/containers/storage.conf | grep -v “^#” | grep -v “^$”
[storage]
driver = “overlay”
graphroot = “/var/lib/containers/storage”
runroot = “/run/containers/storage”
[storage.options]
overlay.mountopt = “nodev,metacopy=off”
overlay.size = “100GB”

5.2 网络配置优化

# 创建自定义网络
# podman network create fgedu-net –subnet 172.18.0.0/16 –gateway 172.18.0.1

# 查看网络
# podman network ls
NETWORK ID NAME DRIVER
1234567890ab podman bridge
9876543210ba fgedu-net bridge

# 配置网络参数
# vi /etc/containers/containers.conf

[network]
default_network = “fgedu-net”
network_backend = “netavark”

# 验证配置
# cat /etc/containers/containers.conf | grep -A 5 “network”
[network]
default_network = “fgedu-net”
network_backend = “netavark”

5.3 安全配置优化

# 编辑安全配置
# vi /etc/containers/containers.conf

[containers]
default_sysctls = [“net.ipv4.ip_forward=1”]
default_capabilities = []
default_ulimits = [“nofile=65536:65536”]
default_seccomp_profile = “/usr/share/containers/seccomp.json”
default_apparmor_profile = “”

# 配置SELinux
# vi /etc/containers/containers.conf

[containers]
label = “auto”

# 验证配置
# cat /etc/containers/containers.conf | grep -A 10 “containers”
[containers]
default_sysctls = [“net.ipv4.ip_forward=1”]
default_capabilities = []
default_ulimits = [“nofile=65536:65536”]
default_seccomp_profile = “/usr/share/containers/seccomp.json”
default_apparmor_profile = “”
label = “auto”

6. Podman容器管理

本节介绍Podman容器的基本管理操作。

6.1 拉取镜像

# 拉取Ubuntu镜像
# podman pull ubuntu:22.04

# 拉取Nginx镜像
# podman pull nginx:latest

# 拉取MySQL镜像
# podman pull mysql:8.0

# 查看镜像
# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/ubuntu 22.04 1234567890ab 2 weeks ago 70MB
docker.io/library/nginx latest 9876543210ba 1 week ago 140MB
docker.io/library/mysql 8.0 abcdef123456 3 days ago 500MB

6.2 运行容器

# 运行Ubuntu容器
# podman run -it –name ubuntu-test ubuntu:22.04 /bin/bash

# 运行Nginx容器
# podman run -d –name nginx-test -p 80:80 nginx:latest

# 运行MySQL容器
# podman run -d –name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mysql123 mysql:8.0

# 查看运行中的容器
# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1234567890ab docker.io/library/nginx:latest nginx -g daemon off; 1 minute ago Up 1 minute ago 0.0.0.0:80->80/tcp nginx-test
9876543210ba docker.io/library/mysql:8.0 mysqld 2 minutes ago Up 2 minutes ago 0.0.0.0:3306->3306/tcp mysql-test

6.3 管理容器

# 停止容器
# podman stop nginx-test

# 启动容器
# podman start nginx-test

# 重启容器
# podman restart nginx-test

# 删除容器
# podman rm nginx-test

# 查看所有容器
# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1234567890ab docker.io/library/nginx:latest nginx -g daemon off; 1 minute ago Exited (0) 30 seconds ago nginx-test
9876543210ba docker.io/library/mysql:8.0 mysqld 2 minutes ago Up 2 minutes ago 0.0.0.0:3306->3306/tcp mysql-test

6.4 容器监控

# 查看容器状态
# podman inspect nginx-test

# 查看容器日志
# podman logs nginx-test

# 查看容器资源使用情况
# podman stats nginx-test

# 进入容器
# podman exec -it nginx-test /bin/bash

# 查看容器内进程
# podman top nginx-test

7. Podman网络配置

Podman支持多种网络模式,包括bridge、host、none和pod。

7.1 网络模式介绍

# 查看网络模式
# podman network ls
NETWORK ID NAME DRIVER
1234567890ab podman bridge
9876543210ba fgedu-net bridge

# 查看网络详细信息
# podman network inspect podman
[
{
“name”: “podman”,
“id”: “1234567890ab”,
“driver”: “bridge”,
“network_interface”: “podman0”,
“created”: “2024-04-05T10:00:00Z”,
“subnets”: [
{
“subnet”: “10.88.0.0/16”,
“gateway”: “10.88.0.1”
}
],
“ipv6_enabled”: false,
“internal”: false,
“dns_enabled”: true,
“labels”: {}
}
]

7.2 自定义网络

# 创建自定义网络
# podman network create –driver bridge –subnet 172.19.0.0/16 –gateway 172.19.0.1 fgedu-net2

# 查看网络
# podman network ls
NETWORK ID NAME DRIVER
1234567890ab podman bridge
9876543210ba fgedu-net bridge
abcdef123456 fgedu-net2 bridge

# 使用自定义网络运行容器
# podman run -d –name nginx-test2 –network fgedu-net2 -p 8080:80 nginx:latest

# 验证网络配置
# podman inspect nginx-test2 | grep -A 20 “NetworkMode”

7.3 网络故障排查

# 检查网络接口
# ip addr show podman0

# 检查网络路由
# ip route show

# 测试容器网络连接
# podman exec -it nginx-test ping -c 4 www.baidu.com

# 检查防火墙规则
# firewall-cmd –list-all

# 允许容器网络流量
# firewall-cmd –add-masquerade –permanent
# firewall-cmd –reload

8. Podman存储配置

Podman使用存储驱动来管理容器的文件系统,支持多种存储驱动。

8.1 存储驱动配置

# 查看存储驱动
# podman info | grep -A 10 “storage”

# 编辑存储配置
# vi /etc/containers/storage.conf

[storage]
driver = “overlay”
graphroot = “/var/lib/containers/storage”
runroot = “/run/containers/storage”
[storage.options]
overlay.mountopt = “nodev,metacopy=off”

# 验证存储配置
# podman info | grep -A 20 “storage”

8.2 卷管理

# 创建卷
# podman volume create fgedu-volume

# 查看卷
# podman volume ls
DRIVER VOLUME NAME
local fgedu-volume

# 使用卷运行容器
# podman run -d –name nginx-test -v fgedu-volume:/usr/share/nginx/html -p 80:80 nginx:latest

# 查看卷详细信息
# podman volume inspect fgedu-volume

# 删除卷
# podman volume rm fgedu-volume

8.3 存储优化

# 清理未使用的镜像
# podman image prune -f

# 清理未使用的容器
# podman container prune -f

# 清理未使用的卷
# podman volume prune -f

# 清理所有未使用的资源
# podman system prune -f

# 查看存储使用情况
# podman system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 3 2 710MB 70MB (9%)
Containers 2 2 0B 0B
Local Volumes 1 1 100MB 0B
Build Cache 0 0 0B 0B

9. Podman性能优化

在生产环境中,需要对Podman进行性能优化以提高容器运行效率。from:www.itpux.com

9.1 内存优化

# 配置容器内存限制
# podman run -d –name nginx-test –memory 512m –memory-swap 1g -p 80:80 nginx:latest

# 配置容器CPU限制
# podman run -d –name nginx-test –cpus 0.5 -p 80:80 nginx:latest

# 配置容器IO限制
# podman run -d –name nginx-test –blkio-weight 500 -p 80:80 nginx:latest

# 验证资源限制
# podman inspect nginx-test | grep -A 10 “Resources”

9.2 镜像优化

# 拉取轻量级镜像
# podman pull alpine:latest

# 构建优化的Dockerfile
# vi Dockerfile
FROM alpine:latest
RUN apk add –no-cache nginx
EXPOSE 80
CMD [“nginx”, “-g”, “daemon off;”]

# 构建镜像
# podman build -t fgedu/nginx:alpine .

# 查看镜像大小
# podman images | grep fgedu/nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/fgedu/nginx alpine 1234567890ab 1 minute ago 15MB

9.3 网络优化

# 使用host网络模式
# podman run -d –name nginx-test –network host nginx:latest

# 配置网络MTU
# podman network create –driver bridge –subnet 172.20.0.0/16 –gateway 172.20.0.1 –opt mtu=1450 fgedu-net3

# 使用自定义网络运行容器
# podman run -d –name nginx-test –network fgedu-net3 -p 80:80 nginx:latest

# 测试网络性能
# podman exec -it nginx-test iperf3 -c 192.168.1.51

9.4 存储优化

# 使用overlay2存储驱动
# vi /etc/containers/storage.conf
[storage]
driver = “overlay”
[storage.options]
overlay.mountopt = “nodev,metacopy=off”

# 配置存储配额
# vi /etc/containers/storage.conf
[storage.options]
overlay.size = “100GB”

# 清理存储
# podman system prune -f –all

# 查看存储使用情况
# podman system df

生产环境建议:根据服务器硬件配置和容器数量调整Podman的资源限制和配置。使用轻量级镜像,合理配置网络和存储,定期清理未使用的资源以提高性能。

10. Podman升级迁移

本节介绍Podman的版本升级和数据迁移方法。

10.1 Podman版本升级

# 备份当前Podman配置
# cp -r /etc/containers /backup/containers_$(date +%Y%m%d)

# 备份容器和镜像
# podman save -o /backup/images_$(date +%Y%m%d).tar $(podman images -q)

# 停止所有容器
# podman stop $(podman ps -q)

# 升级Podman
# yum update -y podman

# 验证升级
# podman –version
podman version 4.9.0

# 启动容器
# podman start $(podman ps -a -q)

# 验证容器状态
# podman ps

10.2 Podman配置迁移

# 导出Podman配置
# cp -r /etc/containers /backup/containers_export

# 导出容器和镜像
# podman save -o /backup/images_export.tar $(podman images -q)
# podman export -o /backup/containers_export.tar $(podman ps -a -q)

# 在新服务器上导入配置
# cp -r /backup/containers_export /etc/containers

# 导入镜像
# podman load -i /backup/images_export.tar

# 导入容器
# podman import /backup/containers_export.tar

# 启动容器
# podman start $(podman ps -a -q)

# 验证配置
# podman info

11. Podman备份恢复

本节介绍Podman的备份和恢复方法。

11.1 Podman容器备份

# 备份单个容器
# podman export -o /backup/nginx-container_$(date +%Y%m%d).tar nginx-test

# 备份容器卷
# podman volume export -o /backup/nginx-volume_$(date +%Y%m%d).tar fgedu-volume

# 备份所有容器
# for container in $(podman ps -a -q); do podman export -o /backup/container_${container}_$(date +%Y%m%d).tar $container; done

# 备份所有镜像
# podman save -o /backup/images_$(date +%Y%m%d).tar $(podman images -q)

11.2 Podman容器恢复

# 恢复镜像
# podman load -i /backup/images_20240405.tar

# 恢复容器
# podman import /backup/nginx-container_20240405.tar

# 恢复容器卷
# podman volume create fgedu-volume
# podman volume import fgedu-volume /backup/nginx-volume_20240405.tar

# 启动容器
# podman run -d –name nginx-test -v fgedu-volume:/usr/share/nginx/html -p 80:80 nginx:latest

# 验证恢复
# podman ps

11.3 Podman监控脚本

# 创建Podman监控脚本
# vi /data/podman/scripts/podman_monitor.sh

#!/bin/bash
LOG_FILE=”/var/log/podman_monitor.log”
ALERT_EMAIL=”admin@fgedu.net.cn”

check_podman_status() {
echo “$(date): Checking podman status…” >> $LOG_FILE
status=$(systemctl status podman | grep -o “Active: active”)
if [ “$status” = “Active: active” ]; then
echo “$(date): Podman status: OK” >> $LOG_FILE
else
echo “$(date): Podman status: FAILED” >> $LOG_FILE
echo “Podman service failed” | mail -s “Podman Alert” $ALERT_EMAIL
fi
}

check_container_status() {
echo “$(date): Checking container status…” >> $LOG_FILE
containers=$(podman ps -q | wc -l)
echo “$(date): Running containers: $containers” >> $LOG_FILE
if [ “$containers” -eq 0 ]; then
echo “$(date): No containers running” >> $LOG_FILE
echo “No containers running” | mail -s “Podman Alert” $ALERT_EMAIL
fi
}

check_storage_usage() {
echo “$(date): Checking storage usage…” >> $LOG_FILE
usage=$(podman system df | grep -A 1 “Images” | tail -n 1 | awk ‘{print $4}’)
echo “$(date): Storage usage: $usage” >> $LOG_FILE
if [[ “$usage” == *”90%”* ]]; then
echo “$(date): Storage usage too high: $usage” >> $LOG_FILE
echo “Storage usage too high: $usage” | mail -s “Podman Alert” $ALERT_EMAIL
fi
}

main() {
check_podman_status
check_container_status
check_storage_usage
}

main

# 添加执行权限
# chmod +x /data/podman/scripts/podman_monitor.sh

# 添加定时任务
# crontab -e
*/15 * * * * /data/podman/scripts/podman_monitor.sh

生产环境建议:定期备份Podman容器和镜像,建议每天执行一次完整备份。监控脚本建议每15分钟执行一次,及时发现并处理问题。恢复操作前务必停止相关容器,避免数据不一致。

通过以上步骤,Podman安装配置、性能优化、升级迁移、备份恢复等内容已全部完成。Podman作为无守护进程的容器引擎,能够高效地管理和运行容器,是容器化部署的重要工具之一。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息