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

#はじめに
[前回](https://qiita.com/ussvgr/items/f7c18919c56fbca76094)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イメージのビルド
リポジトリをクローンして、

```bash
$ 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句を追加します。

```patch

--- 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のレジストリを使ってみました。

```bash
$ 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を[こちら](https://gitlab.com/ussvgr/ansible-galaxy-k8s/-/blob/master/ansible-galaxy.yml)に置きました。
ansible-galaxyというNamespaceを作成し、その配下に必要なリソースを作成するようにしています。

```bash
$ kubectl apply -f ansible-galaxy.yml
```
としてデプロイ、

```bash
$ kubectl logs -f galaxy-0 -c galaxy -n ansible-galaxy 
```
で進捗を確認し、

```bash
Starting tmux...
```
となればOKです。

#管理者ユーザー作成
以下コマンドで作成します。

```bash
$ 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.
```

あとの使い方は[前回](https://qiita.com/ussvgr/items/f7c18919c56fbca76094)と同様です。