お疲れ様です。
今回は、KubernetesのService Account 作成削除する Ansible Playbook を紹介していきたいと思います。
Playbook は 主に2種類の設定ファイル(インベントリ、プレイブック)から構成することが多いですが、今回紹介するのは1つの Playbook(yamlファイル) で完結するものになります。
Ansible Playbook とは
Ansible Playbook は、指定したインベントリーやホストのグループに対して自動的に実行されるタスクのリストです。1 つまたは複数の Ansible タスクを組み合わせて play (特定のホストにマッピングされたタスクの順序付けられたグループ) を作ることができ、タスクは書かれた順序で実行されます。Playbook には 1 つ以上の play を含めることができます。
タスクはモジュール単位で実行されます。各モジュールは Playbook の中で特定のタスクを実行します。モジュールには、タスクを実行するタイミングと場所、そしてタスクを実行するユーザーを決定するメタデータが含まれています。数千もの Ansible モジュールがあり、次のようなあらゆる種類の IT タスクを実行します。
今回の記事では、Ansible の Playbook について書いていますが、Ansible を知らない方やPlaybook について不明点がある方に向けて、Ansible の基本的な使い方なども紹介していますので、以下の記事を参考にしてみてください。
◆Ansibleを利用してnginxをインストール・起動してみる
https://cloud5.jp/saitou-ansible-nginx-install/
処理概要
以下は処理概要を示した図になります。
Playbook の詳細
Service Account の作成削除を行う Playbook の詳細です。Vars で定義された変数を調整することで、同じ Playbook を何度も再利用することができます。
---
- name: Manage ServiceAccount with IAM Role
hosts: localhost
gather_facts: no
vars:
serviceaccount_name: playbook-serviceaccount
serviceaccount_namespace: test-playbook-serviceaccount
serviceaccount_state: present
eks_role_arn: arn:aws:iam::XXXXXXXXXXXX:role/AdministratorsAccessRole
kubeconfig: /home/test/.kube/config
tasks:
- name: Create ServiceAccount
k8s:
name: "{{ serviceaccount_name }}"
namespace: "{{ serviceaccount_namespace }}"
kind: ServiceAccount
state: "{{ serviceaccount_state }}"
kubeconfig: "{{ kubeconfig }}"
register: serviceaccount_result
when: serviceaccount_state == 'present'
- name: Add IAM Role Annotation to ServiceAccount
k8s:
state: present
name: "{{ serviceaccount_name }}"
namespace: "{{ serviceaccount_namespace }}"
kind: ServiceAccount
definition:
apiVersion: v1
kind: ServiceAccount
metadata:
name: "{{ serviceaccount_name }}"
annotations:
eks.amazonaws.com/role-arn: "{{ eks_role_arn }}"
kubeconfig: "{{ kubeconfig }}"
when: serviceaccount_state == 'present'
- name: Delete ServiceAccount
k8s:
name: "{{ serviceaccount_name }}"
namespace: "{{ serviceaccount_namespace }}"
kind: ServiceAccount
state: absent
kubeconfig: "{{ kubeconfig }}"
when: serviceaccount_state == 'absent'
8行目 : serviceaccount_state: Service Accountを作成する場合は ‘present’ を指定し、削除する場合は ‘absent’ を指定します
14行目 : k8s は Ansible のKubernetesモジュールを使用してKubernetesリソースを管理するためのモジュールです。Red Hat がサポートしているので利用しています
21.37行目 : タスクを実行する条件を指定しています。serviceaccount_stateが’present’(存在する)場合にのみタスクが実行されるように設定しています
46行目 : タスクを実行する条件を指定しています。serviceaccount_stateが’absent’(存在しない)場合にのみタスクが実行されるように設定しています
まとめ
Ansible Playbook を使用して、Kubernetes上の Service Account の作成と削除を管理する方法を紹介しました。
Ansible は自動化に優れたツールであり Playbook を使えば、Kubernetes クラスター内のリソースを効率的に管理できます。
Playbook は、複数のフォルダ構成を使用して実行することができ、効率的に再利用することができます。例えば、共通の役割(roles)を持つ Playbook や、異なる環境用の変数(vars)を持つ複数の Playbook を作成することができます。
Ansibleの柔軟性を活かして、より効率的にリソースを管理できるよう、複数のフォルダ構成を使った実行方法を試してみてください。
関連記事
◆ Ansibleを利用してnginxをインストール・起動してみる
https://cloud5.jp/saitou-ansible-nginx-install/
◆ EKSクラスター内のPODからkubectlコマンドを使用してS3コマンド実行
https://cloud5.jp/mk-kubectl-eks-pod-s3/