Linux中國

使用 Ansible 配置 Podman 容器

在複雜的 IT 基礎設施中,有許多重複性任務。成功運行這些任務並不容易。運行失敗大多數是人為錯誤引發。在 Ansible 幫助下,你可以通過遠程主機來執行所有任務,這些遠程主機按照 行動手冊 playbook 執行,行動手冊可以根據需要重複使用多次。在本文中,你將學習如何在 Fedora Linux 上安裝、配置 Ansible,以及如何使用它來管理、配置 Podman 容器

Ansible

Ansible 是一個由紅帽贊助的開源基礎設施自動化工具。它可以處理大型基礎設施帶來的所有問題,例如安裝和更新軟體包、備份、確保特定服務持續運行等等。你用 YAML 寫的行動手冊來做這些事。Ansible 行動手冊可以反覆使用,使系統管理員的工作不那麼複雜。行動手冊減少了重複任務,並且可以輕鬆修改。但是我們有很多像 Ansible 一樣的自動化工具,為什麼要用它呢?與其他一些配置管理工具不同,Ansible 是無代理的:你不必在受管節點上安裝任何東西。

Podman

Podman 是一個開源的容器引擎,用於開發、管理和運行容器鏡像。但什麼是容器呢?每當你創建任何新應用程序並將其部署在物理伺服器、雲伺服器或虛擬機上時,你面臨的最常見問題是可移植性和兼容性。這就是容器出現的原因。容器在操作系統級別上進行虛擬化,因此它們只包含所需的庫和應用程序服務。容器的好處包括:

  • 便攜性
  • 隔離性
  • 擴展性
  • 輕量級
  • 快速啟動
  • 更小的磁碟和內存需求

簡而言之:當你為任何應用程序構建容器鏡像時,所有必需的依賴項都被打包到容器中。你現在可以在任何主機操作系統上運行該容器,沒有任何可移植性和兼容性問題。

Podman 的關鍵亮點在於它沒有守護程序,因此不需要 root 許可權來運行容器。你可以藉助 Dockerfile 構建容器鏡像,或者從 Docker Hub、fedoraproject.orgQuay 上拉取鏡像。

為什麼用 Ansible 配置 Podman?

Ansible 提供了一種輕鬆多次運行重複任務的方法。它還為雲提供商(如 AWS、GCP 和 Azure)、容器管理工具(如 Docker 和 Podman)與資料庫管理提供了大量模塊。Ansible 還有一個社區(Ansible Galaxy),在這裡你可以找到大量 Ansible 角色 Roles ,它們由來自世界各地的貢獻者創建。因為這些,Ansible 成為了 DevOps 工程師和系統管理員手中的好工具。

藉助 DevOps,應用程序的開發步伐很快。開發的應用不局限於任意操作系統,這點至關重要。這就是 Podman 出現的地方。

安裝 Ansible

首先,安裝 Ansible:

$ sudo dnf install ansible -y

配置 Ansible

Ansible 需要在受管節點上運行 ssh,所以首先生成一個 密鑰對 Key Pair

$ ssh-keygen

生成密鑰後,將密鑰複製到受管節點。

輸入 yes,然後輸入受管節點的密碼。現在可以遠程訪問受管主機。

為了能夠訪問受管節點,你需要將所有主機名或 IP 地址存儲在清單文件中。默認情況下,這是在 ~/etc/ansible/hosts

這是 庫存 inventory 文件的樣子。方括弧用於將組分配給某些特定的節點。

[group1]
green.example.com
blue.example.com
[group2]
192.168.100.11
192.168.100.10

檢查所有受管節點是否可以到達。

$ ansible all -m ping

你可以看到如下輸出:

[mahesh@fedora new] $ ansible all -m ping
fedora.example.com I SUCCESS {
    "ansibe_facts": {
       "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
[mahesh@fedora new] $

現在創建你的第一個 行動手冊 playbook ,它將在受管節點上安裝 Podman。首先用 .yml 拓展名創建一個任意名稱的文件。

$ vim name_of_playbook.yml

行動手冊應該如下所示。第一個欄位是行動手冊的名稱。主機欄位(hosts)用於提及清單中提到的主機名或組名。become: yes 表示升級許可權,以及任務(tasks)包含所要執行的任務,這裡的名稱(name)指定任務(tasks)名稱,yum 是安裝軟體包的模塊,下面在名稱欄位(name)指定軟體包名稱,在狀態欄位(state)指定安裝或刪除軟體包。

 - name: First playbook
   hosts: fedora.example.com
   become: yes
   tasks:
     - name: Installing podman.
       yum:
         name: podman
         state: present

檢查文件中是否有語法錯誤:

$ ansible-playbook filename --syntax-check

現在運行行動手冊:

$ ansible-playbook filename

你可以看到如下輸出:

[mahesh@fedora new] $ ansible-playbook podman_installation.yml
PLAY [First playbook] *************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
0k: [fedora.example.com]

TASK [Installing podman] ************************************************************************************************
changed: [fedora.example.com]

PLAY RECAP *************************************************************************************************
fedora.example.com    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
[mahesh@fedora new] $

現在創建一個新的行動手冊,從 Docker Hub 中拉取一個鏡像。你將使用 podman_image 模塊從 Docker Hub 中提取版本號為 2-alpine 的 httpd 鏡像。

 - name: Playbook for podman.
    hosts: fedora.example.com
    tasks:
     - name: Pull httpd:2-alpine image from dockerhub.
       podman_image:
         name: docker.io/httpd
         tag: 2-alpine

現在檢查已拉取的鏡像:

[mahesh@fedora new] $ podman images
REPOSITORY                           TAG                  IMAGE ID           CREATED             SIZE
docker.io/library/httpd       2-alpine         fa848876521a    11 days ago        57 MB

[mahesh@fedora new] $

創建一個新的行動手冊來運行 httpd 鏡像。更多信息請查看 podman_container 模塊文檔。

 - name: Playbook for podman.
   hosts: fedora.example.com
   tasks:
     - name: Running httpd image.
       containers.podman.podman_container:
         name: my-first-container
         image:  docker.io/httpd:2-alpine
         state: started

檢查容器運行狀態。

[mahesh@fedora new] $ podman ps
CONTAINER ID        IMAGE    COMMAND   CREATED      STATUS         PORTS         NAMES
45d966eOe207     docker.io/library/httpd:2-alpine    httpd-foreground    13 seconds ago    Up 13 seconds ago       my-first-container

[mahesh@fedora new] $

現在停止已運行的容器,改變狀態,由 started 變為 absent

- name: Stopping httpd container.
  containers.podman.podman_container:
    name: my-first-container
    image: docker.io/httpd:2-alpine
    state: absent

當你執行 podman ps 命令時,你看不到任何運行的容器。

[mahesh@fedora new] $ podman ps
CONTAINER ID    IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES

[mahesh@fedora new] $

podman_container 可以做很多事情,例如重新創建容器、重新啟動容器、檢查容器是否正在運行等等。有關執行這些操作的信息,請參考 文檔

via: https://fedoramagazine.org/using-ansible-to-configure-podman-containers/

作者:mahesh1b 選題:lujun9972 譯者:DCOLIVERSUN 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國