動作確認したバージョン
- Oracle Linux 8.3
- Linux Kernel 5.4.17-2102.200.13
- Kubernetes 1.21.0
- Calico v3.18.1
忙しい人向け
Kubernetesコミュニティ提供のkubeadm公式ドキュメントのCentOS 8向けのセットアップ方法と同じように設定すれば環境の準備はできる。
以下、Kubernetes 1.20.0時点のセットアップ方法を記述している。
Oracle Linuxのダウンロード
次からダウンロードする。
リポジトリーの有効化
containerdパッケージはDocker Engineのリポジトリーのパッケージを利用する(EL8には標準リポジトリーにDockerがないため。これはRHEL8やCentOS8と一緒)。 本来Oracle LinuxはDocker EngineのサポートOSではないが、CentOS向けパッケージを利用することにする。Kubernetesにおけるdockershimを用いたDockerのサポートは間も無く終了なので、containerdを推奨。
$ sudo yum install -y yum-utils $ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
containerdのインストール
$ sudo yum intall containerd
ランタイム由来の設定の適用
ランタイムを入れるときの事前設定方法は公式の設定に従う。
https://kubernetes.io/docs/setup/production-environment/container-runtimes/
$ sudo mkdir -p /etc/containerd $ containerd config default | sudo tee /etc/containerd/config.toml
「Using the systemd cgroup driver」で述べられている設定を忘れずに。インデント注意。
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] ... [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true
設定変更後にサービスを起動。
$ sudo systemctl enable --now containerd
kubeadmツールなどの導入
kubeadmツールなどのインストールは、公式に従うと最新のバージョンをセットアップできる。
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
ファイアウォールの設定
共通
2行目は実際のネットワークセグメントを許可する。
$ sudo firewall-cmd --permanent --add-port=10250/tcp #kubelet API $ sudo firewall-cmd --zone trusted --add-source 192.168.0.0/24 --permanent #物理ネットワークセグメント許可 $ sudo firewall-cmd --zone=public --add-masquerade $ sudo firewall-cmd --permanent --zone=public --add-masquerade $ sudo firewall-cmd --reload
master
2行目はCNIで実際指定するネットワークセグメントを許可する。
$ sudo firewall-cmd --permanent --add-port=6443/tcp #Kubernetes API server $ sudo firewall-cmd --zone trusted --add-source 10.244.0.0/16 --permanent $ sudo firewall-cmd --reload
worker
2行目はCNIで実際指定するネットワークセグメントを許可する。
$ sudo firewall-cmd --permanent --add-port=30000-32767/tcp #NodePort Services $ sudo firewall-cmd --zone trusted --add-source 10.244.0.0/16 --permanent $ sudo firewall-cmd --reload
Calicoを使う場合は以下のポートなども許可。シングルノードでは特に設定しないでも良い。
https://docs.projectcalico.org/getting-started/kubernetes/requirements
kubeadmツールを使ったクラスター作成
クラスターを作成するにはkubeadm init
コマンドを使う。
$ sudo kubeadm init --kubernetes-version 1.21.0 --pod-network-cidr=10.244.0.0/16 --control-plane-endpoint=<Public IP Address>
シングルクラスターにする(もしくはmasterでもPodスケジュールしたい)場合は以下を実施
$ kubectl taint nodes --all node-role.kubernetes.io/master-
Workerを別に用意する場合は以下を実施して出力されるコマンドをノードで実行
$ kubeadm token create --print-join-command kubeadm join 10.211.55.44:6443 --token ....
CNIを導入。様々なネットワークアドオンが存在する。Calicoの場合は
https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises
構築後のクラスターの状態(シングルクラスターの場合)
$ kubectl get nodes NAME STATUS ROLES AGE VERSION localhost.localdomain Ready control-plane,master 58m v1.21.0 $ kubectl get pods -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system calico-kube-controllers-6d8ccdbf46-pxr84 1/1 Running 0 57m kube-system calico-node-vj9cs 1/1 Running 0 57m kube-system coredns-558bd4d5db-2t6sw 1/1 Running 0 58m kube-system coredns-558bd4d5db-p84zs 1/1 Running 0 58m kube-system etcd-localhost.localdomain 1/1 Running 0 58m kube-system kube-apiserver-localhost.localdomain 1/1 Running 0 58m kube-system kube-controller-manager-localhost.localdomain 1/1 Running 0 58m kube-system kube-proxy-xsdt9 1/1 Running 0 58m kube-system kube-scheduler-localhost.localdomain 1/1 Running 0 58m $ kubectl get svc -A NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 58m kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 58m