2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AnsibleをPodmanコンテナで管理

Last updated at Posted at 2023-05-10

はじめに

本記事では、構成管理ツールであるAnsibleをPodmanコンテナ環境で動かすための手順について説明します。
Ansible実行環境のコンテナ化のメリットは、依存性をパッケージ化しているため異なるクラウドやVMなどの様々な環境にデプロイして実行できることです。

コンテナ構築作業の流れ

1. ホストサーバにAnsibleコンテナを作成する。
2. ホストサーバ上の/etc/ansibleをコンテナにマウントする。
3. Ansibleコンテナを起動する。

・構成図
1.png

コンテナをインストール

RHEL8以降はDockerの代替であるPodmanをホストサーバにインストールします。

# dnf -y install podman

SELinux無効

# sed -i s/SELINUX=enforcing/SELINUX=disabled/ /etc/selinux/config
# setenforce 0

Dockerfile作成

コンテナを構成するパッケージ導入と各種設定を行います。
RHEL8でサポートされているPython 3.9を選択し、作業効率のために一部必須ではない設定も実施しています。

# vi Dockerfile

★★★以下を追記する★★★

# RHEL8ベースのイメージを使用
FROM registry.access.redhat.com/ubi8/ubi:latest

# 必要なパッケージをインストールするためにEPELリポジトリを追加
RUN dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y
# EPELリポジトリをインストール
RUN dnf install -y epel-release
# 必要なパッケージをインストール
RUN dnf install -y python39 python39-pip python39-devel openssh-clients openssl-devel gcc sshpass unzip iputils
# インストール後のキャッシュをクリア
RUN dnf clean all

# AnsibleおよびWindows関連のパッケージをインストール
RUN pip3.9 install --upgrade pip && \
    pip3.9 install ansible==8.4.0 pywinrm

# ロケールを日本語に設定
RUN dnf -y install glibc-locale-source glibc-langpack-en && \
    dnf clean all && \
    rm -rf /var/cache/dnf/*
RUN localedef -f UTF-8 -i ja_JP ja_JP.utf8
RUN echo 'LANG="ja_JP.UTF-8"' >  /etc/locale.conf

# タイムゾーンをJSTに設定
RUN echo 'ZONE="Asia/Tokyo"' > /etc/sysconfig/clock
RUN rm -f /etc/localtime
RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# コンテナの実行ユーザーをrootに設定
USER root

# デフォルトの作業ディレクトリを設定
WORKDIR /ansible

# 親サーバのディレクトリをマウントするためのディレクトリを作成
VOLUME ["/ansible"]

# エイリアスを設定 (llコマンド)
RUN echo "alias ll='ls -l'" >> /etc/profile.d/aliases.sh

# カスタムプロンプトの設定
ENV PS1="[\u@\h ~]# "

# コンテナを実行する際のコマンド (bashシェルを実行)
CMD ["/bin/bash"]

Dockerfileを元にコンテナイメージをビルド

構文:podman build -t コンテナイメージ名 .

# podman build -t ansible-container .

正常に作成されていれば、以下のように表示される。
Successfully tagged localhost/ansible-container:latest

Ansible作業用ディレクトリ作成

# mkdir /etc/ansible

コンテナ起動

# podman run -it --rm --hostname ansible-container -v /etc/ansible:/ansible ansible-container

podman run --it 時のオプション
--rm:コンテナ終了時に自動でコンテナ削除
--hostname:コンテナ内のホスト名を定義
-v:ホストの任意のパスをコンテナの任意のパスにマウント
末尾:起動するコンテナイメージ名

コンテナ内のAnsibleバージョン確認

[root@ansible-container ~]# pip freeze | grep ansible

正常にインストールされていれば、以下のように表示される。
ansible==8.4.0
ansible-core==2.13.8

Ansibleをコンテナ化するための設定は完了です。

必要なAnsible資材(rolesやansible.cfg、インベントリファイル等)をホストサーバの/etc/ansibleに配置してください。その後Ansibleコンテナを起動してタスクを実行してください。

コンテナを別環境で起動する方法

ビルド済みコンテナは別環境に移動させて起動できます。

コンテナをイメージ化

構文:「podman save -o 出力パス コンテナイメージ名」

# podman save -o ansible-container.tar localhost/ansible-container

出力したファイルを別環境に転送

# scp ansible-container.tar root@xxx.xxx.xxx.xxx:~/

別環境でファイルからコンテナイメージ復元

構文:「podman load -i ファイルパス」

# podman load -i ansible-container.tar
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?