結論としては、構築済みK3sの場合でも他の設定変更と同様に起動オプションに設定してサービス再起動すればOK
--disableを追加すれば削除され、削除フラグを除外すれば再デプロイされる。
K3sのインストールオプションで以下のコンポーネントは--disableに指定すれば無効化できる。
- coredns
- servicelb
- traefik
- local-storage
- metrics-server
- runtimes
通常はインストール時に指定して、不要なコンポーネントは(リソースの無駄なので)そもそもデプロイしないようにできる。
例えばストレージを使うpodをデプロイしないのでlocal-storageをオフとか、外部公開はLoadBalancer Serviceしか使わないのでTraefik Ingress Controller(traefik)をオフにするとか。
設定サンプル
事前状態
root@k3s-node4:~# kubectl get pod -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-ccb96694c-rw2gc 1/1 Running 0 82s kube-system helm-install-traefik-crd-fpdjj 0/1 Completed 0 82s kube-system helm-install-traefik-v6np7 0/1 Completed 1 82s kube-system local-path-provisioner-5b5f758bcf-49tjp 1/1 Running 0 82s kube-system svclb-traefik-199fa10e-9cxcd 2/2 Running 0 65s kube-system traefik-5cbdcf97f4-68qjw 1/1 Running 0 65s root@k3s-node4:~# root@k3s-node4:~# kubectl top pod -A error: Metrics API not available root@k3s-node4:~# kubectl top node error: Metrics API not available root@k3s-node4:~#
無効にしていたメトリクスサーバーを有効化
メトリクスサーバーを無効設定でインストールした上記のK3sクラスタに、メトリクスサーバーをデプロイする設定に変更する。
設定ファイルは/etc/systemd/system/k3s.service
root@k3s-node4:~# tail -5 /etc/systemd/system/k3s.service
ExecStart=/usr/local/bin/k3s \
server \
'--disable' \
'metrics-server' \
このファイルから、--disable metrics-serverの部分を削除し、以下を実行
root@k3s-node4:~# tail -3 /etc/systemd/system/k3s.service
ExecStart=/usr/local/bin/k3s \
server \
root@k3s-node4:~#
root@k3s-node4:~# systemctl daemon-reload
root@k3s-node4:~# systemctl restart k3s
root@k3s-node4:~#
これで以下の通りメトリクスサーバーがデプロイされる。
^Croot@k3s-node4:~# kubectl get pod -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-ccb96694c-rw2gc 1/1 Running 0 2m50s kube-system helm-install-traefik-crd-fpdjj 0/1 Completed 0 2m50s kube-system helm-install-traefik-v6np7 0/1 Completed 1 2m50s kube-system local-path-provisioner-5b5f758bcf-49tjp 1/1 Running 0 2m50s kube-system metrics-server-7bf7d58749-j95lq 1/1 Running 0 27s kube-system svclb-traefik-199fa10e-9cxcd 2/2 Running 0 2m33s kube-system traefik-5cbdcf97f4-68qjw 1/1 Running 0 2m33s root@k3s-node4:~#
root@k3s-node4:~# kubectl top node NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% k3s-node4 38m 1% 678Mi 8% root@k3s-node4:~# kubectl top pod -A NAMESPACE NAME CPU(cores) MEMORY(bytes) kube-system coredns-ccb96694c-rw2gc 1m 13Mi kube-system local-path-provisioner-5b5f758bcf-49tjp 1m 7Mi kube-system metrics-server-7bf7d58749-j95lq 3m 14Mi kube-system svclb-traefik-199fa10e-9cxcd 0m 0Mi kube-system traefik-5cbdcf97f4-68qjw 1m 31Mi
メトリクスサーバーとTraefik Ingress Controllerを無効化
root@k3s-node4:~# tail -4 /etc/systemd/system/k3s.service
ExecStart=/usr/local/bin/k3s \
server \
--disable metrics-server \
--disable traefik
root@k3s-node4:~#
root@k3s-node4:~# systemctl daemon-reload
root@k3s-node4:~# systemctl restart k3s
root@k3s-node4:~#
これで以下の通り、Traefik Ingress Controllerが停止する。
root@k3s-node4:~# kubectl get pod -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-ccb96694c-rw2gc 1/1 Running 0 145m kube-system local-path-provisioner-5b5f758bcf-49tjp 1/1 Running 0 145m root@k3s-node4:~#
設定ファイルでローカルストレージの無効化
/etc/rancher/k3s/config.yamlへdisableキーの設定を追加
disable: - local-storage
これでサービス再起動すれば停止する。
この場合systemdユニットファイルの編集は生じないので、systemctl restart k3sのみで設定変更できる。