これで安心して落とせるね
入れ方を間違えたRancherサーバー
元々VPNの鯖として使っていたUbuntu20.04 LTSが入ったMacMini機にRancherのドキュメント見ながらk3sを入れましたが、Rancher的にはk3sのDBにデフォルトのSQLiteを使わず外部のDBを使えーって書いてありますが設定忘れた民
後からetcd化とかするよ
最終的にはVMに全部移す
構成
- HA proxy
172.16.1.65172.16.1.66
- vip
172.16.1.67
- k3s node
172.16.1.68172.16.1.69172.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.comhttps://x.com/uesitananame55/status/1844371327723110823
壊れちゃった
なおった
直ったー
ホスト名変えたらあかん pic.twitter.com/FQfFU7vSRZ— じんさん@ zin3 (@uesitananame55) October 10, 2024
参考






コメント