以前の記事では、kubesprayの概要や使用のメリットをご紹介しました。本記事では公式ドキュメントを参考にkubesprayを使用したkubernetesの構築例をご紹介します。
構築環境について
今回の例では、workstation1台、masterノード1台、workerノード2台の以下の構成で構築を行います。
マシン名 | OS | IPアドレス | 概要 |
master1 | Rocky Linux 8.6 | 192.168.1.10 | masterノードとして使用 ※ |
worker1 | Rocky Linux 8.6 | 192.168.1.20 | workerノードとして使用 ※ |
worker2 | Rocky Linux 8.6 | 192.168.1.21 | workerノードとして使用 ※ |
workstation1 | Rocky Linux 8.6 | 192.168.1.30 | kubesprayの操作環境として使用 |
※kubernetesのインストールには、メモリ2GB以上、2CPU以上のスペックが必要
構築前準備作業
①各マシンにて、selinux、ファイヤーウォール、スワップ領域の3つを無効化
# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# systemctl stop firewalld
# systemctl disable firewalld
# sed -i -e "/swap/d" /etc/fstab
②workstationにて、各マシンの名前解決のため、/etc/hostsにマシン名を追加
# cat >> /etc/hosts << EOF
192.168.1.10 master1
192.168.1.20 worker1
192.168.1.21 worker2
EOF
③workstationにて、各マシンへのSSH公開鍵認証の設定
※ssh-keygenでの鍵作成はデフォルトのパスワード無しで設定
# ssh-keygen
# ssh-copy-id 192.168.1.10
# ssh-copy-id 192.168.1.20
# ssh-copy-id 192.168.1.21
kubesprayのインストール
公式ドキュメントを参考にworkstation1にて、下記コマンドを実行し、kubesprayのインストールを行います。
①Pythonインストール
# yum install -y python39
※kubesprayで使用されるAnsibleのバージョンによって、必要なPythonのバージョンも異なります。
今回使用するkubesprayのバージョン2.23.0には、Python3.9以上のバージョンが必要。
②kubesprayをGitHubリポジトリからクローン
# git clone https://github.com/kubernetes-sigs/kubespray.git -b v2.23.0
※ -bオプションでインストールするバージョン指定が可能。
今回は2023年11月時点での最新バージョンである2.23.0をクローンします。
③パッケージのインストール
# cd kubespray
# pip3 install -r requirements.txt
③設定で使用するサンプルファイルのコピー
# cp -rfp inventory/sample inventory/mycluster
④kubernetesをインストールするNodeのIPアドレスを登録
# declare -a IPS=(192.168.1.10 192.168.1.20 192.168.1.21)
⑤kubesprayの設定ファイルであるhosts.ymlの生成
# CONFIG_FILE=inventory/mycluster/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
⑥hosts.ymlを今回の構成に合うように編集
# cat inventory/mycluster/hosts.yml
all:
hosts:
master1: ※1
ansible_host: 192.168.20.10
ip: 192.168.20.10
access_ip: 192.168.20.10
worker1: ※1
ansible_host: 192.168.20.20
ip: 192.168.20.20
access_ip: 192.168.20.20
worker2: ※1
ansible_host: 192.168.20.21
ip: 192.168.20.21
access_ip: 192.168.20.21
children:
kube_control_plane:
hosts:
master1: ※2
kube_node:
hosts:
worker1: ※2
worker2: ※2
etcd:
hosts:
master1: ※3
k8s_cluster:
children:
kube_control_plane:
kube_node:
calico_rr:
hosts: {}
※1 kubernetesをインストールする各マシンの名前を記述
※2 kube_control_plane:内でmasterノードのマシン名、kube_node:内でworkerノードのマシン名を記述
※3 etcd:内でetcdをインストールするノードを指定
kubesprayの実行
workstation1にて、下記コマンドを実行し、kubesprayを実行します。
①ansible-playbookの実行
# ansible-playbook -i inventory/mycluster/hosts.yml --become --become-user=root cluster.yml
上記コマンド実行で、kubernetesの構築が開始されます。(構築には環境によって、数十分かかる場合もあります。)
PLAY RECAP *********************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
master1 : ok=711 changed=16 unreachable=0 failed=0 skipped=1267 rescued=0 ignored=1
worker1 : ok=491 changed=3 unreachable=0 failed=0 skipped=770 rescued=0 ignored=1
worker2 : ok=491 changed=3 unreachable=0 failed=0 skipped=769 rescued=0 ignored=1
実行結果より、PLAY RECAP内のunreachableとfailedが0となっていれば構築完了です。
②クラスタ環境の確認
# ssh master1
# kubectl get node
NAME STATUS ROLES AGE VERSION
master1 Ready control-plane 5h44m v1.27.5
worker1 Ready <none> 5h43m v1.27.5
worker2 Ready <none> 5h43m v1.27.5
コントロールプレーンであるmaster1へsshでログインすれば、kubectlコマンドの操作が可能になります。
まとめ
この記事では、kubesprayを使用したkubernetesの構築例をご紹介しました。
今回の例とは別にkubesprayで使用されているプレイブックの編集を行えばkubernetesの自由なカスタマイズも可能です。
公式ドキュメントを参考に色々な構築を試してみてください。