ローカルAnsible GalaxyをKubernetes上へデプロイ


はじめに

前回Docker ComposeでAnsible Galaxyをローカル環境に立ち上げましたが、ボリュームの永続化には対応しておらず、あくまで試用にしか使えませんでした。
今回はボリュームの永続化がてら、Docker ComposeからKubernetes(k3s)環境へ置き換えをします。

環境

Ubuntu Server 20.04
k3s v1.18.2+k3s1
Ansible Galaxy 3.4.4

コンテナイメージビルド用にMacOSX+Docker Desktopも使います。

Dockerイメージのビルド

リポジトリをクローンして、

$ git clone https://github.com/ansible/galaxy.git
$ cd galaxy/
$ git checkout refs/tags/v3.4.4

Docker ComposeのYAMLファイルを見てみます。

scripts/docker/dev/compose.yml
---
version: '3'

services:
  galaxy:
    image: galaxy-dev:latest
    volumes:
      - ${PWD}:/galaxy:z
    ports:
      - '8000:8000'
    depends_on:
      - postgres
      - influxdb
      - rabbitmq
      - redis

  postgres:
    image: postgres:9.5
    ports:
      - '2345:5432'
    environment:
      - POSTGRES_DB=galaxy
      - POSTGRES_USER=galaxy
      - POSTGRES_PASSWORD=galaxy

  influxdb:
    image: influxdb:latest
    ports:
      - '8086:8086'
    environment:
      - INFLUXDB_REPORTING_DISABLED=true
      - INFLUXDB_DB=galaxy
      - INFLUXDB_ADMIN_USER=admin
      - INFLUXDB_ADMIN_PASSWORD=admin
      - INFLUXDB_WRITE_USER=galaxy
      - INFLUXDB_WRITE_USER_PASSWORD=galaxy

  rabbitmq:
    image: rabbitmq:latest
    environment:
      - RABBITMQ_DEFAULT_USER=galaxy
      - RABBITMQ_DEFAULT_PASS=galaxy
      - RABBITMQ_DEFAULT_VHOST=galaxy

  redis:
    image: redis:latest

「${PWD}:/galaxy:z」の部分でリポジトリ全体を/galaxyにマウントさせています。
開発時の効率を考慮してのものと思われますが、このディレクトリ自体は永続化させる必要がなさそうなのでコンテナイメージに最初から含めてしまいましょう。

Dockerfileのパスはscripts/docker/dev/Dockerfileです。
以下のようにCOPY句を追加します。


--- scripts/docker/dev/Dockerfile.org   2020-06-14 20:32:54.000000000 +0900
+++ scripts/docker/dev/Dockerfile   2020-06-11 18:02:23.000000000 +0900
@@ -58,6 +58,8 @@

 COPY scripts/docker/galaxy-importer.cfg /etc/galaxy-importer/galaxy-importer.cfg

+COPY ./ /galaxy/
+
 WORKDIR /galaxy
 ENTRYPOINT ["/entrypoint"]
 CMD ["start", "tmux"]

編集したらイメージをビルド。

$ make dev/build

完了すると、以下のように「galaxy-dev:latest」というイメージが出来上がっています。

$ docker images      
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
galaxy-dev          latest              100b9daef703        7 minutes ago       970MB

k3sクラスタが読み出し可能なコンテナレジストリにPushしておきましょう。
今回はGitlabのレジストリを使ってみました。

$ docker tag galaxy-dev:latest registry.gitlab.com/ussvgr/ansible-galaxy-k8s/galaxy-dev:3.4.4
$ docker push registry.gitlab.com/ussvgr/ansible-galaxy-k8s/galaxy-dev:3.4.4

k8s用YAML作成

Docker Compose用のYAMLファイルからk8s用のYAMLを作成していきます。
いろいろ触ってみた結果、ファイルの永続化が必要な対象は以下だと思われます。

  • galaxy-devコンテナの/var/lib/galaxy
  • PostgreSQLの/var/lib/postgresql/data
  • InfluxDBの/var/lib/influxdb

これらをPVCで永続化したYAMLをこちらに置きました。
ansible-galaxyというNamespaceを作成し、その配下に必要なリソースを作成するようにしています。

$ kubectl apply -f ansible-galaxy.yml

としてデプロイ、

$ kubectl logs -f galaxy-0 -c galaxy -n ansible-galaxy 

で進捗を確認し、

Starting tmux...

となればOKです。

管理者ユーザー作成

以下コマンドで作成します。

$ kubectl exec -it galaxy-0 -c galaxy -n ansible-galaxy -- /usr/share/galaxy/venv/bin/python ./manage.py createsuperuser
Username: <管理ユーザー名>
Email address: <Githubに登録している以外のメールアドレス>
Password: <パスワード>
Password (again): <パスワード再入力>
Superuser created successfully.

あとの使い方は前回と同様です。