kubespray: kubesprayを使用したkubernetesクラスタの構築

以前の記事では、kubesprayの概要や使用のメリットをご紹介しました。本記事では公式ドキュメントを参考にkubesprayを使用したkubernetesの構築例をご紹介します。

目次

構築環境について

今回の例では、workstation1台、masterノード1台、workerノード2台の以下の構成で構築を行います。

マシン名OSIPアドレス概要
master1Rocky Linux 8.6192.168.1.10masterノードとして使用 ※
worker1Rocky Linux 8.6192.168.1.20workerノードとして使用 ※
worker2Rocky Linux 8.6192.168.1.21workerノードとして使用 ※
workstation1Rocky Linux 8.6192.168.1.30kubesprayの操作環境として使用

※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の自由なカスタマイズも可能です。

公式ドキュメントを参考に色々な構築を試してみてください。

  • URLをコピーしました!
目次