专栏首页linux百科小宇宙容器与云|使用 Ansible 配置 Podman 容器
原创

容器与云|使用 Ansible 配置 Podman 容器

在复杂的IT基础设施中,有许多重复性任务。成功运行这些任务并不容易。运行失败大多数是人为错误引发。在Ansible帮助下,你可以通过远程主机来执行所有任务,这些远程主机按照行动手册playbook执行,行动手册可以根据需要重复使用多次。在本文中,你将学习如何在FedoraLinux上安装、配置Ansible,以及如何使用它来管理、配置Podman容器。

AnsibleAnsible是一个由红帽赞助的开源基础设施自动化工具。它可以处理大型基础设施带来的所有问题,例如安装和更新软件包、备份、确保特定服务持续运行等等。你用YAML写的行动手册来做这些事。Ansible行动手册可以反复使用,使系统管理员的工作不那么复杂。行动手册减少了重复任务,并且可以轻松修改。但是我们有很多像Ansible一样的自动化工具,为什么要用它呢?与其他一些配置管理工具不同,Ansible是无代理的:你不必在受管节点上安装任何东西。

PodmanPodman是一个开源的容器引擎,用于开发、管理和运行容器镜像。但什么是容器呢?每当你创建任何新应用程序并将其部署在物理服务器、云服务器或虚拟机上时,你面临的最常见问题是可移植性和兼容性。这就是容器出现的原因。容器在操作系统级别上进行虚拟化,因此它们只包含所需的库和应用程序服务。容器的好处包括:

便携性隔离性扩展性轻量级快速启动更小的磁盘和内存需求简而言之:当你为任何应用程序构建容器镜像时,所有必需的依赖项都被打包到容器中。你现在可以在任何主机操作系统上运行该容器,没有任何可移植性和兼容性问题。

Podman的关键亮点在于它没有守护程序,因此不需要root权限来运行容器。你可以借助Dockerfile构建容器镜像,或者从DockerHub、fedoraproject.org或Quay上拉取镜像。

为什么用Ansible配置Podman?Ansible提供了一种轻松多次运行重复任务的方法。它还为云提供商(如AWS、GCP和Azure)、容器管理工具(如Docker和Podman)与数据库管理提供了大量模块。Ansible还有一个社区(AnsibleGalaxy),在这里你可以找到大量Ansible角色Roles,它们由来自世界各地的贡献者创建。因为这些,Ansible成为了DevOps工程师和系统管理员手中的好工具。

借助DevOps,应用程序的开发步伐很快。开发的应用不局限于任意操作系统,这点至关重要。这就是Podman出现的地方。

安装Ansible首先,安装Ansible:

$sudodnfinstallansible-y配置AnsibleAnsible需要在受管节点上运行ssh,所以首先生成一个密钥对KeyPair。

$ssh-keygen生成密钥后,将密钥复制到受管节点。

输入yes,然后输入受管节点的密码。现在可以远程访问受管主机。

为了能够访问受管节点,你需要将所有主机名或IP地址存储在清单文件中。默认情况下,这是在~/etc/ansible/hosts。

这是库存inventory文件的样子。方括号用于将组分配给某些特定的节点。

[group1]green.example.comblue.example.com[group2]192.168.100.11192.168.100.10检查所有受管节点是否可以到达。

$ansibleall-mping你可以看到如下输出:

[mahesh@fedoranew]$ansibleall-mpingfedora.example.comISUCCESS{"ansibe_facts":{"discovered_interpreter_python":"/usr/bin/python"},"changed":false,"ping":"pong"}[mahesh@fedoranew]$现在创建你的第一个行动手册playbook,它将在受管节点上安装Podman。首先用.yml拓展名创建一个任意名称的文件。

$vimname_of_playbook.yml行动手册应该如下所示。第一个字段是行动手册的名称。主机字段(hosts)用于提及清单中提到的主机名或组名。become:yes表示升级权限,以及任务(tasks)包含所要执行的任务,这里的名称(name)指定任务(tasks)名称,yum是安装软件包的模块,下面在名称字段(name)指定软件包名称,在状态字段(state)指定安装或删除软件包。

----name:Firstplaybookhosts:fedora.example.combecome:yestasks:-name:Installingpodman.yum:name:podmanstate:present检查文件中是否有语法错误:

$ansible-playbookfilename--syntax-check现在运行行动手册:

$ansible-playbookfilename你可以看到如下输出:

[mahesh@fedoranew]$ansible-playbookpodman_installation.ymlPLAY[Firstplaybook]*************************************************************************************************TASK[GatheringFacts]*************************************************************************************************0k:[fedora.example.com]TASK[Installingpodman]************************************************************************************************changed:[fedora.example.com]PLAYRECAP*************************************************************************************************fedora.example.com:ok2changed1unreachable0failed0skipped0rescued0ignored0[mahesh@fedoranew]$现在创建一个新的行动手册,从DockerHub中拉取一个镜像。你将使用podman_image模块从DockerHub中提取版本号为2-alpine的httpd镜像。

----name:Playbookforpodman.hosts:fedora.example.comtasks:-name:Pullhttpd:2-alpineimagefromdockerhub.podman_image:name:docker.io/httpdtag:2-alpine现在检查已拉取的镜像:

[mahesh@fedoranew]$podmanimagesREPOSITORYTAGIMAGEIDCREATEDSIZEdocker.io/library/httpd2-alpinefa848876521a11daysago57MB[mahesh@fedoranew]$创建一个新的行动手册来运行httpd镜像。更多信息请查看podman_container模块文档。

----name:Playbookforpodman.hosts:fedora.example.comtasks:-name:Runninghttpdimage.containers.podman.podman_container:name:my-first-containerimage:docker.io/httpd:2-alpinestate:started检查容器运行状态。

[mahesh@fedoranew]$podmanpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES45d966eOe207docker.io/library/httpd:2-alpinehttpd-foreground13secondsagoUp13secondsagomy-first-container[mahesh@fedoranew]$现在停止已运行的容器,改变状态,由started变为absent。

-name:Stoppinghttpdcontainer.containers.podman.podman_container:name:my-first-containerimage:docker.io/httpd:2-alpinestate:absent当你执行podmanps命令时,你看不到任何运行的容器。

[mahesh@fedoranew]$podmanpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES[mahesh@fedoranew]$podman_container可以做很多事情,例如重新创建容器、重新启动容器、检查容器是否正在运行等等。有关执行这些操作的信息,请参考文档。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Podman 快速入门 | 对比Docker的研究结论

    今天在某云上新购一台云服务器,发现已经有了 CentOS8.2 官方镜像可选,出于对新鲜事物的好奇,我决定开始采用 CentOS8.2,即使我还没有为它的新特性...

    用户7426861
  • 2019 年 DevOps 实践中最有价值的技能

    2019 年,DevOps 越来越普及,想成为 DevOps 工程师的话需要具备哪些技能呢?

    xcbeyond
  • 在 Podman 中运行一个 Linux 虚拟机 | 容器与云

    第一步是安装 Podman。如果你已经安装了最新版本的 Podman,你可以跳过这个步骤。在我的 Fedora 34 机器上,我用以下方式安装 Podman:

    用户8639654
  • Openshift 3.11的14大新功能详解

    聂健是大魏的红帽同事,本文已获得授权转载,欢迎读者阅读他的技术blog:https://www.cnblogs.com/ericnie/

    魏新宇
  • centos8安装图解(超详细教程)

    CentOS 8官方正式发布了!CentOS 完全遵守 Red Hat 的再发行政策,并且致力与上游产品在功能上完全兼容。CentOS 对组件的修改主要是去除 ...

    砸漏
  • 如何使用Portworx为容器配置云原生存储

    Portworx提供了企业在容器中运行关键任务数据库、大型及快速数据应用程序以及机器学习工作流所需的关键存储功能。

    Portworx
  • 用 kubectl 管理 Kubernetes 的 5 种有用方法

    Kubernetes 可以帮你编排运行有大量容器的软件。Kubernetes 不仅提供工具来管理(或者说 编排)运行的容器,还帮助这些容器根据需要进行扩展。有了...

    用户1880875
  • 用 kubectl 管理 Kubernetes 的 5 种有用方法

    Kubernetes 可以帮你编排运行有大量容器的软件。Kubernetes 不仅提供工具来管理(或者说 编排)运行的容器,还帮助这些容器根据需要进行扩展。有了...

    用户8639654
  • 下一代容器架构已出,Docker何去何处?看看这里的6问6答!!

    我猜很多人一看这个标题已经感觉很懵逼了,什么?下一代容器都出来了,我还没学Docker呢!!!

    云爬虫技术研究笔记
  • 下一代容器架构已出,Docker何去何处?看看这里的6问6答!!

    我猜很多人一看这个标题已经感觉很懵逼了,什么?下一代容器都出来了,我还没学Docker呢!!!

    云爬虫技术研究笔记
  • Docker 的第二次死亡

    我清楚地看到了 Go 和 Docker 这两种技术的生态圈发展过程。让我收获最大的并不是这些技术本身,而是技术的变迁和行业的发展。从中,我看到了非常具体的各种思...

    崔庆才
  • Docker 的第二次死亡

    我清楚地看到了 Go 和 Docker 这两种技术的生态圈发展过程。让我收获最大的并不是这些技术本身,而是技术的变迁和行业的发展。从中,我看到了非常具体的各种思...

    范蠡
  • 再见 Docker,是时候拥抱下一代容器工具了

    Linux 容器是由 Linux 内核所提供的具有特定隔离功能的进程,Linux 容器技术能够让你对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离...

    iMike
  • rootless Podman如何工作?【Programming】

    在上一篇有关用户名称空间和Podman的文章中,我讨论了如何使用Podman命令来启动具有不同用户名称空间的不同容器,从而更好地分隔容器。Podman还利用用户...

    Potato
  • podman初试-和docker对比

    Docker 是一个开源的应用容器引擎,属于 Linux 容器的一种封装,Docker 提供简单易用的容器使用接口,让开发者可以打包他们的应用以及依赖包到一个可...

    张琳兮
  • Podman的崛起,可能正在加速Docker的消亡!!!

    Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和 Docker 类似,不同的是 Podma...

    架构师修行之路
  • K8S 生态周报| Helm v3.3.4 发布

    本周 Helm v3.3.4 发布了, 这个版本是一个 bugfix 版本, 修复了自 Helm v3.3.2 中引入的一些问题。

    Jintao Zhang
  • Docker 大势已去,Podman 万岁

    Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和 Docker 类似,不同的是 Podma...

    米开朗基杨
  • 使用外置的Servlet容器

    用户1112962

扫码关注云+社区

领取腾讯云代金券