Kubernetesクラスターが崩壊したので作りなおした2

created at
updated at
technology Kubernetes Flatcar_Container_Linux

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.json1password.env が既に用意されてるので(チート)そのまま実行する
  • 無い場合は1Passwordで作ってくる必要あり
  • 1password.env は普通にtoken配置するだけだけ
  • 1password-credentials.jsoncat 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
  • 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いじる
  • _
    yamlignoreDifferences:
      - 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いじる
  • _
    yamlignoreDifferences:
      - 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いじる
  • _
    yamlignoreDifferences:
      - 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いじる
  • _
    yamlignoreDifferences:
      - 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いじる
  • _
    yamlignoreDifferences:
      - 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いじる
  • _
    yamlignoreDifferences:
      - 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ホストを自分で立てるべきではありません。
これを読んだ人は今すぐ自宅サーバーの電源を切ってクラウドに移行しましょう。