VMware Photon OS で構築するK8Sクラスタ
Photon OS とは ?
VMware さんが作っているOSSで、コンテナをホストするためのOSです。
特徴は以下
- おそらくRedHatベースのOS
- tdnf (tiny dnf) という独自のパッケージ管理ツールが用いられている
- systemd
- network周りはsystemd-networkd
モダンなLinuxの普通構成? なのかな。
K8Sクラスタを作る方針
自分自身は過去にkubeadmでしかクラスタを作ったことが無いので、kubeadmで作りたいと思います。
で、kubeadmがサポートしているOSの中に、 Photon OS
なんて無いので、 パッケージ管理ツールが絡んできそうな場所は Container Linux
, それ以外のところは CentOS
などを利用していくつもりです。
注意点
Photon OSの準備
その後にやったことは以下
hostnamectl set-hostname name
で適当にhostnameを変更- 100GBのディスクを
/var/lib/docker
に追加 - echo 'export PATH="${PATH}:/opt/bin"' >> ~/.bash_profile
tdnf install -y tar wget ebtables ethtool socat
K8S向けの特別な対応
何もせずに、kubeadmでセッティングしていくと、 kube-dns
というやつがクラッシュして再起動しまくるので、issueを参考に設定を入れる
cat << EOF > /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=cgroupfs"] } EOF
また、PhotonOSのデフォルト状態だと、k8sのAPIを叩くのに必要な6443ポートへの通信をDROPし、後の kubeadm join
がfailedするのでポートを開けておく
iptables -I INPUT -p tcp --dport 6443 -m state --state NEW -j ACCEPT
一旦は検証なので、上記の感じで適当に開けるが、必要があればもう少し賢いルールを設定して、以下のissueを参考に永続化すると良い
kubeadmのインストール
基本的には以下の手順通りすすめる
上記の Installing kubeadm, kubelet and kubectl
の項目は Container Linux
の全部と CentOS
の以下のコマンドを実行した
cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system
kubernetes のインストール
ここまでの状態のPhotonOSのVMを複数台用意すること
あとは、以下に沿ってインストールを進めるだけ。
[WARNING FileExisting-crictl]: crictl not found in system path
というWARNINGが出るが、 2018/06/24 時点では、crictlをインストールするとk8sのインストール段階でエラーになって結局ignore-errorするハメになるので無視で良さそう
自分は3VM用意して kubectl get nodes
の結果は以下のような状態になった。
root@k8s-photon-001-v [ ~ ]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-photon-001-v Ready master 34m v1.10.5 k8s-photon-002-v Ready <none> 31m v1.10.5 k8s-photon-003-v Ready <none> 31m v1.10.5
検証中はちょいちょいハマりどころはあったものの、特に問題なくPhotonOSとkubeadmでK8Sクラスタを作ることができました。
後日確認したいこと
上記のページに、 Check required ports
があるので、そのポートが空いているか否かを確認しつつ、正常にクラスタが動いているか?を確認する必要がありそうです。