モチベーション#
- CIはGitHub ActionsでなんとかなるけどCDを自動化したかった
- 運用側の気持ちを考えた開発をできるようになりたかった
- 手軽にデプロイできる環境を整えたかった
- なんかこうガチャガチャ動いてかっこいいじゃん?
何をしたか#
ArgoCDを活用したGitOpsな感じで、リポジトリクローンして初期化スクリプトを実行するだけで全てのセットアップが完了し、そのまま使い始めることができる環境を作りたかった。現状の実験環境ではある程度完成しているが、ごちゃごちゃ過ぎて見れたもんじゃないので本番環境ように書き直している。時間が足りなかったので途中まで…
使用技術は
- k3s
- Helm
- ArgoCD
- CloudNative PostgreSQL
- Traefik
- cert-manager
- kube-prometheus-stack
うーん動いてるものが一つもない
MetalLBの代わりに組み込みのServiceLBを使っています。
実験環境ではmisskeyを自動で立ち上げたり、ownCloud Infinite Scaleを建てたりしていました。Helmをしっかりやるとreleaseを分けることで無限に自動でmisskeyが生えてくる環境を作ることもできる気がしています。
App of Appsについて#
k8s入門する前にArgoCDついてちょっと調べてたんですが、結局Appとか自分で追加するのか…と、あまりやる意味を感じていなかったときに、この構成を見つけました。ArgoCDに全てを管理してもらうことで自分のやりたいことができるということがわかったのでまた暇なときに本番環境で運用してみたいです。
Argo CDのGetting Startedをシェルスクリプト化した
Argo CD + HelmでApp of Apps Patternを構築してみた
簡単な構成#
- ArgoCDをインストールする
- helmでrootとなるappとcert-managerを追加する
- rootがcnpgとtraefikとkube-prometheus-stackのApplicationを追加する
- 各Applicationが読み込まれ、インストールされる
気をつけること#
- ArgoCDのApplicationはArgoCDが動いてるものと同じnamespaceである必要がある
- GitHubはmainブランチがデフォでリポジトリを作るがgitはmaster
- yamlのインデントミスでvaluesがおかしくなっているかもしれないので2番目ぐらいに疑うこと
CloudNative PGで自動的に監視対象に含める#
以下を何らかの方法でkube-prometheus-stackのvaluesに追加する(監視対象を広げる)
prometheus-node-exporter:
hostRootFsMount:
enabled: false
prometheus:
prometheusSpec:
podMonitorSelectorNilUsesHelmValues: false
probeSelectorNilUsesHelmValues: false
ruleSelectorNilUsesHelmValues: false
serviceMonitorSelectorNilUsesHelmValues: false
logLevel: info
以下をCNPGのvaluesに追加する(CNPG自体の監視とダッシュボードの作成)
monitoring:
podMonitorEnabled: true
grafanaDashboard:
create: true
以下をCNPGのClusterのvaluesに追加する(クラスタ自体の監視)
cluster:
monitoring:
enabled: true
podMonitor:
enabled: true
これで自動的にPodMonitorが作成され、監視対象に含まれます。ここに1日溶かした
次に向けて#
次触るときは本番環境に適用とimage updaterみたいなやつで自動でイメージの更新をしたい。あとはExternalDNSとかMetalLBのBGPモードを使って自宅で快適にクラスタを運用したい。最終的にはIngressの設定だけで公開できるようにしたいな~と