Kubernetesクラスターが崩壊したので作りなおした2
created at
updated at
Kubernetesクラスターが崩壊したので作りなおしたから早2週間…
普通に壊れたので再構築します!原因はCiliumっぽいけど崩壊してる状態だとダウングレードが出来なかったので再構築です!
という訳でKubernetesクラスター復旧RTA始まるよ~
レギュレーションは以下の通りです
- rokoucha/materiaで定義している全てのアプリケーションがArgo CD上でsync状態になる事を目指す
- sync policyもautoにする
- データも全て復旧してあるのが前提
- Kubernetesがインストールされる前の状態からスタート
- SSHとかMackerelとかの基本的なセットアップは完了している状態
k0sctl apply --no-wait
を実行開始したらタイマースタート
- Argo CD上でrefresh appsを押して全てがsyncになったらタイマーストップ
では早速やっていきましょう
はい、よーいスタート
ログ
k0sctl apply --no-wait
実行
k0sctl kubeconfig > ~/.kube/config
実行
kubectl get pods -A
して初期状態なのを確認
kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints
taintチェック
- controller+workerにするとtaintが付与されるけど削除するように設定変更したので反映されてるかチェック
kubectl kustomize --enable-helm ./bootstrap | kubectl apply -f -
実行
1password-credentials.json
と1password.env
が既に用意されてるので(チート)そのまま実行する
- 無い場合は1Passwordで作ってくる必要あり
1password.env
は普通にtoken配置するだけだけ
1password-credentials.json
はcat 1password-credentials.json | openssl base64 | tr -d '\n' > bootstrap/1password-credentials.json
みたいな事をしないといけなくてクソだるい
kubectl get pods -A
してRunningになるまで待つ
connect-health-check
以外はRunningになったのでOK
cilium-cli status --wait-duration 5s
してciliumがちゃんと動いてるかチェック
- OKっぽそう
argocd admin initial-password -n argocd
してパスワード控える
kubectl port-forward svc/argocd-server -n argocd 8080:443
してArgo CD開く
- localhost:8080
- Argo CDにadminで入る
- 入れん、1Passwordに入ってる方もダメ
- カス
kubectl logs -n 1password deployments/onepassword-connect
見る
- 最初の方に500出てるけど最後の方は成功してる
kubectl logs -n 1password deployments/onepassword-connect-operator
見る
- 途中エラー出てたけど最後の方は成功してる
kubectl describe secret -n argocd argocd-secret
見る
- ちゃんと埋まってそう
kubectl port-forward svc/argocd-server -n argocd 8080:443
してArgo CD開く
- いつものパスワードだった
- 1Passwordのやつはハッシュ化済みのやつだった…
- Choose your connection method: Via GitHub App
- Repository URL: https://github.com/rokoucha/materia.git
- systemのapplication追加
- sync policyは一旦マニュアルにする
- 1password-connect
- Secretのdiffが出る
- Secret消してみる
- onepassword-connectのpod再起動してみる
- 完全に終わった
kubectl kustomize --enable-helm ./bootstrap | kubectl apply -f -
やりなおす
- なおった
- 分かんないし後回しする
- argocd
- dexのエラーは無視
- Secretのdiffが出る
- cert-manager
- sync failed
- podが立ち上がってからsyncしなおす
- OK
- cilium
- OK
- haproxy-ingress
- OK
- opentelemetry-operator
- OK
- reflector
- OK
- synology-csi
- OK
- 一旦終わり
- application追加
- sync policyは一旦マニュアルにする
- PVに依存しないやつから
- apcupsd-exporter
- OK
- elasticsearch-exporter
- OK
- nginx
- Secretのdiffが出る
- opentelemetry-collector
- OK
- postgres-exporter
- OK
- snmp-exporter
- OK
- switchbot-meter-exporter
- OK
- PVに依存するやつテスト
- teamspeak
- 一番影響が少なそうなやつ
- とりあえずsyncは成功した
- いけそう!
- elasticsearch
- OK
- grafana
- Secretのdiffが出る
- PVのclaimRefにuidとか残っててVolumeマウントできてなかった
- 修正したらOK
- influxdb
- OK
- postgresql
- OK
- prometheus
- PVをkustomizeで読み忘れて事故った
- 修正してrefresh→sync
- OK
- authentik
- Secretのdiffが出る
- mastodon
- Secretのdiffが出る
- miniflux
- Secretのdiffが出る
- とりあえず全部のapplication復旧した
- diff出てないやつのsync policyをautoに変更
- diff出てるやつ対応
- 1password-connect
- OnePasswordItemを削除してsyncしなおし
- argocd
- OnePasswordItemを削除してsyncしなおし
- ようと思ったらエラー出た
kubectl kustomize --enable-helm ./system/argocd | kubectl apply -f -
してなおす
- argocd-secretを削除するとSecretも勝手に消えて死ぬっぽい
- sync policyをautoにしたらなおった
- authentik
- syncしなおし
- applicationのmanifestいじる
_
yaml
ignoreDifferences: - kind: Secret name: ggrel-net-tls jsonPointers: - /data/tls.crt - /data/tls.key - /metadata/annotations/reflector.v1.k8s.emberstack.com~1reflected-at - /metadata/annotations/reflector.v1.k8s.emberstack.com~1reflected-version
- cilium
- applicationのmanifestいじる
_
yaml
ignoreDifferences: - kind: Secret name: cilium-ca jsonPointers: - /data/ca.crt - /data/ca.key - kind: Secret name: hubble-relay-client-certs jsonPointers: - /data/ca.crt - /data/tls.crt - /data/tls.key - kind: Secret name: hubble-server-certs jsonPointers: - /data/ca.crt - /data/tls.crt - /data/tls.key
- grafana
- applicationのmanifestいじる
_
yaml
ignoreDifferences: - kind: Secret name: tls jsonPointers: - /data/tls.crt - /data/tls.key - /metadata/annotations/reflector.v1.k8s.emberstack.com~1reflected-at - /metadata/annotations/reflector.v1.k8s.emberstack.com~1reflected-version
- mastodon
- applicationのmanifestいじる
_
yaml
ignoreDifferences: - kind: Secret name: tls jsonPointers: - /data/tls.crt - /data/tls.key - /metadata/annotations/reflector.v1.k8s.emberstack.com~1reflected-at - /metadata/annotations/reflector.v1.k8s.emberstack.com~1reflected-version
- miniflux
- applicationのmanifestいじる
_
yaml
ignoreDifferences: - kind: Secret name: tls jsonPointers: - /data/tls.crt - /data/tls.key - /metadata/annotations/reflector.v1.k8s.emberstack.com~1reflected-at - /metadata/annotations/reflector.v1.k8s.emberstack.com~1reflected-version
- nginx
- applicationのmanifestいじる
_
yaml
ignoreDifferences: - kind: Secret name: ggrel-net-tls jsonPointers: - /data/tls.crt - /data/tls.key - /metadata/annotations/reflector.v1.k8s.emberstack.com~1reflected-at - /metadata/annotations/reflector.v1.k8s.emberstack.com~1reflected-version - kind: Secret name: noa-pp-ua-tls jsonPointers: - /data/tls.crt - /data/tls.key - /metadata/annotations/reflector.v1.k8s.emberstack.com~1reflected-at - /metadata/annotations/reflector.v1.k8s.emberstack.com~1reflected-version - kind: Secret name: rokoucha-net-tls jsonPointers: - /data/tls.crt - /data/tls.key - /metadata/annotations/reflector.v1.k8s.emberstack.com~1reflected-at - /metadata/annotations/reflector.v1.k8s.emberstack.com~1reflected-version - kind: Secret name: sayn-wittgenste-in-tls jsonPointers: - /data/tls.crt - /data/tls.key - /metadata/annotations/reflector.v1.k8s.emberstack.com~1reflected-at - /metadata/annotations/reflector.v1.k8s.emberstack.com~1reflected-version
- 忘れずに全部のsync policyをautoに戻す
- 完了
1時間45分で復旧できました♪
完走した完走ですが、時間の無駄なのでKubernetesホストを自分で立てるべきではありません。
これを読んだ人は今すぐ自宅サーバーの電源を切ってクラウドに移行しましょう。