誉天教育,武汉誉天,誉天ICT认证培训.png/

Datapass

数通
当前位置:首页 > 誉天学堂 > 运维 > 必备技巧:使用RHEL系统角色让Podman自动化

必备技巧:使用RHEL系统角色让Podman自动化

  • 2023/08/07

自动化有助于提高效率、节省时间并提高一致性。所以红帽企业Linux(RHEL)包含了许多让任务自动化的功能。RHEL系统角色是一组Ansible内容,提供一致的工作流程和简化手动任务的执行。使用Podman系统角色,可以在多个RHEL系统上批量部署无根容器,在本地RHEL工作站上测试容器,并利用systemd保持容器运行。


1.png


要使用Podman系统角色部署容器,首先必须指定容器的属性。这包括使用哪个容器镜像、暴露哪些网络端口、持久化存储等。


Podman系统角色并未创建新的格式来定义这些信息,而是使用了Kubernetes YAML。许多人已经熟悉Kubernetes YAML,并使用它可以方便在Podman和基于Kubernetes的解决方案(如红帽OpenShift)之间过渡。


2.png


在我的实验室环境中,我有一个控制节点系统名为rhel9-controlnode.example.com,以及四个受控节点:


rhel9-server1.example.com

rhel9-server2.example.com

rhel8-server1.example.com

rhel8-server2.example.com


其中三个服务器运行RHEL 9.2,两个服务器运行RHEL 8.8。

640.png

我想在所有四个受控节点上部署一个容器,并使用systemd进行管理,以便在启动时自动启动,具体配置如下:


  • 使用红帽ubi8/httpd-24容器镜像,其中包含Apache HTTP服务器

  • 使用标准用户账户运行无根容器

  • 将主机上的端口8080映射到容器内的端口8080,并通过防火墙访问,以便可以远程访问

  • 将主机上的/mnt/home/brian/ubi-httpd-24-html挂载到容器内的/var/www/html


此外,我希望在这四个受控节点上安装RHEL Web控制台(包括Web控制台的Podman组件),以便可以轻松验证容器是否正确部署。我将使用Cockpit系统角色来自动化部署RHEL Web控制台。


3.png


首先,在rhel9-controlnode.example.com主机上定义Kubernetes YAML文件。将文件保存为ubi8-httpd-24.yml,并将以下内容粘贴到文件中:

apiVersion: v1
kind: Pod
metadata:
  name: ubi8-httpd-24
spec:
  containers:
   - name: ubi8-httpd-24 
   image: registry.access.redhat.com/ubi8/httpd-24 
   ports:
     - containerPort: 8080  
     hostPort: 8080 
   volumeMounts:
     - mountPath: /var/www/html:Z  
     name: ubi8-httpd-24-html
  volumes:
     - name: ubi8-httpd-24-html 
     hostPath:  
      path: /home/brian/ubi8-httpd-24-html


4.png


接下来,在rhel9-controlnode.example.com主机上创建名为inventory.yml的清单文件。此文件列出了要配置的四个受控节点,并定义了角色变量,指定了Podman和Cockpit系统角色应该实施的配置。以下是一个示例inventory.yml文件:


all:
hosts:
rhel9-server1.example.com:
rhel9-server2.example.com:
rhel8-server1.example.com:
rhel8-server2.example.com:

vars:

#podman system role variables:
podman_firewall:
- port: 8080/tcp 
state: enabled
podman_create_host_directories:

true
podman_host_directories: 
"/home/brian/ubi8-httpd-24-html":  
owner: brian 
group: brian
mode: "0755"
podman_kube_specs:

- state: started
run_as_user: brian
run_as_group: brian

kube_file_src: ubi8-httpd-24.yml

#cockpit
system role variables:
cockpit_packages:
- cockpit-podman
cockpit_manage_firewall: true


在清单文件的顶部,列出了四个受控节点的主机名。


vars部分定义了Podman系统角色的变量。podman_firewall变量指定主机防火墙上打开了8080/tcp端口(Kubernetes YAML文件指定主机端口8080映射到容器端口8080)。


podman_create_host_directories确保角色创建了/home/brian/ubi8-httpd-24-html目录,并按照Kubernetes YAML文件中指定的brian:brian所有者和组以及0755权限进行设置。


podman_kube_specs变量指定容器以brian:brian用户和组运行,并使用ubi8-httpd-24.yml文件作为Kubernetes YAML的源。


在文件底部,有Cockpit系统角色的变量。cockpit_packages变量确保安装了cockpit-podman软件包,而cockpit_manage_firewall变量确保RHEL web控制台端口(9090/tcp)在防火墙中打开。


如果使用Ansible自动化控制器作为控制节点,则可以使用SCM项目或使用awx-manage实用程序将此清单导入到Red Hat Ansible Automation Platform。


5.png


最后,需要一个Ansible脚本来调用RHEL系统角色。在rhel9-controlnode.example.com主机上将此文件命名为system_roles.yml。

- name: Run podman RHEL system role
  hosts: all
  roles:
   - redhat.rhel_system_roles.podman
- name: Run cockpit RHEL system role
  hosts
: all
  roles
:
   - redhat.rhel_system_roles.cockpit


这是一个简单的脚本,只调用了Podman系统角色和Cockpit系统角色。


如果您使用Ansible自动化控制器作为控制节点,可以将这个Ansible脚本导入到R红帽Ansible自动化平台中。通常使用Git仓库来存储Ansible Playbooks。Ansible 自动化平台将自动化存储为称为作业(Jobs)的单元,其中包含Playbook、凭据和清单。

6.png


现在,一切都准备就绪。


从rhel9-controlnode.example.com主机(已安装了rhel-system-roles和ansible-core软件包)使用ansible-playbook命令来运行Playbook。使用-b标志提示Ansible升级权限,并使用-i选项指定inventory.yml作为Ansible清单。

$ ansible-playbook -i inventory.yml -b system_roles.yml

如果使用Ansible自动化控制器作为控制节点,可以从自动化控制器的Web界面启动作业。


验证脚本是否成功完成:

PLAY RECAP *******************************************************
rhel8-server1.example.com : ok=68 unreachable=0 failed=0 skipped=54...
rhel8-server2.example.com : ok=68 unreachable=0 failed=0 skipped=54...
rhel9-server1.example.com : ok=68 unreachable=0 failed=0 skipped=54...
rhel9-server2.example.com : ok=68 unreachable=0 failed=0 skipped=54...


7.png


接下来,验证Podman系统角色是否按预期部署了配置。每个主机应该具有相同的配置,所以选择一个进行抽查,在Web浏览器中打开主机的9090端口(RHEL web控制台的默认端口)并登录。


首先,点击Web控制台菜单中的“Services”。然后,在右上角,点击“User”以查看用户级别的systemd服务。

640 (1).png

在搜索框中键入“httpd”。


Podman系统角色为ubi8-httpd-24容器创建了一个新的用户级别的systemd服务,该容器正在运行。

640 (2).png


点击服务名称,查看有关该服务的更多信息。


可以通过在 Web 控制台菜单中查找 Podman 容器来验证 cockpit-podman 包是否已安装。


640 (3).png


点击菜单中的 "Podman 容器",然后按需点击 "启动 Podman" 按钮。ub8-httpd-24 容器将在系统上使用标准用户帐户(在我的例子中是 brian)运行。主机上的端口 8080 被映射到容器内的端口 8080,并且主机目录 /home/brian/ubi8-httpd-24-html 被绑定挂载到容器内的 /var/www/html 目录。


640 (4).png


接下来,点击 Web 控制台菜单中的 "Terminal "。切换到 /home/brian/ubi8-httpd-24-html 目录,然后创建一个 index.html 文件。


[rhel9-server1]$cd /home/brian/ubi8-httpd-24-html/
[rhel9-server1]$ echo 'Hello world!' > index.html


为了测试这个,连接到 rhel9-server1.example.com 主机的 8080 端口。将看到 index.html 文件的内容。


$ curl rhel9-server1.example.com:8080
Hello world!


作为最后的测试,验证systemd服务是否在重启rhel9-server1.example.com主机后自动启动容器。在重启后,容器将自动启动,并且仍然能够通过端口8080连接到rhel9-server1.example.com,以访问在index.html中放置的内容。

8.png


Podman系统角色帮助自动配置RHEL环境中的Podman,实现更一致且规模化的管理。这并不是红帽提供的唯一系统角色。还有许多其他RHEL系统角色可以帮助自动化RHEL环境的其他重要方面。要了解更多角色,请查阅可用的RHEL系统角色列表,并开始以更高效、一致和自动化的方式管理RHEL服务器。

返回列表
上一篇:
【誉天红帽入门指南】第十期:网络管理
下一篇:
懂技术,更精彩!Linux进程查找与信号机制
免费试听
姓名
电话
城市
咨询课程