blog/content/posts/2024-11-23/index.md

4.1 KiB
Raw Blame History

author draft categories date tags keywords title relpermalink url decription
usbharu true
技術
2024-11-23T22:31:06+09:00
Kubernetes
ArgoCD
CI/CD
k3s
Kubernetes
ArgoCD
CI/CD
k3s
k8s+ArgoCDに入門したかった posts/2024-11-23/ posts/2024-11-23/ k8s+ArgoCDに入門したかった

usbharu/usbharu-lab

モチベーション

  • 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を構築してみた

簡単な構成

  1. ArgoCDをインストールする
  2. helmでrootとなるappとcert-managerを追加する
  3. rootがcnpgとtraefikとkube-prometheus-stackのApplicationを追加する
  4. 各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の設定だけで公開できるようにしたいな