おうち k8s クラスターの運用
マニフェスト置き場
他に Cloudflare の DNS レコードなんかも Terraform で管理してる
Argo CD
GitOps
Cloudflare Zero Trust で保護してる
マニフェストのスキャン / Linting
GitHub Actions で push ごとにマニフェストをスキャンしている
GitHub の Code scanning に見つかったマニフェストの問題が集計される
https://scrapbox.io/files/64672efcf4bf74001ceff492.png
マニフェストのフォーマット
ESLint の eslint-plugin-yml プラグインを使って、**.yaml をフォーマットさせています
キーの並び順を整えたり、Kubernetes マニフェストの拡張子を .yaml に制限したりしています
マニフェスト内のイメージの更新
Renovate がマニフェスト内のイメージタグ (& digest) を更新してくれる
Renovate がイメージの更新をマージすると Argo CD が展開してくれる
Kubernetes のマニフェストを見てくれるようにする
code:renovate.json5
{
kubernetes: {
},
}
イメージの digest を固定してもらう
code:renovate.json5
{
kubernetes: {
pinDigests: true,
},
kustomize: {
pinDigests: true,
},
docker: {
pinDigests: true,
},
'docker-compose': {
pinDigests: true,
},
}
cloudflare/cloudflared:latest が cloudflare/cloudflared:latest@sha256:342c358193e6057ecf3e5322e852c6b39869583697286f96afb0597a785694d1 になる
プライベートレジストリーや Docker Hub にログインする
code:renovate.json5
{
hostRules: [
{
hostType: 'docker',
username: 'starrybluesky-bot',
encrypted: {
password: '...',
},
},
],
}
更新をチェックするスケジュール
code:renovate.json5
{
// いつでも PR 作成可
// リリースから1週間以上経ったパッケージのみ適用する
stabilityDays: 7,
}
特定のイメージの更新がマージされる時間を制限する
code:renovate.json
{
"packageRules": [
{
"matchPackagePrefixes": [
"ghcr.io/starrybluesky/mahiron",
"ghcr.io/starrybluesky/epgstation"
],
}
]
}
この例では列挙したイメージの更新を AM 4:00 ~ AM 5:00 に制限している