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三昧ですよ。

Follow me!

Leave a Reply