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

news2025/1/12 10:53:21

 微思|  

 微思|  红帽RHCE试听课程:linux系统下,用这个命令可以提高60%的工作效率


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

Kubernetes YAML概述

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

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

有关Kubernetes YAML与Podman集成的更多信息,请参阅"How to run Kubernetes workloads in systemd with Podman"。还可以参考podman-kube-play的手册页,其中包含有关Podman支持哪些Kubernetes YAML字段的信息。

环境概述

在我的实验室环境中,我有一个控制节点系统名为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。

图片

我想在所有四个受控节点上部署一个容器,并使用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控制台。

创建Kubernetes YAML文件

首先,在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

创建清单文件

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

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

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,具体操作请参考文档。

创建脚本

最后,需要一个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、凭据和清单。

运行脚本

现在,一切都准备就绪。


rhel9-controlnode.example.com主机(已安装了rhel-system-rolesansible-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...

验证配置

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

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

图片

在搜索框中键入“httpd”。

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

图片

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

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

图片

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

图片

接下来,点击 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中放置的内容。

总结

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

1

作者:Brian Smith,红帽资深产品经理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/917545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JMeter 接口自动化测试:从入门到精通的完全指南

JMeter 是一个开源的负载测试工具,它可以模拟多种协议和应用程序的负载,包括 HTTP、FTP、SMTP、JMS、SOAP 和 JDBC 等。在进行接口自动化测试时,使用 JMeter 可以帮助我们快速地构建测试用例,模拟多种场景,发现接口的性…

只出现一次的数字——力扣136

class Solution {public:int singleNumber(vector<int>& nums) {int res=0

Linux 可重入、异步信号安全和线程安全

可重入函数 当一个被捕获的信号被一个进程处理时&#xff0c;进程执行的普通的指令序列会被一个信号处理器暂时地中断。它首先执行该信号处理程序中的指令。如果从信号处理程序返回&#xff08;例如没有调用exit或longjmp&#xff09;&#xff0c;则继续执行在捕获到信号时进程…

k8s节点pod驱逐、污点标记

一、设置污点&#xff0c;禁止pod被调度到节点上 kubectl cordon k8s-node-145 设置完成后&#xff0c;可以看到该节点附带了 SchedulingDisabled 的标记 二、驱逐节点上运行的pod到其他节点 kubectl drain --ignore-daemonsets --delete-emptydir-data k8s-node-145 显示被驱逐…

【ThingJS | 3D可视化】开发框架,一站式数字孪生

博主&#xff1a;_LJaXi Or 東方幻想郷 专栏&#xff1a; 数字孪生 | 3D可视化框架 开发工具&#xff1a;ThingJS在线开发工具 ThingJs 低代码开发 ThingJs 低代码开发注意点场景效果配置层级层级常用API实例化 Thing&#xff0c;加载场景load 加载函数ThingJs 层级关系图查找层…

带你走进 字节跳动 消息队列

区别于#创作活动那一篇文章&#xff0c;这篇文章有我自己的重点内容颜色标记等注释&#xff0c;有注释的参加不了那个活动&#xff0c;所以发了两篇&#xff0c;不久之后那篇文章将会删除 消息队列前世今生 1.1 案例一&#xff1a; 系统崩溃 首先大家跟着我想象一下下面的这个的…

(2023)Linux安装pytorch并使用pycharm远程编译运行

&#xff08;2023&#xff09;Linux安装pytorch并使用pycharm远程编译运行 安装miniconda 这部分参考我这篇博客的前半部分Linux服务器上通过miniconda安装R&#xff08;2022&#xff09;_miniconda 安装r_Dream of Grass的博客-CSDN博客 创建环境 创建一个叫pytorch的环境…

Nodejs-nrm:快速切换npm源 / npm官方源和其他自定义源之间切换

一、理解 Nodejs nrm Nodejs nrm 是一个管理 npm 源的工具。由于 npm 在国内的速度较慢&#xff0c;很多开发者会使用淘宝的 npm 镜像源&#xff0c;但是也会遇到一些问题&#xff0c;例如某些包在淘宝镜像源中不存在&#xff0c;或者淘宝镜像源本身也会有问题。 Nodejs nrm …

【C++ 学习 ⑯】- 继承(上)

目录 一、继承的概念和定义 1.1 - 概念 1.2 - 定义 二、继承时的对象内存模型 三、向上转型和向下转型 四、继承时的名字遮蔽问题 4.1 - 有成员变量遮蔽时的内存分布 4.2 - 重名的基类成员函数和派生类成员函数不构成重载 一、继承的概念和定义 1.1 - 概念 C 中的继承…

java八股文面试[java基础]——浅拷贝和深拷贝

自验证&#xff1a;创建Class Student两个类&#xff0c; Student中含有Class对象 public class Class implements Cloneable {public String getName() {return name;}public void setName(String name) {this.name name;}private String name;public Class(String name) {t…

无涯教程-PHP - IntlChar类

在PHP7中&#xff0c;添加了一个新的 IntlChar 类&#xff0c;该类试图公开其他ICU函数。此类定义了许多静态方法和常量&#xff0c;可用于操作unicode字符。使用此类之前&#xff0c;您需要先安装 Intl 扩展名。 <?phpprintf(%x, IntlChar::CODEPOINT_MAX);print (IntlCh…

构建智慧停车场:4G DTU实现无线数据高速传输

物联网技术的快速发展使得各种设备能够实现互联互通&#xff0c;无线网络技术给我们的日常生活带来了极大的便利。其中的网络技术如无线WiFi及4G网络已经成为了物联网应用中不可或缺的组成部分。而在工业领域中对4G无线路由器的应用是非常广泛的&#xff0c;人们通过4G工业路由…

python中 * 的用法,超详细教程

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 python中 * 是非常常见的一个运算符&#xff0c;它主要有以下几个功能&#xff1a; 乘法运算符&#xff1b; 函数形参表示可变参数&#xff1b; 函数实参代表tuple&#xff1b; 序列解包为tuple&#xff1b; zip解包运算&…

知识蒸馏Demo,非常详细,适合入门

文章来自&#xff1a;Ai浩的“知识蒸馏实战&#xff1a;使用CoatNet蒸馏ResNet”&#xff0c;文章地址为&#xff1a;知识蒸馏实战&#xff1a;使用CoatNet蒸馏ResNet_知识蒸馏实例_AI浩的博客-CSDN博客 感谢作者&#xff01;&#xff01;&#xff01; 摘要 知识蒸馏&#xf…

nvm安装使用教程

文章目录 下载配置安装最新稳定版 node安装指定版本查看版本切换版本删除版本 常见问题安装node后 显示拒绝访问的问题使用cnpm会报错的问题降低cnpm版本npm镜像 下载 NVM for Windows 下载地址&#xff1a;https://link.juejin.cn/?targethttps%3A%2F%2Fgithub.com%2Fcoreyb…

《动手学深度学习》-19卷积层

沐神版《动手学深度学习》学习笔记&#xff0c;记录学习过程&#xff0c;详细的内容请大家购买书籍查阅。 b站视频链接 开源教程链接 卷积 使用一个12M像素的相机采集图片&#xff0c;因为是RGB图片所以有36M元素。 使用MLP来做分类会遇到的问题&#xff1a; 参数太大&#…

goland 中的调试器 -- Evaluate

今天一个好朋友 找到我&#xff0c;问我关于goland中Evaluate 小计算器的使用方式&#xff0c;说实话&#xff0c;我在此之前也没用过这个东西&#xff0c;然后我就找一些相关文档&#xff0c;但是这类文档少的可怜&#xff0c;所以我就稍微研究一下&#xff0c;找找材料&#…

【附安装包】Vero visi2021安装教程

软件介绍 Vero visi是世界领先的CAD/CAM解决方案&#xff0c;又简称为visi&#xff0c;由多个模块组成&#xff0c;包括VISI Modelling、VISI Analysis、VISI Mould、VISI Flow、VISI Electrode、VISI Progress、VISI Multi-Slides、VISI Machining 2D、VISI PEPS-Wire、WorkX…

《操作系统真象还原》学习笔记:第七章 中断

由于 CPU 获知了计算机中发生的某些事&#xff0c;CPU 暂停正在执行的程序&#xff0c;转而去执行处理该事件的程序&#xff0c;当这段程序执行完毕后&#xff0c;CPU 继续执行刚才的程序。整个过程称为中断处理&#xff0c;也称为中断。 把中断按事件来源分类&#xff0c;来自…

nginx:正向代理与反向代理

所谓代理服务器&#xff0c;就是位于发起请求的客户端与原始服务器端之间的一台跳板服务器&#xff0c; 正向代理可以隐藏客户端&#xff1a;想要实现正向代理&#xff0c;得配置一台转发请求的跳板服务器&#xff0c;同时客户端还得配置跳板服务器的代理地址。 我的电脑访问这…