[{"data":1,"prerenderedAt":391},["ShallowReactive",2],{"blog-ja-k3s-argocd-flux-traefik-outofsync-comparison":3,"blog-related-ja-k3s-argocd-flux-traefik-outofsync-comparison":342,"blog-ja-k3s-argocd-flux-traefik-outofsync-comparison-alt":332},{"id":4,"title":5,"author":6,"body":7,"date":326,"description":327,"extension":328,"image":329,"locale":330,"meta":331,"navigation":332,"path":333,"seo":334,"stem":335,"tags":336,"__hash__":341},"blog\u002Fblog\u002Fja\u002Fk3s-argocd-flux-traefik-outofsync-comparison.md","ArgoCD vs Flux、K3sのGitOpsで知るべき「Traefik OutOfSync」の罠","Kubo Team",{"type":8,"value":9,"toc":311},"minimark",[10,27,34,39,48,53,67,70,79,83,96,102,106,109,129,136,157,163,174,189,212,229,235,239,242,273,279,282,288,308],[11,12,13,14,18,19,26],"p",{},"K3sクラスタにGitOpsを導入しようとして、ArgoCDとFluxのどちらを選ぶべきか迷っていないだろうか。\nどちらもCNCF Graduatedの成熟したプロジェクトであり、機能比較表を見ても優劣がつけにくい。\nしかし実際にK3sへArgoCDやFluxを導入してみると、",[15,16,17],"strong",{},"K3sが標準で持っているコンポーネント構成","が原因で、\n一般的なGitOpsツール比較記事には書かれていない罠にぶつかることがある。本記事ではArgoCD\u002FFluxの\n基本的な違いに加えて、K3s特有の落とし穴を具体的に解説し、選定基準を示す。\n（この種の相性調査自体を事前に済ませた環境が欲しい場合は、",[20,21,25],"a",{"href":22,"rel":23},"https:\u002F\u002Fkubo.hexabase.io\u002F",[24],"nofollow","Kubo","のような\nK3sベースのマネージドサービスを検討する価値がある）",[11,28,29],{},[30,31],"img",{"alt":32,"src":33},"section01","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-argocd-flux-traefik-outofsync-comparison\u002Fsection01.webp",[35,36,38],"h2",{"id":37},"_1-argocd-vs-flux何がどう違うのか","1. ArgoCD vs Flux、何がどう違うのか",[11,40,41,42,47],{},"ArgoCDとFluxはどちらも2022年にCNCFのGraduatedプロジェクトとなった、GitOpsの代表的なツールだ。\nFluxは2022年11月30日に卒業を発表し、Argo（ArgoCDを含むArgo Project）はその約1週間後に卒業している\n（",[20,43,46],{"href":44,"rel":45},"https:\u002F\u002Fwww.cncf.io\u002Fnews\u002F2022\u002F12\u002F06\u002Fitops-times-argo-graduates-from-cncf-incubator-following-massive-community-growth\u002F",[24],"CNCF: Argo graduates from CNCF Incubator","）。\nライセンスはいずれもApache 2.0で、技術的な成熟度に大きな差はない。違いはアーキテクチャの思想に出る。",[49,50,52],"h3",{"id":51},"uiの有無とチーム運用","UIの有無とチーム運用",[11,54,55,56,61,62,66],{},"ArgoCDは組み込みのWeb UIを持ち、アプリケーションの同期状態・差分・履歴を一画面で確認できる。\nインストールから30分程度でUIが使える状態になり、kubectlに不慣れなメンバーのオンボーディングもしやすい\n（",[20,57,60],{"href":58,"rel":59},"https:\u002F\u002Foneuptime.com\u002Fblog\u002Fpost\u002F2026-02-26-argocd-vs-fluxcd-2026\u002Fview",[24],"oneuptime.com: ArgoCD vs FluxCD in 2026","）。\n一方Fluxには標準UIがなく、",[63,64,65],"code",{},"flux"," CLIやkubectlでの操作が基本になる。Weave GitOps等のサードパーティUIも\n存在するが、成熟度はArgoCDの組み込みUIには及ばない。",[49,68,69],{"id":69},"マルチクラスタ管理の方式",[11,71,72,73,78],{},"ArgoCDは単一のコントロールプレーンから複数クラスタを登録し、一元管理できる設計になっている。\n管理用クラスタにArgoCDを1つ立て、開発・ステージング・本番の各クラスタをターゲットとして登録する構成が\n一般的だ（",[20,74,77],{"href":75,"rel":76},"https:\u002F\u002Ftailscale.com\u002Fdocs\u002Fsolutions\u002Fmanage-multi-cluster-kubernetes-deployments-argocd",[24],"Tailscale: Manage multi-cluster Kubernetes deployments with ArgoCD","）。\n対してFluxはクラスタごとに個別インストールするのが基本で、各クラスタが自律的にGitリポジトリを\nPullする構成になる。エッジに多数のK3sクラスタを展開するような構成では、この自律性がむしろ強みになる。",[49,80,82],{"id":81},"helmチャートのライフサイクル管理","Helmチャートのライフサイクル管理",[11,84,85,86,89,90,95],{},"Fluxは",[63,87,88],{},"HelmRelease","リソースを介してHelmのinstall\u002Fupgrade\u002Ftest\u002Frollbackといった操作をコントローラーが\n継続的に調整する仕組みを持つのに対し（",[20,91,94],{"href":92,"rel":93},"https:\u002F\u002Ffluxcd.io\u002Fflux\u002Fcomponents\u002Fhelm\u002Fhelmreleases\u002F",[24],"Flux公式: Helm Releases","）、\nArgoCDはHelmチャートをレンダリングしてSync対象のマニフェストとして扱うアプローチを取る。\nこの違いが、次章で説明するK3s特有の罠に直結してくる。",[11,97,98],{},[30,99],{"alt":100,"src":101},"section02","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-argocd-flux-traefik-outofsync-comparison\u002Fsection02.webp",[35,103,105],{"id":104},"_2-k3sで起きる罠1-argocd導入時traefik標準搭載がoutofsyncを生むことがある","2. K3sで起きる罠1 — ArgoCD導入時、Traefik標準搭載が「OutOfSync」を生むことがある",[11,107,108],{},"K3sは標準でIngressコントローラーとしてTraefikを同梱している。このTraefikをArgoCDの管理対象に含めると、\n実際に「常にOutOfSyncと表示され続ける」トラブルが報告されたことがある。",[11,110,111,112,115,116,119,120,122,123,128],{},"原因はTraefikのHelm Chartが、GOMEMLIMITとGOMAXPROCSという環境変数を",[63,113,114],{},"resourceFieldRef","経由で\nコンテナのリソース上限から取得する設定になっていたことだ。Kubernetesはこの参照に",[63,117,118],{},"divisor","（除数）の\n指定がない場合、デプロイ時に暗黙のデフォルト値を補完する。ところがHelmテンプレート側にはその\n",[63,121,118],{},"が明示されていなかったため、ArgoCDがクラスタ上の実際のマニフェストとGit上の定義を比較するたびに\n差分を検出し、同期済みのはずのアプリケーションが永久にOutOfSyncと表示され続けていた\n（",[20,124,127],{"href":125,"rel":126},"https:\u002F\u002Fgithub.com\u002Ftraefik\u002Ftraefik-helm-chart\u002Fissues\u002F1065",[24],"traefik\u002Ftraefik-helm-chart Issue #1065","）。",[11,130,131,132,135],{},"この問題はTraefik Helm Chart側のPR #1085で修正され、2024年6月にクローズ済みだ。したがって最新版の\nTraefik Helm Chartを使う限り同じ現象には遭遇しない。しかし重要なのは個別のバグそのものではなく、\n",[15,133,134],{},"「K3sが標準搭載するコンポーネントのHelm Chartが、環境変数のリソース参照など細かい仕様差でArgoCDの\n差分検知と衝突しうる」という構造的なリスクパターン","だ。K3sのバージョンアップでTraefikのHelm Chartが\n更新された際や、他の組み込みコンポーネント（local-path-provisioner等）をArgoCD管理下に置く際にも、\n同種の「終わらないOutOfSync」が再発しうることを踏まえておく必要がある。",[11,137,138,139,142,143,148,149,153,154,156],{},"対策としては、K3sの既定コンポーネントをGitOps管理対象に含めるかどうかを事前に設計段階で決め、\n含める場合は",[63,140,141],{},"ignoreDifferences","でArgoCDに特定フィールドの差分を無視させる設定を併用するのが現実的だ\n（",[20,144,147],{"href":145,"rel":146},"https:\u002F\u002Fargo-cd.readthedocs.io\u002Fen\u002Fstable\u002Ffaq\u002F",[24],"ArgoCD公式FAQ","）。\n",[20,150,152],{"href":22,"rel":151},[24],"Kubo Cloud","では、こうしたK3s標準コンポーネントとArgoCD\u002FFluxの既知の相性問題を\n検証済みの構成をCaptain UI経由で提供しており、",[63,155,141],{},"の設計をゼロから洗い出す工数を省ける。",[11,158,159],{},[30,160],{"alt":161,"src":162},"section03","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-argocd-flux-traefik-outofsync-comparison\u002Fsection03.webp",[35,164,166,167,170,171,173],{"id":165},"_3-k3sで起きる罠2-fluxcdのhelmchartはk3sのhelmchartと同名の別物補足","3. K3sで起きる罠2 — FluxCDの",[63,168,169],{},"HelmChart","はK3sの",[63,172,169],{},"と同名の別物（補足）",[11,175,176,177,180,181,183,184,128],{},"Fluxを選ぶ場合に知っておくべき罠もある。K3sには組み込みのHelm Controllerがあり、\n",[63,178,179],{},"helm.cattle.io\u002Fv1","の",[63,182,169],{},"というCRDでHelmチャートのインストール・アップグレードを管理している\n（",[20,185,188],{"href":186,"rel":187},"https:\u002F\u002Fdocs.k3s.io\u002Fadd-ons\u002Fhelm",[24],"K3s公式ドキュメント: Helm",[11,190,191,192,194,195,198,199,202,203,206,207,128],{},"一方、FluxのSource Controllerも",[63,193,169],{},"という名前のCRD（",[63,196,197],{},"source.toolkit.fluxcd.io","グループ）を\n定義している。つまりK3s上でFluxを使うと、",[15,200,201],{},"Kind名が完全に一致する2つの別物のCRDが同一クラスタに\n共存する","ことになる。Flux公式のトラブルシューティングガイドでも、K3sのように別のHelm Controllerを\n同梱する環境では、完全修飾名を使わずに",[63,204,205],{},"kubectl get helmcharts","を実行すると意図しない方のCRDが\n返ってきてしまう既知の問題として明記されている\n（",[20,208,211],{"href":209,"rel":210},"https:\u002F\u002Ffluxcd.io\u002Fflux\u002Fcheatsheets\u002Ftroubleshooting\u002F",[24],"Flux公式: Troubleshooting cheatsheet",[11,213,214,215,218,219,222,223,228],{},"回避策はシンプルで、",[63,216,217],{},"kubectl get helmcharts.source.toolkit.fluxcd.io -A","のように完全修飾名で\n参照するか、Flux CLIの",[63,220,221],{},"flux get source chart","を使うことだ。なお、K3s自身のHelmChart CRDを\n手動でhelm upgradeした際に設定が消える別種の罠については、過去記事\n「",[20,224,227],{"href":225,"rel":226},"https:\u002F\u002Fkubo.hexabase.io\u002Fblog\u002Fja\u002Fk3s-helmchart-crd-manual-helm-upgrade-reconcile-revert",[24],"K3sのHelmChart CRDで配ったアプリを直接helm upgradeしたら、次のreconcileで設定が消えた","」で\n詳しく扱っているので、K3sのHelm Controllerそのものを操作する場合はそちらも参照してほしい。",[11,230,231],{},[30,232],{"alt":233,"src":234},"section04","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-argocd-flux-traefik-outofsync-comparison\u002Fsection04.webp",[35,236,238],{"id":237},"_4-結局どちらを選ぶべきか-k3sクラスタの運用形態別の判断基準","4. 結局どちらを選ぶべきか — K3sクラスタの運用形態別の判断基準",[11,240,241],{},"ここまでの機能差と罠を踏まえると、判断基準は次のように整理できる。",[243,244,245,255,267],"ul",{},[246,247,248,251,252,254],"li",{},[15,249,250],{},"単一〜少数のK3sクラスタを、非エンジニアを含むチームで運用する場合",": ArgoCDが有利。\n組み込みUIで同期状態を可視化でき、オンボーディングコストが低い。ただしK3s標準コンポーネントを\n管理対象に含めるなら、",[63,253,141],{},"の設計をあらかじめ検討する。",[246,256,257,260,261,266],{},[15,258,259],{},"エッジに多数のK3sクラスタを展開し、各クラスタが自律的にGitから同期すればよい場合",": Fluxが有利。\nイメージの自動更新（Image Automation）によってCI側でタグを書き換える処理が不要になる点も\n運用負荷を下げる（",[20,262,265],{"href":263,"rel":264},"https:\u002F\u002Foneuptime.com\u002Fblog\u002Fpost\u002F2026-03-06-when-to-choose-flux-cd-over-argocd\u002Fview",[24],"oneuptime.com: When to Choose Flux CD Over ArgoCD","）。\nただし前述のHelmChart CRD名前衝突を避けるため、完全修飾名での運用ルールをチーム内で徹底する必要がある。",[246,268,269,272],{},[15,270,271],{},"K3sの既定コンポーネント（Traefik, local-path-provisioner等）をGitOps管理対象に含めるか",":\n含めない（K3sの既定動作に任せる）選択肢もある。GitOpsの対象範囲をアプリケーション層に限定すれば、\n本記事で挙げた2つの罠のいずれも回避できる。",[11,274,275],{},[30,276],{"alt":277,"src":278},"section05","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-argocd-flux-traefik-outofsync-comparison\u002Fsection05.webp",[35,280,281],{"id":281},"まとめ",[11,283,284,285,287],{},"ArgoCDとFluxはどちらもCNCF Graduatedの成熟したGitOpsツールであり、一般的な機能比較だけでは\n優劣をつけにくい。しかしK3sで実際に運用すると、標準搭載のTraefikやK3s自身のHelm Controllerが持つ\n",[63,286,169],{},"という名前のCRDが、選んだGitOpsツールとの間で予想外の衝突を起こすことがある。\nこれらは個別のバグというより、「K3sの既定コンポーネント」と「GitOpsツールの管理範囲」が\n交差する場所に共通して現れるリスクパターンだ。",[11,289,290,291,293,294,297,298,301,302,307],{},"こうした衝突調査や",[63,292,141],{},"の設計は、GitOps運用を始める前に必ず踏まえておきたい工数だが、\n本来はアプリケーションのデリバリーに集中したい作業でもある。",[20,295,25],{"href":22,"rel":296},[24],"は\nK3sベースのマネージドKubernetesサービスとして、ArgoCD・Fluxいずれとの組み合わせでも標準コンポーネントとの\n相性を検証済みの環境を提供しており、Captain UI経由でのGitOps統合もサポートしている。\nK3sクラスタのGitOps運用で同じ罠を踏みたくない場合は、",[20,299,25],{"href":22,"rel":300},[24],"の\n",[20,303,306],{"href":304,"rel":305},"https:\u002F\u002Fwww.hexabase.com\u002Fcontact-us\u002F",[24],"お問い合わせ","から構成の相談が可能だ。",[11,309,310],{},"EKSやAKSの高コスト・複雑さ・ベンダーロックインに悩む必要はもうない。K3sベースのKuboなら、\n本格的なKubernetesの機能とGitOpsの柔軟性はそのままに、圧倒的なコスト効率で運用できる。",{"title":312,"searchDepth":313,"depth":313,"links":314},"",2,[315,321,322,324,325],{"id":37,"depth":313,"text":38,"children":316},[317,319,320],{"id":51,"depth":318,"text":52},3,{"id":69,"depth":318,"text":69},{"id":81,"depth":318,"text":82},{"id":104,"depth":313,"text":105},{"id":165,"depth":313,"text":323},"3. K3sで起きる罠2 — FluxCDのHelmChartはK3sのHelmChartと同名の別物（補足）",{"id":237,"depth":313,"text":238},{"id":281,"depth":313,"text":281},"2026-11-02","K3sでArgoCDとFluxのどちらを選ぶべきか迷う人向けに、UI・マルチクラスタ管理の機能差に加え、K3s標準搭載のTraefikがArgoCDで永続OutOfSyncになる実例と、FluxのHelmChart CRDがK3sと名前衝突する注意点を解説し、選定基準を示す。","md","https:\u002F\u002Fcdn.kubo.hexabase.io\u002Fimages\u002Fblog\u002Fja\u002Fk3s-argocd-flux-traefik-outofsync-comparison\u002Ftitle.webp","ja",{},true,"\u002Fblog\u002Fja\u002Fk3s-argocd-flux-traefik-outofsync-comparison",{"title":5,"description":327},"blog\u002Fja\u002Fk3s-argocd-flux-traefik-outofsync-comparison",[337,338,339,65,340],"k3s","kubernetes","argocd","gitops","4KTFUsWavOh0g9XOJMQ4p259XyGK8XezU7YJGHt2_mE",[343,350,359,367,376,383],{"path":344,"title":345,"description":346,"date":347,"tags":348},"\u002Fblog\u002Fja\u002Fkubernetes-gitops-branch-antipattern-fleet-scaling","そのdev\u002Fstaging\u002Fprodブランチ、実は時限爆弾。KubernetesのGitOpsが壊れる本当の理由","dev\u002Fstaging\u002FproductionをGitブランチで分けるGitOps運用は、実はKubernetesの宣言的インフラの前提を壊すアンチパターンだ。ドリフトが起きる理由とディレクトリ構成・トランクベース運用への移行手順、フリート規模での崩壊を防ぐ設計を解説する。","2026-08-10",[337,338,340,339,349],"devops",{"path":351,"title":352,"description":353,"date":354,"tags":355},"\u002Fblog\u002Fja\u002Fk3s-sealed-secrets-gitops-rebuild-private-key-lost","GitOpsで全部コード化してたのに。K3sクラスタを作り直したら、Sealed Secretsが一つも復号できなくなった理由","K3sクラスタをGitOpsで再構築したらSealed Secretsが全て復号できない状態に陥った。原因は秘密鍵の扱いにある。障害の仕組みと復旧手順、再発防止の運用設計を解説する。","2026-10-15",[337,338,356,357,340,358],"sealed-secrets","secrets-management","disaster-recovery",{"path":360,"title":227,"description":361,"date":362,"tags":363},"\u002Fblog\u002Fja\u002Fk3s-helmchart-crd-manual-helm-upgrade-reconcile-revert","K3sとKubernetesの違いは機能一覧だけでは分からない。HelmChart CRDという自動化レイヤーが、手動でのhelm upgradeやkubectl editを静かに巻き戻す仕組みと回避策を解説する。","2026-09-29",[337,338,364,365,340,366],"helm-controller","helmchart-crd","reconcile",{"path":368,"title":369,"description":370,"date":371,"tags":372},"\u002Fblog\u002Fja\u002Fcicd-pipeline-devsecops-gate-design-four-layers","そのCI\u002FCDパイプライン、セキュリティチェックをどこに置くか決めずに継ぎ足していないか。DevSecOpsゲート設計の4層モデル","SASTもDASTもコンテナスキャンも導入した。それでも本番で事故は起きる。CI\u002FCDパイプラインのセキュリティを『4つの層』で設計し直すDevSecOpsゲート設計の考え方を、K3s\u002FKubernetes運用の観点から解説する。","2026-08-28",[337,338,373,374,375,340],"ci-cd","devsecops","admission-control",{"path":377,"title":378,"description":379,"date":380,"tags":381},"\u002Fblog\u002Fja\u002Fkubernetes-image-signing-sigstore-supply-chain","イメージタグは誰でも書き換えられる。Kubernetesのイメージ署名にSigstoreで『来歴』を刻むという発想","コンテナイメージ署名の仕組みを解説。イメージタグは誰でも書き換え可能で、CI\u002FCDのテストを通過した保証にはならない。SigstoreとKyvernoを組み合わせ、Kubernetes\u002FK3s上で未署名イメージの起動を拒否する防御層を構築する方法を、GitOps運用との統合も含めて紹介する。","2026-08-06",[337,338,373,340,382],"security",{"path":384,"title":385,"description":386,"date":387,"tags":388},"\u002Fblog\u002Fja\u002Fk3s-edge-fleet-declarative-management","1台のトラブルシューティングは笑い話で済む。それが1000台なら経営リスクになる。K3sエッジ運用を属人化から救うRancher Fleetという選択肢","K3sエッジ運用のフリート管理は、1台ずつの手作業トラブルシューティングでは破綻する。宣言的管理とRancher Fleetの仕組みから、属人化しないエッジ運用の設計を解説する。","2026-08-03",[337,338,389,340,390],"edge-computing","fleet-management",1793798686405]