1. 事前準備
クラスタ本体、およびそれをサポートするマシンを用意します。
登場人物
本稿で使うマシンとその役割は下記です。
| 名前 | 概要 |
|---|---|
| jumpbox | 各種ノードへのモジュールの配布、リモートでのコマンド実行 |
| kube-c01 | コントロールプレーンおよびルーティング |
| kube-w01 | ワーカーノード1 |
| kube-w02 | ワーカーノード2 |
疎通設定
各種マシン同士が疎通を取れるようにセットアップをします。
マシンデータベースの作成
以降各種ノードへの設定を反映させる際に参照する、マシンのデータベースをテキストファイルとして作成します。スキーマは下記です。
{IPV4_ADDRESS} {FQDN} {HOSTNAME} {POD_SUBNET}
IPV4_ADDRESS: マシン自体のIPアドレスFQDN: TLS証明書の検証およびノードの識別に用いる完全修飾ドメイン名HOSTNAME: マシン自体のホスト名POD_SUBNET: Podに割り振るIPアドレスのサブネット
$ cat machines.txt
XXX.XXX.XXX.XXX kube-c01.kubernetes.local kube-c01
XXX.XXX.XXX.XXX kube-w01.kubernetes.local kube-w01 10.200.0.0/24
XXX.XXX.XXX.XXX kube-w02.kubernetes.local kube-w02 10.200.1.0/24
パスワードレスでのSSH接続
jumpboxから各種サーバにSSHで接続できるようにします。既に設定されている場合はスキップしてください。また、パスワードでのログインを許可していない場合は事前に許可をしておいてください。
SSHキーを作成します。
ssh-keygen
SSH公開鍵を各マシンにコピーします。
while read IP FQDN HOST SUBNET; do
ssh-copy-id nob@${IP}
done < machines.txt
SSH公開鍵アクセスが正しく機能していることを確認します。
while read IP FQDN HOST SUBNET; do
ssh -n nob@${IP} "hostname"
done < machines.txt
パスワードレスでのsudo実行
jumpboxからリモートでコマンド実行をする際にパスワードレスでsudoが実行できるようにします。
ssh -t nob@`grep kube-c01 machines.txt | cut -d " " -f 1` "echo 'nob ALL=(ALL:ALL) NOPASSWD: ALL' | sudo tee /etc/sudoers.d/nob >/dev/null"
ssh -t nob@`grep kube-w01 machines.txt | cut -d " " -f 1` "echo 'nob ALL=(ALL:ALL) NOPASSWD: ALL' | sudo tee /etc/sudoers.d/nob >/dev/null"
ssh -t nob@`grep kube-w02 machines.txt | cut -d " " -f 1` "echo 'nob ALL=(ALL:ALL) NOPASSWD: ALL' | sudo tee /etc/sudoers.d/nob >/dev/null"
ホスト名の設定
jumpboxからリモートでコマンドを実行する際に指定するホスト名をkube-c01、kube-w01、kube-w02に割り当てます。
while read IP FQDN HOST SUBNET; do
ssh -n nob@${IP} "sudo sed -i 's/^127.0.1.1.*/127.0.1.1\t${FQDN} ${HOST}/' /etc/hosts"
ssh -n nob@${IP} "sudo hostnamectl set-hostname ${HOST}"
ssh -n nob@${IP} "sudo systemctl restart systemd-hostnamed"
done < machines.txt
ホスト名が反映されていることを確認します。
while read IP FQDN HOST SUBNET; do
ssh -n nob@${IP} "hostname --fqdn"
done < machines.txt
ホスト検索テーブルの設定
jumpboxからホスト名で疎通が取れるように/etc/hostsを設定します。
echo "" > hosts
echo "# From Kubernetes The Hard Way" >> hosts
while read IP FQDN HOST SUBNET; do
echo ${IP} ${FQDN} ${HOST} >> hosts
done < machines.txt
hostsファイルを確認します。
cat hosts
$ cat hosts
# From Kubernetes The Hard Way
192.168.151.49 kube-c01.kubernetes.local kube-c01
192.168.151.28 kube-w01.kubernetes.local kube-w01
192.168.151.54 kube-w02.kubernetes.local kube-w02
hostsの内容を/etc/hostsに反映させます。
sudo tee -a /etc/hosts < hosts
/etc/hostsの内容を確認します。
cat /etc/hosts
$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 jumpbox
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# From Kubernetes The Hard Way
192.168.151.49 kube-c01.kubernetes.local kube-c01
192.168.151.28 kube-w01.kubernetes.local kube-w01
192.168.151.54 kube-w02.kubernetes.local kube-w02
ホスト名で名前解決ができることを確認します。
for HOST in kube-c01 kube-w01 kube-w02; do
ssh nob@${HOST} "hostname"
done
kube-c01
kube-w01
kube-w02
各種ノードについても同様にhostsの内容を/etc/hostsに反映させます。
while read IP FQDN HOST SUBNET; do
scp hosts nob@${HOST}:~/
ssh -n \
nob@${HOST} "sudo tee -a /etc/hosts < hosts"
done < machines.txt
次: Jumpboxの設定