なんやかんやと言い訳して触ってなかったk8sにやっと入門しようと思う。

参考資料

Kubernetes Documentation - Production environment

環境

master1台、worker2台の計3台のCentOSをESXi上に構築。
バージョンは全て8.2.2004。軽く調べたけど推奨のOSとか特に出てこなかったので使いなれたCentOSにした。

これを書きながらドキュメント見てたら、kubeadmはCentOS 7しか記載がなくてちょっとびびりはじめている。

Dockerインストール

ドキュメントではコンテナランタイムについていくつか選択肢が提示されている。
Docker, containerd, cri-oの3つ。

コンテナほぼわからない私なので可能な限りハマる要素を削るためにも、多少触ったことのあるDockerを選択することに。
ただ、軽く調べた限りだとcontainerdやcri-oはkubelet-コンテナランタイム間の通信や高レベルランタイム-低レベルランタイム間の通信の規定であるCRIやOCIに準拠していて、通信にオーバーヘッドがかからずリソース使用率が削減されてより軽いっぽい。

全ノードにDockerをインストールしていく。
ドキュメントがyumベースで書かれているけど、特に問題なくできた。

# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum install -y containerd.io docker-ce docker-ce-cli

なお、2020/9/26時点でインストールされた各パッケージのバージョンは下記の通り。

  • containerd.io-1.3.7
  • docker-ce-19.3.13
  • docker-ce-cli-19.3.13
# mkdir /etc/docker
# vi /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
# mkdir -p /etc/systemd/system/docker.service.d
# systemctl daemon-reload
# systemctl restart docker
# systemctl enable docker

k8sのツール群インストール

要件を満すために各ノードで準備を進める。

  • swap off

kubeletが動作するためにはswapがオフでないといけないらしいので、オフにしておく。

# swapoff -a
  • mac addressとproduct_uuid確認

MACアドレスとproduct_uuidがそれぞれのノードでユニークである必要もあるとのことなので、一応みておく。

# ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:df:b4:50 brd ff:ff:ff:ff:ff:ff
# cat /sys/class/dmi/id/product_uuid
9ea54d56-9995-6b19-a176-015024dfb450

めんどくさいから1台だけ。全部違った。

  • ポート解放

通信に必要なポートを解放していく。

## master nodeで
# firewall-cmd --add-port 6443/tcp --permanent
success
# firewall-cmd --add-port 2379-2380/tcp --permanent
success
# firewall-cmd --add-port 10250-10252/tcp --permanent
success
# systemctl restart firewalld
## worker nodeで
# firewall-cmd --add-port 10250/tcp --permanent
success
# firewall-cmd --add-port 30000-32767/tcp --permanent
success
# systemctl restart firewalld
  • kubeadm, kubelet, kubectlインストール

ツールインストールしてく。

# vi /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
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
exclude=kubelet kubeadm kubectl
# setenforce 0
# vi /etc/selinux/config
SELINUX=permissive
# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# systemctl enable --now kubelet

ここまでできたら、いよいよクラスタを作っていく。

んだけど続きは次回。。。