これで安心して落とせるね
入れ方を間違えたRancherサーバー
元々VPNの鯖として使っていたUbuntu20.04 LTSが入ったMacMini機にRancherのドキュメント見ながらk3sを入れましたが、Rancher的にはk3sのDBにデフォルトのSQLiteを使わず外部のDBを使えーって書いてありますが設定忘れた民
後からetcd化とかするよ
最終的にはVMに全部移す
構成
- HA proxy
172.16.1.65
172.16.1.66
- vip
172.16.1.67
- k3s node
172.16.1.68
172.16.1.69
172.16.1.70
172.16.1.68
が現時点でRancherが動作しているk3sサーバー
172.16.1.67
が最終的にRancherのエンドポイントとする仮想IPアドレス(NIC等インターフェースは存在しないが応答できるIPアドレス)
k3s etcd化
k3sは--cluster-init
オプションを指定して起動するとSQLiteからetcdにマイグレーションしてくれます。
一旦k3sを止めてからオプションを指定して手動起動します
# 一旦停止する systemctl stop k3s # etcdに変換 k3s server --cluster-init # マイグレーションログが流れる # 適当な時間動かしたら止める(Ctrl+C) # 通常起動 systemctl start k3s
k3s クラスタ化
etcd化できたらクラスタ化します
ノード1172.16.1.68
で連携に必要なトークンを取得します
# トークンの確認 cat /var/lib/rancher/k3s/server/token
追加するノード(172.16.1.69
,172.16.1.70
)で以下のコマンドを実行します
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=<VERSION> K3S_TOKEN=<TOKEN> sh -s - server --server https://<Node1のIP>:6443
コマンド実行後Rancherのクラスター一覧画面で追加できていることを確認できます
これでノードレベルで落ちなくなりましたヤッター
HAProxy + Keepalived
ここから問題になるのはRancherで使うドメインがIPアドレス固定な点
もちろんこのままDNSに3レコードあれば正しく動いている間は問題ありませんが、偏ってしまったりノードが落ちたときにDNS解決したIPアドレスが運悪く落ちてるノードだったりするとRancherの画面やkubectlコマンドでアクセスできません。
よってここをHAProxyで生きているノードで応答できるようにします。
HA Proxyノードに設定を追加します
sudo apt-get install haproxy keepalived
/etc/haproxy/haproxy.cfg
global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 30s user haproxy group haproxy daemon # Default SSL material locations ca-base /etc/ssl/certs crt-base /etc/ssl/private # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets defaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http frontend k3s-frontend bind *:6443 mode tcp option tcplog default_backend k3s-backend backend k3s-backend mode tcp option tcp-check balance roundrobin default-server inter 10s downinter 5s server server-1 172.16.1.68:6443 check server server-2 172.16.1.69:6443 check server server-3 172.16.1.70:6443 check frontend rancher-frontend bind *:443 mode tcp option tcplog default_backend rancher-backend backend rancher-backend mode tcp option tcp-check balance roundrobin default-server inter 10s downinter 5s server server-1 172.16.1.68:443 check server server-2 172.16.1.69:443 check server server-3 172.16.1.70:443 check
/etc/keepalived/keepalived.conf
global_defs { enable_script_security script_user root } vrrp_script chk_haproxy { script '/usr/bin/killall -0 haproxy' # faster than pidof interval 2 } vrrp_instance haproxy-vip { interface eth0 # 受け取るインターフェース state MASTER # MASTER on lb-1, BACKUP on lb-2 priority 200 # 200 on lb-1, 100 on lb-2 virtual_router_id 51 virtual_ipaddress { 172.16.1.67/24 } track_script { chk_haproxy } }
二つのノードに設定を入れて(keeepalived.confは適切に設定)サービスを再起動します
systemctl restart haproxy keepalived
あとはRancherインストール時に使用したホスト名を仮想IP(172.16.1.67
)に設定すれば画面が出てきます
これで落ちにくいRancherの出来上がり~
一応Ingressを設定すればそのほかのホスト名からアクセスできますがHelmでアプデするときに設定が上書きされるのでおそらく消えます。(ホスト名変更はHelmコマンドからやったほうがよさそう)
ちゃんとTLSのホスト名も忘れずに
あぷで
ついでにアプデがてらホスト名変更
kubectl get secret -n cattle-system sh.helm.release.v1.rancher.v4 # NAME TYPE DATA AGE #sh.helm.release.v1.rancher.v4 helm.sh/release.v1 1 71d kubectl delete secret -n cattle-system sh.helm.release.v1.rancher.v4 helm upgrade rancher rancher-stable/rancher --namespace cattle-system --set hostname=rancher-server1.example.com --version=2.9.2
なぜか更新途中で止まってたみたいなので強制削除後更新
また証明書が吹っ飛ぶので再設定
apiVersion: cert-manager.io/v1 kind: Certificate spec: dnsNames: - rancher-server1.example.com
https://x.com/uesitananame55/status/1844371327723110823
壊れちゃった
なおった
直ったー
ホスト名変えたらあかん pic.twitter.com/FQfFU7vSRZ— じんさん@ zin3 (@uesitananame55) October 10, 2024
参考
コメント