Skip to content

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の設定