Service Account を作成削除する Ansible Playbook

お疲れ様です。
 
 

今回は、KubernetesのService Account 作成削除する Ansible Playbook を紹介していきたいと思います。
 
Playbook は 主に2種類の設定ファイル(インベントリ、プレイブック)から構成することが多いですが、今回紹介するのは1つの Playbook(yamlファイル) で完結するものになります。
 

Ansible Playbook とは

Ansible Playbook は、指定したインベントリーやホストのグループに対して自動的に実行されるタスクのリストです。1 つまたは複数の Ansible タスクを組み合わせて play (特定のホストにマッピングされたタスクの順序付けられたグループ) を作ることができ、タスクは書かれた順序で実行されます。Playbook には 1 つ以上の play を含めることができます。

タスクはモジュール単位で実行されます。各モジュールは Playbook の中で特定のタスクを実行します。モジュールには、タスクを実行するタイミングと場所、そしてタスクを実行するユーザーを決定するメタデータが含まれています。数千もの Ansible モジュールがあり、次のようなあらゆる種類の IT タスクを実行します。

引用 Red Hat 公式サイト
 

 

今回の記事では、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/

Last modified: 2024-02-16

Author