Contents
はじめに
本記事は OpenShift Advent Calendar 2022 の24日目の記事になります。
本記事では、Ansibleを使ってOpenShiftを操作してみようと思います。
OpenShiftを操作するコレクションは以下になります。
環境
項目 | バージョン |
---|---|
RHEL | 8.6 |
OCP | 4.11.7 |
Ansible Automation Platform | 2.2.1 |
Ansible Core | 2.13.4 |
Python | 3.9.13 |
community.okd | 2.2.0 |
kubernetes.core | 2.3.2 |
トークン取得
今回はkubeadminでAPIを操作するためのトークンを取得します。
1 2 3 4 |
[user@homelab-1921681092 ~]$ oc login -u kubeadmin https://OCPのIPまたはホスト名:6443 [user@homelab-1921681092 ~]$ oc whoami --show-token sha256~xxxxxxxxxxxxxx |
Ansibleで実行
AnsibleでOCPを操作してみます。
環境構築
Pythonのvenvを作成します。
1 2 3 4 |
[root@homelab-1921681089 ~]# python3 -m venv venv [root@homelab-1921681089 ~]# . venv/bin/activate (venv) [root@homelab-1921681089 ~]# |
ansible-coreをインストールします。
1 2 |
(venv) [root@homelab-1921681089 ~]# pip install ansible-core==2.13.4 |
コレクションを動作させるために必要なライブラリをインストールします。
1 2 |
(venv) [root@homelab-1921681089 ~]# pip install kubernetes |
OCPを操作するためのコレクションをインストールします。
1 2 3 4 5 6 7 8 9 |
(venv) [root@homelab-1921681089 ~]# ansible-galaxy collection install community.okd:=2.2.0 (venv) [root@homelab-1921681089 ~]# ansible-galaxy collection list # /root/.ansible/collections/ansible_collections Collection Version --------------- ------- community.okd 2.2.0 kubernetes.core 2.3.2 |
これで操作する環境は整いました。
クラスタ情報の取得
まずは、きちんとOCPにアクセスできて情報が取得できるかを簡単に確認してみます。
以下のPlaybookを作成して実行してみましょう。
1 2 |
(venv) [root@homelab-1921681089 ~]# vi playbook.yml |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
--- - hosts: localhost gather_facts: false tasks: - name: Gather cluster info kubernetes.core.k8s_cluster_info: host: https://OCPのIPまたはホスト名:6443 api_key: sha256~xxxxxxxxxxxxxx # 取得したトークン validate_certs: false register: registry_info - name: Display cluster info debug: msg: "{{ registry_info }}" |
以下のように問題無く実行できるか確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
(venv) [root@homelab-1921681089 ~]# ansible-playbook playbook.yml (snip) PLAY [localhost] *************************************************************** TASK [Gather cluster info] ***************************************************** ok: [localhost] TASK [Display cluster info] **************************************************** ok: [localhost] => { "msg": { "apis": { "admissionregistration.k8s.io/v1": { "MutatingWebhookConfiguration": { "categories": [ (snip) |
Deploymentを作成
今度は Deployment
を作成してみたいと思います。
以下のPlaybookを作成して実行してみましょう。
1 2 |
(venv) [root@homelab-1921681089 ~]# vi playbook.yml |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
--- - hosts: localhost gather_facts: false tasks: - name: Sample task community.okd.k8s: host: https://OCPのIPまたはホスト名:6443 api_key: sha256~xxxxxxxxxxxxxx # 取得したトークン validate_certs: false state: present definition: apiVersion: apps/v1 kind: Deployment metadata: namespace: default name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 |
以下のように問題無く実行できるか確認します。
1 2 3 4 5 6 7 8 9 10 11 |
(venv) [root@homelab-1921681089 ~]# ansible-playbook playbook.yml (snip) PLAY [localhost] ***************************************************************************************************************************************************************************************************************************************************** TASK [Sample task] ********************************************************************************************************************************************************************************************************************************************************** changed: [localhost] PLAY RECAP *********************************************************************************************************************************************************************************************************************************************************** localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
nginx-deployment
が作成された確認します。
1 2 3 4 |
[user@homelab-1921681092 ~]$ oc get deployment --namespace default NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 3/3 3 3 53s |
Ansible Automation Platformで実行
Ansible Automation Platform(AAP)でOCPを操作してみます。
プロジェクト登録
今回は以下のリポジトリを登録します。
プロジェクト
を選択して 追加
をクリックします。
名前
を入力して ソースコントロールタイプ
を Git
にし ソースコントロールのURL
を入力して 保存
をクリックします。
最終ジョブステータス
が 成功
になったことを確認します。
認証設定
認証情報
を選択して 追加
をクリックします。
名前
を入力して 認証タイプ
を OpenShift または Kubernetes API Bearer トークン
にし OpenShiftまたは Kubernetes APIエンドポイント
と API認証ベアラートークン
を入力します。
今回はSSLの検証はしないので チェック
を外して 保存
をクリックします。
テンプレート作成
テンプレート
を選択して 追加
をクリックして 新規ジョブテンプレートの追加
をクリックします。
名前
を入力して インベントリー
はデフォルトのものを使用するので Demo Inventory
を選択し プロジェクト
は Sample Project
を選択します。
Playbook
は playbooks/playbook.yml
を選択し 認証情報
は登録した OCP認証
を選択後に 保存
をクリックします。
テンプレート実行
起動
をクリックしてジョブテンプレートを実行します。
次のように成功すれば問題ありません。
Execution Environment作成
上記ではプロジェクト同期時に必要なコレクションを自動でインストールしました。
もし、インターネットにAAPが繋がらない場合は以下の対処法があります。
- コレクションを同梱したExecution Environment(EE)をビルドする
- Private Automation Hubを構築してコレクションを登録し、そこからインストールできるようにする
今回は前者のEEをビルドしてみます。
EEのビルドは root
で実行してください。
まずは、EEをビルドするための ansible-builder
をAAPホストにインスト−ルします。
1 2 3 |
[root@homelab-1921681089 ~]# subscription-manager repos --enable ansible-automation-platform-2.2-for-rhel-8-x86_64-rpms [root@homelab-1921681089 ~]# dnf -y install ansible-builder |
リポジトリをクローンします。
1 2 |
[root@homelab-1921681089 ~]# git clone https://github.com/sky-joker/advent-calendar-20221224.git |
community.okd
を同梱したEEをビルドします。
1 2 3 |
[root@homelab-1921681089 ~]# cd advent-calendar-20221224/execution-environment/ [root@homelab-1921681089 execution-environment]# ansible-builder build -t ocp-ee:latest |
ビルドしたEEをPrivate Automation Hubに登録して使う方法もありますが、今回は手動で awx
ユーザーにインポートします。
作成したEEを save
して awx
ユーザーのディレクトリ配下に移動します。
1 2 3 4 |
[root@homelab-1921681089 execution-environment]# podman save ocp-ee:latest -o ocp-ee.tar [root@homelab-1921681089 execution-environment]# chown awx.awx ocp-ee.tar [root@homelab-1921681089 execution-environment]# mv ocp-ee.tar /var/lib/awx/ |
ocp-ee
をロードします。
1 2 3 4 5 6 7 8 9 |
[root@homelab-1921681089 execution-environment]# su - awx [awx@homelab-1921681089 ~]$ [awx@homelab-1921681089 ~]$ podman load -i ocp-ee.tar [awx@homelab-1921681089 ~]$ rm -f ocp-ee.tar [awx@homelab-1921681089 ~]$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE localhost/ocp-ee latest ed5476cec74d 12 minutes ago 1.94 GB (snip) |
ビルドしたEEをAAPに登録します。
実行環境
を選択し 追加
をクリックします。
名前
を入力し イメージ
に作成した localhost/ocp-ee:latest
を指定します。
プル
は既にローカルにロードしているため 実行前にコンテナーをプルしない
を選択して 保存
をクリックします。
後はプロジェクトやジョブテンプレートの 実行環境
で登録したEEを選択してください。(以下は例)
最後に
Ansibleを使ったOCP操作はあまりケースが無いかと思いますが、興味があれば是非試してみてください 🙂
Happy Automation!!