Open5
Raspberry Pi 4 で Microk8s クラスタを作る
この記事に従って構築を進めた(Argo CD まで)。
2021年6月現在、qemu-binfmt-setup.sh
だけで QEMU 5.2 がインストールされる。
$ qemu-x86_64-static --version
qemu-x86_64 version 5.2.0 (Debian 1:5.2+dfsg-9ubuntu3)
Copyright (c) 2003-2020 Fabrice Bellard and the QEMU Project developers
Argo CD にログインするための初期パスワードの取得方法が、v1.9
から変更された模様。
admin
ユーザのパスワードの取得には下記のコマンドを使う。
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
Traefik の有効化
[https://microk8s.io/docs/addon-traefik](MicroK8s - Add on: Traefik Ingress)
sudo microk8s enable traefik
参考記事は microk8s.subcommand
の形だが、公式ドキュメントを見ると現在は microk8s subcommand
に変わった模様(microk8s.subcommand
も(まだ?)使える)
Traefik のポート変更
Add on のデフォルトの設定では Traefik が 8080
/ 8443
ポートで立ち上がるので、80
/ 443
ポートで立ち上がるように、DaemonSet
のマニフェストを書き換える。
- まずはマニフェストを適当なファイルに書き出す。
kubectl get daemonset -n traefik traefik-ingress-controller -o yaml > traefik-daemonset.yml
- マニフェストを書き換える。
このコンテナは hostNetwork: true
なので、hostPort
→ containerPort
のルーティングはできず、同じポート番号にする必要がある。そのため、コンテナの args
も変更しないといけない。
# 117行目付近
# この部分を
- --entrypoints.web.address=:8080
- --entrypoints.websecure.address=:8443
# 下記に書き換え
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
#(中略)
# 123行目付近
# この部分を
ports:
- containerPort: 8080
hostPort: 8080
name: http
protocol: TCP
- containerPort: 8443
hostPort: 8443
name: https
protocol: TCP
# 下記に書き換え
ports:
- containerPort: 80
hostPort: 80
name: http
protocol: TCP
- containerPort: 443
hostPort: 443
name: https
protocol: TCP
-
kubectl apply
する
kubectl apply -f traefik-daemonset.yml
-
Container Creating
からRunnning
になるまで待つ
既存のコンテナは(もちろん)消える。
$ kubectl get pods -n traefik
NAME READY STATUS RESTARTS AGE
traefik-ingress-controller-gkt55 1/1 Running 1 37h
traefik-ingress-controller-9jhsv 1/1 Running 1 37h
traefik-ingress-controller-whxbr 0/1 ContainerCreating 0 1s
$ kubectl get pods -n traefik
NAME READY STATUS RESTARTS AGE
traefik-ingress-controller-whxbr 1/1 Running 0 29m
traefik-ingress-controller-n8xjm 1/1 Running 0 28m
traefik-ingress-controller-lp2qr 1/1 Running 0 28m
- 完了
https?://{ノードのIPアドレス}
で 404 page not found
が確認できれば完了。
Prometheus / Grafana の導入
carlosedp/cluster-monitoring
を導入する。
- GitHub リポジトリをフォークする。
- フォークしたリポジトリをクローンする。
-
vars.jsonnet
の 51行目付近、suffixDomain
を、{ノードのIP}.nip.io
、ないしはカスタムのドメイン名に変える。-
prometheus.${suffixDomain}
やgrafana.${suffixDomain}
で Ingress が追加されるので、カスタムのドメイン名を用いる場合は対応する DNS レコードを追加する。
-
-
metallbExporter
とtraefikExporter
をenabled: true
にする(25行目、35行目)。
project: default
source:
repoURL: 'https://github.com/{GitHub のユーザ名}/cluster-monitoring.git'
path: manifests
targetRevision: HEAD
directory:
recurse: true
jsonnet: {}
destination:
server: 'https://kubernetes.default.svc'
namespace: cluster-monitoring
syncPolicy: {}
- マニフェストを生成する。
- Golang の環境がある場合:
make vendor && make
- Docker の環境がある場合:
make docker
終わったら、コミット & プッシュする。
- Namespace 作成
kubectl create namespace cluster-monitoring
- Argo CD へ Application 登録
- Argo CD の Web UI にログイン。
-
Application
→New App
から以下の内容を登録
project: default
source:
# フォークしたリポジトリの URL
repoURL: 'https://github.com/satackey/cluster-monitoring.git'
path: manifests
targetRevision: HEAD
directory:
recurse: true
jsonnet: {}
destination:
server: 'https://kubernetes.default.svc'
namespace: cluster-monitoring
syncPolicy: {}
- 作成が完了すると下記のようになる。
-
Sync
を押してリポジトリのマニフェストをクラスタにデプロイする。
-
モーダルが出てきたら
SYNCHRONIZE
を押す。
-
Synced
になるまで気長に待つ。
- 完了すると、App Health が
Healthy
に Current Sync Status がSynced
になる。途中でリポジトリを更新したりするとMissing
やOutOfSync
になるので、その時はもう一度 Synchronize する。