自宅ではAnsibleを導入してから、以下OSやソフトウェアに対して作業のコード化や自動化を行ってきた。導入手順などは以下記事を参照。
OS/ソフトウェア | URL |
---|---|
Linux | AnsibleでLinuxサーバの初期設定と単体テストを行う |
Windows Server | AnsibleからWindows Serverに接続するための事前作業 |
vSphere ESXi | AnsibleでESXi上に仮想マシンを構築する |
今回は、Ansibleを使ってKubernetesを操作する手順を記載する。Kubernetesは、Ansibleに標準で導入されているkubernetes.core
というモジュールで操作可能となる。
# ansible-galaxy collection list
Collection Version
----------------------------- -------
~(中略)~
kubernetes.core 2.3.1
~(以下略)~
環境
以下に今回構築する各種ソフトウェアのバージョンを記載する。
- Ansible: 2.13.1
- Kubernetes: v1.27.1
Ansibleコントロールノード構築やLinuxサーバの事前準備の手順は、以下記事を参照いただきたい。
Kubernetesコントロールプレーンに対する準備
AnsibleでKubernetesを操作する際は、コントロールプレーンを経由してKubernetes APIにアクセスする。その際に、コントロールプレーンのノードに対して追加のPythonモジュールが必要となる。
1. pipをインストール
Dockerを利用する際はPythonパッケージのインストールが必要となるため、pipをインストールしておく。
# dnf install python3-pip
2. pipを用いてPythonモジュールをインストール
pipを用いて、以下の通りkubernetes
のPythonモジュールをインストールする。
# python3 -m pip install kubernetes
3. Ansible実行ユーザーにKubernetesクラスタの環境設定ファイルを配置
Kubernetesのコントロールプレーン構築時に、Kubernetes APIへアクセスするために環境設定ファイルをホームディレクトリに配置する作業をするが、Ansible実行ユーザーに対しても同様に実施が必要となる。
私の環境ではansibleuser
となるため、以下の通り配置作業を実施した。
# su - ansibleuser
> mkdir -p $HOME/.kube
> sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
> sudo chown $(id -u):$(id -g) $HOME/.kube/config
実際にAnsibleでKubernetesを操作してみる
動作確認として、AnsibleでKubernetesにNamespaceを作成してみよう。Kubernetesのリソース操作は、kubernetes.core.k8s
というモジュールで実現できる。
以下のシンプルなPlaybookを実行する。
---
- name: Create K8s namespace
gather_facts: true
hosts: t3051kube
vars:
ansible_user: ansibleuser
tasks:
# Namespace作成
- name: Create namespace
kubernetes.core.k8s:
name: test-namespace
api_version: v1
kind: Namespace
state: present
実行結果は以下の通り。
# ansible-playbook -i hosts k8s/create_k8s_namespace.yml
PLAY [Create K8s namespace] ****************************************************************************************
TASK [Gathering Facts] *********************************************************************************************
ok: [t3051kube]
TASK [Create namespace] ********************************************************************************************
changed: [t3051kube]
PLAY RECAP *********************************************************************************************************
t3051kube : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
kubectl
コマンドで確認すると、以下の通りNamespaceが作成されている。
# kubectl get namespace
NAME STATUS AGE
default Active 18d
kube-flannel Active 18d
kube-node-lease Active 18d
kube-public Active 18d
kube-system Active 18d
mynamespace Active 18d
test-namespace Active 2m5s ★Ansibleで作成されたNamespace
以上で、Ansibleを使ってKubernetesを操作する手順は完了となる。今回はNamespaceの作成を例として記載したが、kubernetes.core.k8s
モジュールを使うことで、kubectl
コマンドを用いて行う各種リソースの作成や、マニフェストファイルからのリソースなども実現することができる。
0 件のコメント:
コメントを投稿