はじめに
トレンドをキャッチアップするべくk8sの学習をしたいと思い立ちましたが、何から始めればよい物か分かりませんでした。という訳でマルチノードクラスタを構築してみたいと思います。
構成
- マスターノード1台
- 172.31.40.247
- 6443/TCP
- ワーカーノード
- 172.31.41.82
- CPUは2コア以上必要
マスターノード構築
ホスト名変更とSELinuxを無効にします。
# hostnamectl set-hostname 'k8s-master'
# vi /etc/hosts
172.31.32.125 k8s-master
172.31.33.81 worker-node1
# setenforce 0
k8sリポジトリを追加します。
# 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
Dockerとk8sをインストールします。
# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum makecache fast
# yum remove docker docker-common docker-selinux docker-engine
# yum install docker-ce -y
# yum install kubeadm -y
# systemctl start docker && systemctl enable docker
# systemctl start kubelet && systemctl enable kubelet
※この時点ではkubeletは起動エラーで構いません
クラスタ初期化。
# swapoff -a
# kubeadm init
後で使うので出力結果をコピーします。
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
※この下の一文をコピーして下さい
また出力結果の通りにディレクトリを作成します。
# mkdir -p $HOME/.kube
# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# chown $(id -u):$(id -g) $HOME/.kube/config
続いてk8sネットワークの作成を行います。CNI(ContainerNetworkInterface)にはWeave Netを使用します。
# export kubever=$(kubectl version | base64 | tr -d '\n')
# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"
CNIとはコンテナをネットワークに接続する技術の事ですが、マルチノードのコンテナ間通信には実は様々な要件があります。例えば全てのコンテナは他のコンテナとNAT無しで通信出来るなど……これらを解決してくれるものがCNIプラグインです。正直分かっていない事も多いので分かり次第補足・追記して参ります。
これでマスターノードのクラスタ構築は完了です。
ワーカーノード構築
ホスト名変更とSELinuxを無効にします。
# hostnamectl set-hostname 'worker-node1'
# vi /etc/hosts
172.31.32.125 k8s-master
172.31.33.81 worker-node1
# setenforce 0
k8sリポジトリを追加します。
# 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
Dockerとk8sをインストールします。
# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum makecache fast
# yum remove docker docker-common docker-selinux docker-engine
# yum install docker-ce -y
# yum install kubeadm -y
# systemctl start docker && systemctl enable docker
# systemctl start kubelet && systemctl enable kubelet
※この時点ではkubeletは起動エラーで構いません
ワーカーノードをクラスタに参加させる。先程コピーしたコマンドを実行して下さい。マスターノードからクラスタにノードが加わった事が分かります。
# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 84m v1.18.0
worker-node1 Ready <none> 3m24s v1.18.0
以上でクラスタ構築は完了です。
終わりに
k8sを使ってみて今思う事は、便利だけれども正直まだ分かっていない事が多いという事です。コンポーネントが多く一つ一つにも役割が多いので把握するのには骨が折れます。AWSを勉強し始めた感覚に近いです。なので引き続きk8sの学習及び備忘録に取り組んでいけたらと思います。