このブログは、コンテナのオーケストレーターであるkubernetesについて
自分の知識をまとめることを目的として記事を書いています。
もともとなが~くvSphereのあれやこれやに携わってきたのでvSphereとの類似点や相違点についてもちょっと混ぜていけたりしたらいいかなぁとかも思っています。
今回はkubernetesクラスターの構築についてやっていこうと思います。
まず準備ですが、ESXiやWindowsのようにkubernetesのインストールイメージというものがあるわけではありません。
LinuxOSを用意して、そこにあれやこれやと設定を行いkubernetes用のノードとしていくことになります。
kubernetesクラスターはざっくり言ってしまうと、システムの管理を担当する役割(マスターノード)、ユーザーが作成したPod(コンテナ)を動かす役割(ワーカーノード)の2種類があります。
マスターノードがコントロールプレーン、ワーカーノードがデータプレーンというとイメージが付きやすいでしょうか。
どちらも同じものを入れて構築していくのですが、最後にマスターノードとして構築するコマンドを実行するかマスターノードにワーカーノードとして追加するコマンドを実行するかだけが違います。
では、どういう手順になるかを説明していきましょう。
1.まずLinuxOS
ここは、好きなLinux系のOSを用意してください。
私はCentOSの7を3台(マスターノード1台、ワーカーノード2台)使用して作っています。
2.Dockerの構築をする
kubernetesではコンテナをPodという形で利用しますが、ではそのコンテナを動かすための技術はどうしているのかというと、Dockerを使います。
というわけで、Dockerの構築+kubernetes用の追加構築という流れになります。
2-1 SElinuxの無効化
# setenforce 0
# sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
2-2 firewallの無効化
# systemctl stop firewalld
2-3 Dockerに必要なパッケージ喉乳
# yum install -y yum-utils device-mapper-persistent-data lvm2
2-4 Dockerのyumリポジトリ追加
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
2-5 Dockerの導入
# yum install -y docker-ce-19.03.5-3.el7.x86_64
2-6 Docker起動
# systemctl start docker
# systemctl enable docker
3.kubernetesクラスターの構築
マスターノードとワーカーノードを作成する。
途中まで一緒。
3-1 スワップを停止
# swapoff -a
# sed -i '/swap/s/^/#/' /etc/fstab
3-2 kubernetesを構築するツールkubeadmのyumリポジトリを追加。
# vi /etc/yum.repos.d/kubernetes.repo
以下の内容を記述する
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
3-3 kubeadmを導入する
# yum install -y kubeadm
ここからマスターノードとワーカーノードで作業が変わる。
まずはマスターノードから
3-4 マスターノードとしての構築
# kubeadm init --apiserver-advertise-address=マスターノードのIP --pod-network-cidr=10.244.0.0/16
※--pod-network-cidrはkubernetesで使用する、Pod用の内部ネットワークに
使うものによって変わってくる。
ここでは基本となるflannel用のレンジを指定している。
コマンドの処理が終わると、ワーカーノードを追加するためのコマンド「kubeadm join ~」が
表示されるのでメモ帳などにコピーしておく。
あとから出力させるコマンドもあるが、面倒なのでここでちゃんとメモっておくのがおすすめ。
3-5 kubernetes用コマンドkubectlを使うための処理
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config
これでマスターノードにはなった。
それでは、マスターノードにワーカーノードを追加する
マスターノード構築時に出力されたコマンドを使用する。
# kubeadm join <マスターノードのIPアドレス>:6443 --token <トークン> --discovery-token-ca-cert-hash <証明書ハッシュ>
これでマスターノードとその管理下にワーカーノードが追加された。
各ノードのステータスを見てみよう
# kubectl get node
状態がRedyとなっていないとおもう。
これは、ノードとしては出来上がったけど、内部で使用するPod用のネットワークができていないため。
先ほどの、--pod-network-cidr=10.244.0.0/16はあくまで「Pod用のネットワークとしてこのレンジを使います」
という設定で、実際にそこを使ってPod用のネットワークを実装するところまではやらない。
なので、以下のコマンドを使い、Pod用のネットワークを使えるようにします。
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
再度、以下のコマンドで状態を確認するとRedyとなっている。
# kubectl get node
これでkubernetesクラスターの構築は一応完了です。
次回は、構築した状態のkubernetesはどういう状態になっているのかについて解説します。