k0sでクラスタ作成

2021/01/03に公開

k0sのクラスタをGCPで作ってみます
(GKE使った方が手っ取り早いですが・・・)

基本的に公式サイト通りにやればOKです
https://docs.k0sproject.io/latest/create-cluster/

最初からsystemdの設定をする部分と、kubectlを打つ側がWAN側にいる場合について補足しています

構成

controllerノード x 1
workerノード x 1
ローカルPC(kubectl) x 1

こんな感じのインスタンスを用意します
今回はdebian10でやってみましたが、ubuntuでも問題なかったです

vms

gcp

k0sのインストール

controller, worker両方で以下のように実行します
(2021/01/03時点ではv0.9.1が最新でした)

wget https://github.com/k0sproject/k0s/releases/download/v0.9.1/k0s-v0.9.1-amd64 -O /usr/local/bin/k0s
chmod +x /usr/local/bin/k0s 

controller設定

systemdの設定

k0s install --role server
mkdir /etc/k0s
k0s default-config > /etc/k0s/k0s.yaml
# spec.api.sans にグローバルIPを追加します(今回はGCP外のローカルPCからkubectlコマンドを打つため、証明書のsanにグローバルIPを追加します)
vim /etc/k0s/k0s.yaml
# "--config" /etc/k0s/k0s.yaml のように設定して、configファイルのパスに書き換えます
vim /etc/systemd/system/k0s.service 
systemctl daemon-reload
systemctl start k0s

以下のコマンドでトークンを作成します
作成した/tmp/tokenをworkerに転送しておきます
今回はworkerの/etc/k0s/tokenに置きました

k0s token create --role=worker > /tmp/token

kubectl用の設定ファイルも作成しておきます
作成した/tmp/configはkubectlを発行するローカルPCの~/.kube/configに保存します

k0s kubeconfig create --groups "system:masters" yamasita > /tmp/config

worker設定

systemdの設定を行います

k0s install --role worker

設定ファイルを編集してtokenファイルの場所を指すようにします

vim /etc/systemd/system/k0s.service 
# --token-file "REPLACEME" の部分を --token-file /etc/k0s/token に変更

起動

systemctl daemon-reload
systemctl start k0s

clientの設定

controller側で作成した/tmp/configを~/.kube/configに保存し、
clusters.cluster.serverの値をグローバルIPに変えます

vim ~/.kube/config 

権限設定

kubectl create clusterrolebinding yamasita-admin-binding --clusterrole=admin --user=yamasita

あとはnodeがreadyになっていれば使えるようになります

kubectl get node

Discussion