K8s on Doker for Windows に見切りをつけた話 – オレオレアドベントカレンダー23日目
Docker on Windows最高といったな
結局、K8sで複数ノード作れなくて、Ubuntuで組みました。ちょっとだけハマったのでその話を。
kubeadmで万全
なんだかんだで、kubeadmで万全ですよ。ubuntu18.04なら、dockerはdocker.ioを入れれば大丈夫です。
まず、マスターノード(K8sのサービスが動作するノード)を用意しましょう。
kubeadmのインストールは、root権限で以下のコマンドを打てば良いです。公式ドキュメントにそう書いてあるから間違いない。リポジトリ追加するところはsudoを使うためにいじってあります。
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo deb https://apt.kubernetes.io/ kubernetes-xenial main | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
あと注意点として、swapをoffにすることと、IPアドレスは固定しておきましょう。では、masterノードで以下のコマンドをroot権限で実行します。
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
sudo cp /etc/kubernetes/admin.conf .kube/config
sudo chown $USER:$GROUPS ~/.kube/config
最後に出力される、kubeadm join の引数はメモって置きましょう。
なお、まだNodeがReadyになりません。それはクラスタ内ネットワークを構築していないためです。以下のコマンドを打ってflannel を有効にします。今どきのK8s(1.13.1)だと、以下のファイルをapplyしないとダメでした。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
しばらくすると、NodeがReadyになるはずです。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ubuntu Ready master 98m v1.13.1
ワーカーノードでの作業
もう1つのノードでもマスターノードと同じ様にdocker.ioとkubeadm をインストールします。IPアドレスの固定とswapoff も同様に行います。
その後、マスターノードの ~/.kube/config をscpでコピーしてから、メモっておいた kubeadm join を実行します。その後、flannel もapplyしておきましょう。
sudo kubeadm join IPアドレス:6443 --token トークン --discovery-token-ca-cert-hash sha256:ハッシュ
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
これで、2つのノードが見えるようになりました。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ubuntu Ready master 103m v1.13.1
ubuntu01 Ready <none> 31m v1.13.1
K8sは難敵でしたね
いや、普通に実行するだけで苦労した。というか、Docker for Windowsをkubeadm でjoinしようとして、ひたすら頑張ったけど結局ダメ。いい方法があれば教えてください。
結局Ubuntuあたりでやるのが楽です。ということで連休はK8s三昧ですよ。