2. Kubernetes クラスター

2.1. はじめに

本説明では、Exastro IT Automation のデプロイ先となるKubernetesクラスターを、Kubesprayを用いて構築する方法について説明します。

2.2. 前提条件

  • Kubesprayを実行する Ansible実行環境

  • Kubernetesクラスターの構築先の環境(本説明では OS:kbd:Red Hat Enterprise Linux 8 を使用した手順)

2.3. Kubernetesクラスター構築

本説明は、公式サイトの手順を参考に実施した手順となっており、Kubernetesのバージョンアップ等により、実際の手順とは異なる場合があります。

公式サイト: https://kubernetes.io/ja/docs/setup/production-environment/tools/kubespray/

2.3.1. Ansible実行環境での準備

ツールのインストール

Kubesprayを実行する環境に、以下の手順でツールをインストールします
  1. ルートユーザーに切り替え
    リスト 2.1 コマンド
    sudo su -
    
  2. Python3.9の導入
    リスト 2.2 コマンド
    yum -y install python39
    
  3. pip3.9の導入
    リスト 2.3 コマンド
    pip3.9 install ruamel-yaml
    
  4. gitの導入
    リスト 2.4 コマンド
    yum -y install git
    

注釈

すでに導入済みのコマンドは手順を省略して構いません。

HOST設定

続いて、作成先の情報をHOSTSに登録します。
※本説明では、3台のKubernetesクラスターを構築する例となっております。
リスト 2.5 コマンド
vi /etc/hosts
リスト 2.6 hosts
# Kubernetesクラスターの情報を追加
192.168.1.1 ha-conf-k8s-01.cluster.local ha-conf-k8s-01
192.168.1.2 ha-conf-k8s-02.cluster.local ha-conf-k8s-02
192.168.1.3 ha-conf-k8s-03.cluster.local ha-conf-k8s-03

注釈

クラスタ名やIPアドレスは、使用する環境に合わせて変更してください。

SSH key の作成

リスト 2.7 コマンド
ssh-keygen -t rsa
作成したSSHキー( /root/.ssh/id_ras.pub )は、作成するクラスタに配置します。

Kubesprayインストール

Kubesprayのインストールは git clone を用いてインストールします。
リスト 2.8 コマンド
git clone https://github.com/kubernetes-sigs/kubespray.git -b release-2.23

cd kubespray/

pip3.9 install -r requirements.txt

Successfully installed が最後に表示されれば、Kubespray のインストールは完了となります。

2.3.2. Kubernetesクラスター環境用の前準備

Kubernetes クラスター環境すべてで以下の手順を実施します。

IPv4 フォワーディングの有効化

  1. ルートユーザーに切り替え
    リスト 2.9 コマンド
    sudo su -
    
  2. /etc/sysctl.conf の書き換え
    net.ipv4.ip_forward=1 の行を追加します。
    リスト 2.10 コマンド
    vi /etc/sysctl.conf
    
    リスト 2.11 sysctl.conf
    # sysctl settings are defined through files in
    # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
    #
    # Vendors settings live in /usr/lib/sysctl.d/.
    # To override a whole file, create a new file with the same in
    # /etc/sysctl.d/ and put new settings there. To override
    # only specific settings, add a file with a lexically later
    # name in /etc/sysctl.d/ and put new settings there.
    #
    # For more information, see sysctl.conf(5) and sysctl.d(5).
    +net.ipv4.ip_forward=1
    
  3. ファイアーウォールのインストール・無効化
    リスト 2.12 コマンド
    dnf install firewalld
    
    disable firewalld
    
    stop firewalld
    
    status firewalld
    
  4. SELinux の無効化
    現状の確認
    リスト 2.13 コマンド
    getenforce
    
    Disabled となっていれば、以下は不要
    SELINUX=disabled オプションを設定
    リスト 2.14 コマンド
    vi /etc/selinux/config
    
    リスト 2.15 sysctl.conf
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #       enforcing - SELinux security policy is enforced.
    #       permissive - SELinux prints warnings instead of enforcing.
    #       disabled - No SELinux policy is loaded.
    +SELINUX=disabled
    # SELINUXTYPE= can take one of these two values:
    #       targeted - Targeted processes are protected,
    #       mls - Multi Level Security protection.
    SELINUXTYPE=targeted
    
    設定後、システム再起動します。
    リスト 2.16 コマンド
    reboot
    
    Disabled となっているか確認します。
    リスト 2.17 コマンド
    getenforce
    

2.3.3. Kubernetesインストール

Ansible実行環境にて、以下の手順に従って用意したKubernetesクラスター環境へKubernetesをインストールします。

hosts.ymlの作成

Kubernetesクラスターは、hosts.yml の内容を元に作成されます。
はじめに、hosts.yml を以下の手順で作成します。
  1. ルートユーザーに切り替え
    リスト 2.18 コマンド
    sudo su -
    
  2. git clone したKubesprayフォルダにカレントを変更
    リスト 2.19 コマンド
    cd kubespray/
    
  3. サンプルのinventoryファイルをコピー
    リスト 2.20 コマンド
    cp -rfp inventory/sample inventory/k8s_cluster
    
  4. 使用するKubernetesクラスター環境のIPの変数設定
    リスト 2.21 コマンド
    declare -a IPS=(192.168.1.1 192.168.1.2 192.168.1.3)
    
  5. hosts.yml の作成

    リスト 2.22 コマンド
    CONFIG_FILE=inventory/k8s_cluster/hosts.yml python3.9 contrib/inventory_builder/inventory.py ${IPS[@]}
    
  6. hosts.yml の確認

    リスト 2.23 コマンド
    cat inventory/k8s_cluster/hosts.yml
    

hosts.ymlの編集

作成された hosts.yml を構成したいKubernetesクラスターの情報に置き換えます。
本説明では、各Kubernetesクラスターがコントロールプレーン、ワーカーノードを兼ねた設定で作成します。
リスト 2.24 hosts.yml
 1all:
 2  hosts:
 3    v2ha-k8s-node1:
 4      ansible_host: 192.168.1.1
 5      ip: 192.168.1.1
 6      access_ip: 192.168.1.1
 7    v2ha-k8s-node2:
 8      ansible_host: 192.168.1.2
 9      ip: 192.168.1.2
10      access_ip: 192.168.1.2
11    v2ha-k8s-node3:
12      ansible_host: 192.168.1.3
13      ip: 192.168.1.3
14      access_ip: 192.168.1.3
15  children:
16    kube_control_plane:
17      hosts:
18        v2ha-k8s-node1:
19        v2ha-k8s-node2:
20        v2ha-k8s-node3:
21    kube_node:
22      hosts:
23        v2ha-k8s-node1:
24        v2ha-k8s-node2:
25        v2ha-k8s-node3:
26    etcd:
27      hosts:
28        v2ha-k8s-node1:
29        v2ha-k8s-node2:
30        v2ha-k8s-node3:
31    k8s_cluster:
32      children:
33        kube_control_plane:
34        kube_node:
35    calico_rr:
36      hosts: {}

proxy設定

proxyの設定が必要な場合は、以下のファイルを編集する必要があります。
  • inventory/k8s_cluster/group_vars/all/all.yml

Kubernetesインストール

Kubesparayを実行して、Kubernetesクラスター環境へKubernetesをインストールします。
リスト 2.25 コマンド
ansible-playbook -i inventory/k8s_cluster/hosts.yml --become --become-user=root cluster.yml --private-key=~/.ssh/id_rsa -e "download_retries=10" | tee ~/kubespray_$(date +%Y%m%d%H%M).log
環境やクラスター数にもよりますが、20~30分ほどかかります。

Kubernetes環境の確認

作成されましたら、実際に作成されたKubernetesクラスター環境に接続して以下のコマンドでコントロールプレーンやワーカーノードを確認します。
リスト 2.26 コマンド
kubectl get nodes
以下のような結果が表示されていれば、作成完了です。
リスト 2.27 結果
NAME             STATUS   ROLES           AGE     VERSION
v2ha-k8s-node1   Ready    control-plane   8m48s   v1.27.7
v2ha-k8s-node2   Ready    control-plane   7m28s   v1.27.7
v2ha-k8s-node3   Ready    control-plane   7m17s   v1.27.7