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を実行する環境に、以下の手順でツールをインストールします
- ルートユーザーに切り替え
sudo su -
- Python3.9の導入
yum -y install python39
- pip3.9の導入
pip3.9 install ruamel-yaml
- gitの導入
yum -y install git
注釈
すでに導入済みのコマンドは手順を省略して構いません。
HOST設定¶
続いて、作成先の情報をHOSTSに登録します。
※本説明では、3台のKubernetesクラスターを構築する例となっております。
vi /etc/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 の作成¶
ssh-keygen -t rsa
作成したSSHキー(
/root/.ssh/id_ras.pub
)は、作成するクラスタに配置します。Kubesprayインストール¶
Kubesprayのインストールは git clone を用いてインストールします。
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 フォワーディングの有効化¶
- ルートユーザーに切り替え
sudo su -
/etc/sysctl.conf
の書き換えnet.ipv4.ip_forward=1 の行を追加します。vi /etc/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
- ファイアーウォールのインストール・無効化
dnf install firewalld disable firewalld stop firewalld status firewalld
- SELinux の無効化現状の確認
getenforce
Disabled となっていれば、以下は不要SELINUX=disabled オプションを設定vi /etc/selinux/config
# 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
設定後、システム再起動します。reboot
Disabled となっているか確認します。getenforce
2.3.3. Kubernetesインストール¶
Ansible実行環境にて、以下の手順に従って用意したKubernetesクラスター環境へKubernetesをインストールします。
hosts.ymlの作成¶
Kubernetesクラスターは、
hosts.yml
の内容を元に作成されます。はじめに、
hosts.yml
を以下の手順で作成します。- ルートユーザーに切り替え
sudo su -
- git clone したKubesprayフォルダにカレントを変更
cd kubespray/
- サンプルのinventoryファイルをコピー
cp -rfp inventory/sample inventory/k8s_cluster
- 使用するKubernetesクラスター環境のIPの変数設定
declare -a IPS=(192.168.1.1 192.168.1.2 192.168.1.3)
hosts.yml
の作成CONFIG_FILE=inventory/k8s_cluster/hosts.yml python3.9 contrib/inventory_builder/inventory.py ${IPS[@]}
hosts.yml
の確認cat inventory/k8s_cluster/hosts.yml
hosts.ymlの編集¶
作成された
hosts.yml
を構成したいKubernetesクラスターの情報に置き換えます。本説明では、各Kubernetesクラスターがコントロールプレーン、ワーカーノードを兼ねた設定で作成します。
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をインストールします。
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クラスター環境に接続して以下のコマンドでコントロールプレーンやワーカーノードを確認します。
kubectl get nodes
以下のような結果が表示されていれば、作成完了です。
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