[{"data":1,"prerenderedAt":1153},["ShallowReactive",2],{"blog-ja-argocd-gitops-kubernetes-guide":3,"blog-ja-argocd-gitops-kubernetes-guide-alt":1143},{"id":4,"title":5,"author":6,"body":7,"date":1138,"description":1139,"extension":1140,"image":143,"locale":1141,"meta":1142,"navigation":1143,"path":1144,"seo":1145,"stem":1146,"tags":1147,"__hash__":1152},"blog\u002Fblog\u002Fja\u002Fargocd-gitops-kubernetes-guide.md","ArgoCD で始める GitOps: Kubernetes 宣言的デプロイの実践","Kubo Team",{"type":8,"value":9,"toc":1121},"minimark",[10,33,38,52,84,98,102,109,115,121,131,137,340,347,350,362,366,387,390,398,416,420,424,432,541,544,548,560,823,829,833,842,846,1010,1019,1022,1025,1039,1051,1069,1081,1094,1098,1101,1117],[11,12,13,14,18,19,26,27,32],"p",{},"クラウドネイティブ時代のデプロイにおいて、",[15,16,17],"strong",{},"Git をシングルソースオブトゥルース（信頼できる唯一の情報源）とする GitOps"," は、もはや選択肢ではなく標準となりつつあります。その中心的ツールである ",[20,21,25],"a",{"href":22,"rel":23},"https:\u002F\u002Fargo-cd.readthedocs.io\u002Fen\u002Fstable\u002F",[24],"nofollow","ArgoCD"," は、Kubernetes 上で宣言的な継続的デリバリーを実現するオープンソースプロジェクトです。",[20,28,31],{"href":29,"rel":30},"https:\u002F\u002Fkubo.hexabase.io\u002F",[24],"Kubo"," では ArgoCD を標準搭載しており、複雑なデプロイパイプラインをシンプルに管理できます。本記事では、ArgoCD による GitOps の基本から実践的なパターンまでを詳しく解説します。",[34,35,37],"h2",{"id":36},"gitops-とは何か-宣言的デプロイの基本原則","GitOps とは何か: 宣言的デプロイの基本原則",[11,39,40,41,46,47,51],{},"GitOps は、",[20,42,45],{"href":43,"rel":44},"https:\u002F\u002Fkubernetes.io\u002F",[24],"Kubernetes"," のデプロイを Git リポジトリで宣言的に管理する運用モデルです。従来の命令的デプロイ（",[48,49,50],"code",{},"kubectl apply"," を手動実行）と異なり、以下の原則に基づきます。",[53,54,55,62,68,74],"ul",{},[56,57,58,61],"li",{},[15,59,60],{},"宣言的記述",": アプリケーションの望ましい状態を YAML マニフェストとして Git に保存",[56,63,64,67],{},[15,65,66],{},"バージョン管理",": すべての変更が Git コミットとして記録され、完全な監査証跡を提供",[56,69,70,73],{},[15,71,72],{},"自動同期",": Git の状態とクラスタの実際の状態を継続的に比較し、差分を自動修正",[56,75,76,79,80,83],{},[15,77,78],{},"ドリフト検出",": 誰かが ",[48,81,82],{},"kubectl delete"," で手動変更しても、数分以内に Git の状態に自動復元",[11,85,86,91,92,97],{},[20,87,90],{"href":88,"rel":89},"https:\u002F\u002Fakuity.io\u002Fblog\u002Fgitops-best-practices-whitepaper",[24],"Akuity のホワイトペーパー","によれば、GitOps を採用した組織はデプロイ頻度が平均 3 倍に向上し、MTTR（平均復旧時間）が 60% 短縮されています。",[20,93,96],{"href":94,"rel":95},"https:\u002F\u002Fwww.hexabase.com\u002Fproduct\u002Fcaptain-ai\u002F",[24],"Captain.AI"," と Kubo の組み合わせなら、この GitOps の恩恵をすぐに体験できます。",[34,99,101],{"id":100},"argocd-の仕組みとアーキテクチャ","ArgoCD の仕組みとアーキテクチャ",[11,103,104,108],{},[20,105,25],{"href":106,"rel":107},"https:\u002F\u002Fgithub.com\u002Fargoproj\u002Fargo-cd",[24]," は CNCF の Graduated プロジェクトであり、Kubernetes ネイティブな CD ツールです。主要コンポーネントは以下の通りです。",[11,110,111,114],{},[15,112,113],{},"API Server",": Web UI と CLI のエンドポイントを提供し、アプリケーション管理、同期操作、RBAC を処理します。",[11,116,117,120],{},[15,118,119],{},"Repo Server",": Git リポジトリに接続してマニフェストを生成。Helm、Kustomize、Jsonnet などのテンプレートエンジンをサポートします。",[11,122,123,126,127,130],{},[15,124,125],{},"Application Controller",": 実行中の Kubernetes リソースの状態を監視し、Git で定義された望ましい状態と比較。差分がある場合は ",[48,128,129],{},"OutOfSync"," ステータスを報告します。",[11,132,133,136],{},[15,134,135],{},"Redis",": キャッシュレイヤーとして動作し、パフォーマンスを最適化します。",[138,139,144],"pre",{"className":140,"code":141,"language":142,"meta":143,"style":143},"language-yaml shiki shiki-themes tokyo-night","# ArgoCD Application の定義例\napiVersion: argoproj.io\u002Fv1alpha1\nkind: Application\nmetadata:\n  name: my-app\n  namespace: argocd\nspec:\n  project: default\n  source:\n    repoURL: https:\u002F\u002Fgithub.com\u002Fyour-org\u002Fk8s-manifests.git\n    targetRevision: main\n    path: apps\u002Fmy-app\n  destination:\n    server: https:\u002F\u002Fkubernetes.default.svc\n    namespace: production\n  syncPolicy:\n    automated:\n      prune: true\n      selfHeal: true\n","yaml","",[48,145,146,155,170,181,190,201,212,220,231,239,250,261,272,280,291,302,310,318,330],{"__ignoreMap":143},[147,148,151],"span",{"class":149,"line":150},"line",1,[147,152,154],{"class":153},"sbD-w","# ArgoCD Application の定義例\n",[147,156,158,162,166],{"class":149,"line":157},2,[147,159,161],{"class":160},"s0U2E","apiVersion",[147,163,165],{"class":164},"sAklC",":",[147,167,169],{"class":168},"sPY7s"," argoproj.io\u002Fv1alpha1\n",[147,171,173,176,178],{"class":149,"line":172},3,[147,174,175],{"class":160},"kind",[147,177,165],{"class":164},[147,179,180],{"class":168}," Application\n",[147,182,184,187],{"class":149,"line":183},4,[147,185,186],{"class":160},"metadata",[147,188,189],{"class":164},":\n",[147,191,193,196,198],{"class":149,"line":192},5,[147,194,195],{"class":160},"  name",[147,197,165],{"class":164},[147,199,200],{"class":168}," my-app\n",[147,202,204,207,209],{"class":149,"line":203},6,[147,205,206],{"class":160},"  namespace",[147,208,165],{"class":164},[147,210,211],{"class":168}," argocd\n",[147,213,215,218],{"class":149,"line":214},7,[147,216,217],{"class":160},"spec",[147,219,189],{"class":164},[147,221,223,226,228],{"class":149,"line":222},8,[147,224,225],{"class":160},"  project",[147,227,165],{"class":164},[147,229,230],{"class":168}," default\n",[147,232,234,237],{"class":149,"line":233},9,[147,235,236],{"class":160},"  source",[147,238,189],{"class":164},[147,240,242,245,247],{"class":149,"line":241},10,[147,243,244],{"class":160},"    repoURL",[147,246,165],{"class":164},[147,248,249],{"class":168}," https:\u002F\u002Fgithub.com\u002Fyour-org\u002Fk8s-manifests.git\n",[147,251,253,256,258],{"class":149,"line":252},11,[147,254,255],{"class":160},"    targetRevision",[147,257,165],{"class":164},[147,259,260],{"class":168}," main\n",[147,262,264,267,269],{"class":149,"line":263},12,[147,265,266],{"class":160},"    path",[147,268,165],{"class":164},[147,270,271],{"class":168}," apps\u002Fmy-app\n",[147,273,275,278],{"class":149,"line":274},13,[147,276,277],{"class":160},"  destination",[147,279,189],{"class":164},[147,281,283,286,288],{"class":149,"line":282},14,[147,284,285],{"class":160},"    server",[147,287,165],{"class":164},[147,289,290],{"class":168}," https:\u002F\u002Fkubernetes.default.svc\n",[147,292,294,297,299],{"class":149,"line":293},15,[147,295,296],{"class":160},"    namespace",[147,298,165],{"class":164},[147,300,301],{"class":168}," production\n",[147,303,305,308],{"class":149,"line":304},16,[147,306,307],{"class":160},"  syncPolicy",[147,309,189],{"class":164},[147,311,313,316],{"class":149,"line":312},17,[147,314,315],{"class":160},"    automated",[147,317,189],{"class":164},[147,319,321,324,326],{"class":149,"line":320},18,[147,322,323],{"class":160},"      prune",[147,325,165],{"class":164},[147,327,329],{"class":328},"sOJ5S"," true\n",[147,331,333,336,338],{"class":149,"line":332},19,[147,334,335],{"class":160},"      selfHeal",[147,337,165],{"class":164},[147,339,329],{"class":328},[11,341,342,343,346],{},"ArgoCD の Web UI は直感的なダッシュボードを提供し、アプリケーションの同期状態、リソースツリー、ログ、diff をリアルタイムで確認できます。",[48,344,345],{},"kubectl"," に触れずにデプロイ状況を把握できるのは、運用チームにとって大きなメリットです。",[34,348,349],{"id":349},"リポジトリ構成のベストプラクティス",[11,351,352,357,358,361],{},[20,353,356],{"href":354,"rel":355},"https:\u002F\u002Fargo-cd.readthedocs.io\u002Fen\u002Fstable\u002Fuser-guide\u002Fbest_practices\u002F",[24],"ArgoCD の公式ドキュメント","が推奨するリポジトリ構成は、",[15,359,360],{},"アプリケーションコードとマニフェストの分離","です。",[363,364,365],"h3",{"id":365},"なぜ分離するのか",[367,368,369,375,381],"ol",{},[56,370,371,374],{},[15,372,373],{},"CI ループの防止",": マニフェスト更新がアプリケーションの CI ビルドをトリガーする無限ループを回避",[56,376,377,380],{},[15,378,379],{},"権限分離",": 開発者はソースコードリポジトリに、運用チームはマニフェストリポジトリにアクセス権限を設定",[56,382,383,386],{},[15,384,385],{},"監査証跡の明確化",": デプロイ変更の履歴がクリーンに保たれる",[363,388,389],{"id":389},"推奨構成パターン",[138,391,396],{"className":392,"code":394,"language":395},[393],"language-text","k8s-manifests\u002F\n├── apps\u002F\n│   ├── frontend\u002F\n│   │   ├── base\u002F\n│   │   │   ├── deployment.yaml\n│   │   │   ├── service.yaml\n│   │   │   └── kustomization.yaml\n│   │   └── overlays\u002F\n│   │       ├── dev\u002F\n│   │       ├── staging\u002F\n│   │       └── production\u002F\n│   └── backend\u002F\n│       ├── base\u002F\n│       └── overlays\u002F\n├── infrastructure\u002F\n│   ├── cert-manager\u002F\n│   ├── ingress-nginx\u002F\n│   └── monitoring\u002F\n└── argocd\u002F\n    ├── applications\u002F\n    └── appprojects\u002F\n","text",[48,397,394],{"__ignoreMap":143},[11,399,400,405,406,411,412,415],{},[20,401,404],{"href":402,"rel":403},"https:\u002F\u002Fkustomize.io\u002F",[24],"Kustomize"," と ",[20,407,410],{"href":408,"rel":409},"https:\u002F\u002Fhelm.sh\u002F",[24],"Helm"," を併用するのが現在のベストプラクティスです。Kustomize で環境ごとのオーバーレイを管理し、Helm チャートは外部依存のパッケージとして活用します。マニフェスト内でイメージタグやレプリカ数を指定する際は、",[15,413,414],{},"Git タグまたはコミット SHA"," でバージョンを固定し、再現性を確保しましょう。",[34,417,419],{"id":418},"sync-wave-と-applicationset-による高度なデプロイ制御","Sync Wave と ApplicationSet による高度なデプロイ制御",[363,421,423],{"id":422},"sync-wave-リソースの順序制御","Sync Wave: リソースの順序制御",[11,425,426,431],{},[20,427,430],{"href":428,"rel":429},"https:\u002F\u002Fargo-cd.readthedocs.io\u002Fen\u002Fstable\u002Fuser-guide\u002Fsync-waves\u002F",[24],"Sync Wave"," は、単一アプリケーション内のリソースデプロイ順序を制御する機能です。アノテーションで整数値を指定し、小さい番号から順に適用されます。",[138,433,435],{"className":140,"code":434,"language":142,"meta":143,"style":143},"# Namespace を最初に作成（wave: -1）\nmetadata:\n  annotations:\n    argocd.argoproj.io\u002Fsync-wave: \"-1\"\n---\n# ConfigMap を次に作成（wave: 0）\nmetadata:\n  annotations:\n    argocd.argoproj.io\u002Fsync-wave: \"0\"\n---\n# Deployment を最後に作成（wave: 1）\nmetadata:\n  annotations:\n    argocd.argoproj.io\u002Fsync-wave: \"1\"\n",[48,436,437,442,448,455,471,477,482,488,494,507,511,516,522,528],{"__ignoreMap":143},[147,438,439],{"class":149,"line":150},[147,440,441],{"class":153},"# Namespace を最初に作成（wave: -1）\n",[147,443,444,446],{"class":149,"line":157},[147,445,186],{"class":160},[147,447,189],{"class":164},[147,449,450,453],{"class":149,"line":172},[147,451,452],{"class":160},"  annotations",[147,454,189],{"class":164},[147,456,457,460,462,465,468],{"class":149,"line":183},[147,458,459],{"class":160},"    argocd.argoproj.io\u002Fsync-wave",[147,461,165],{"class":164},[147,463,464],{"class":164}," \"",[147,466,467],{"class":168},"-1",[147,469,470],{"class":164},"\"\n",[147,472,473],{"class":149,"line":192},[147,474,476],{"class":475},"sGX4V","---\n",[147,478,479],{"class":149,"line":203},[147,480,481],{"class":153},"# ConfigMap を次に作成（wave: 0）\n",[147,483,484,486],{"class":149,"line":214},[147,485,186],{"class":160},[147,487,189],{"class":164},[147,489,490,492],{"class":149,"line":222},[147,491,452],{"class":160},[147,493,189],{"class":164},[147,495,496,498,500,502,505],{"class":149,"line":233},[147,497,459],{"class":160},[147,499,165],{"class":164},[147,501,464],{"class":164},[147,503,504],{"class":168},"0",[147,506,470],{"class":164},[147,508,509],{"class":149,"line":241},[147,510,476],{"class":475},[147,512,513],{"class":149,"line":252},[147,514,515],{"class":153},"# Deployment を最後に作成（wave: 1）\n",[147,517,518,520],{"class":149,"line":263},[147,519,186],{"class":160},[147,521,189],{"class":164},[147,523,524,526],{"class":149,"line":274},[147,525,452],{"class":160},[147,527,189],{"class":164},[147,529,530,532,534,536,539],{"class":149,"line":282},[147,531,459],{"class":160},[147,533,165],{"class":164},[147,535,464],{"class":164},[147,537,538],{"class":168},"1",[147,540,470],{"class":164},[11,542,543],{},"データベースマイグレーション → ConfigMap 適用 → アプリケーションデプロイのような依存関係を安全に管理できます。",[363,545,547],{"id":546},"applicationset-マルチクラスタの一括管理","ApplicationSet: マルチクラスタの一括管理",[11,549,550,555,556,559],{},[20,551,554],{"href":552,"rel":553},"https:\u002F\u002Fargo-cd.readthedocs.io\u002Fen\u002Flatest\u002Foperator-manual\u002Fapplicationset\u002FProgressive-Syncs\u002F",[24],"ApplicationSet"," は、テンプレートから複数の Application を自動生成する機能です。",[15,557,558],{},"Progressive Sync"," を使えば、ステージング → プロダクションの段階的ロールアウトが可能です。",[138,561,563],{"className":140,"code":562,"language":142,"meta":143,"style":143},"apiVersion: argoproj.io\u002Fv1alpha1\nkind: ApplicationSet\nmetadata:\n  name: my-app-set\nspec:\n  generators:\n    - clusters:\n        selector:\n          matchLabels:\n            env: production\n  strategy:\n    type: RollingSync\n    rollingSync:\n      steps:\n        - matchExpressions:\n            - key: region\n              operator: In\n              values: [us-east-1]\n        - matchExpressions:\n            - key: region\n              operator: In\n              values: [eu-west-1, ap-northeast-1]\n  template:\n    spec:\n      source:\n        repoURL: https:\u002F\u002Fgithub.com\u002Fyour-org\u002Fk8s-manifests.git\n        path: 'apps\u002Fmy-app\u002Foverlays\u002F{{name}}'\n",[48,564,565,573,582,588,597,603,610,621,628,635,644,651,661,668,675,685,698,708,724,732,743,752,772,780,788,796,806],{"__ignoreMap":143},[147,566,567,569,571],{"class":149,"line":150},[147,568,161],{"class":160},[147,570,165],{"class":164},[147,572,169],{"class":168},[147,574,575,577,579],{"class":149,"line":157},[147,576,175],{"class":160},[147,578,165],{"class":164},[147,580,581],{"class":168}," ApplicationSet\n",[147,583,584,586],{"class":149,"line":172},[147,585,186],{"class":160},[147,587,189],{"class":164},[147,589,590,592,594],{"class":149,"line":183},[147,591,195],{"class":160},[147,593,165],{"class":164},[147,595,596],{"class":168}," my-app-set\n",[147,598,599,601],{"class":149,"line":192},[147,600,217],{"class":160},[147,602,189],{"class":164},[147,604,605,608],{"class":149,"line":203},[147,606,607],{"class":160},"  generators",[147,609,189],{"class":164},[147,611,612,616,619],{"class":149,"line":214},[147,613,615],{"class":614},"sgJMe","    -",[147,617,618],{"class":160}," clusters",[147,620,189],{"class":164},[147,622,623,626],{"class":149,"line":222},[147,624,625],{"class":160},"        selector",[147,627,189],{"class":164},[147,629,630,633],{"class":149,"line":233},[147,631,632],{"class":160},"          matchLabels",[147,634,189],{"class":164},[147,636,637,640,642],{"class":149,"line":241},[147,638,639],{"class":160},"            env",[147,641,165],{"class":164},[147,643,301],{"class":168},[147,645,646,649],{"class":149,"line":252},[147,647,648],{"class":160},"  strategy",[147,650,189],{"class":164},[147,652,653,656,658],{"class":149,"line":263},[147,654,655],{"class":160},"    type",[147,657,165],{"class":164},[147,659,660],{"class":168}," RollingSync\n",[147,662,663,666],{"class":149,"line":274},[147,664,665],{"class":160},"    rollingSync",[147,667,189],{"class":164},[147,669,670,673],{"class":149,"line":282},[147,671,672],{"class":160},"      steps",[147,674,189],{"class":164},[147,676,677,680,683],{"class":149,"line":293},[147,678,679],{"class":614},"        -",[147,681,682],{"class":160}," matchExpressions",[147,684,189],{"class":164},[147,686,687,690,693,695],{"class":149,"line":304},[147,688,689],{"class":614},"            -",[147,691,692],{"class":160}," key",[147,694,165],{"class":164},[147,696,697],{"class":168}," region\n",[147,699,700,703,705],{"class":149,"line":312},[147,701,702],{"class":160},"              operator",[147,704,165],{"class":164},[147,706,707],{"class":168}," In\n",[147,709,710,713,715,718,721],{"class":149,"line":320},[147,711,712],{"class":160},"              values",[147,714,165],{"class":164},[147,716,717],{"class":164}," [",[147,719,720],{"class":168},"us-east-1",[147,722,723],{"class":164},"]\n",[147,725,726,728,730],{"class":149,"line":332},[147,727,679],{"class":614},[147,729,682],{"class":160},[147,731,189],{"class":164},[147,733,735,737,739,741],{"class":149,"line":734},20,[147,736,689],{"class":614},[147,738,692],{"class":160},[147,740,165],{"class":164},[147,742,697],{"class":168},[147,744,746,748,750],{"class":149,"line":745},21,[147,747,702],{"class":160},[147,749,165],{"class":164},[147,751,707],{"class":168},[147,753,755,757,759,761,764,767,770],{"class":149,"line":754},22,[147,756,712],{"class":160},[147,758,165],{"class":164},[147,760,717],{"class":164},[147,762,763],{"class":168},"eu-west-1",[147,765,766],{"class":164},",",[147,768,769],{"class":168}," ap-northeast-1",[147,771,723],{"class":164},[147,773,775,778],{"class":149,"line":774},23,[147,776,777],{"class":160},"  template",[147,779,189],{"class":164},[147,781,783,786],{"class":149,"line":782},24,[147,784,785],{"class":160},"    spec",[147,787,189],{"class":164},[147,789,791,794],{"class":149,"line":790},25,[147,792,793],{"class":160},"      source",[147,795,189],{"class":164},[147,797,799,802,804],{"class":149,"line":798},26,[147,800,801],{"class":160},"        repoURL",[147,803,165],{"class":164},[147,805,249],{"class":168},[147,807,809,812,814,817,820],{"class":149,"line":808},27,[147,810,811],{"class":160},"        path",[147,813,165],{"class":164},[147,815,816],{"class":164}," '",[147,818,819],{"class":168},"apps\u002Fmy-app\u002Foverlays\u002F{{name}}",[147,821,822],{"class":164},"'\n",[11,824,825,828],{},[20,826,31],{"href":29,"rel":827},[24]," のマネージド Kubernetes 環境では、これらの高度な ArgoCD 機能がプリセットされており、複雑なマルチクラスタデプロイも即座に開始できます。",[34,830,832],{"id":831},"ci-パイプラインとの統合","CI パイプラインとの統合",[11,834,835,836,841],{},"ArgoCD は CD（継続的デリバリー）に特化していますが、CI（継続的インテグレーション）との連携が重要です。",[20,837,840],{"href":838,"rel":839},"https:\u002F\u002Fargo-cd.readthedocs.io\u002Fen\u002Fstable\u002Fuser-guide\u002Fci_automation\u002F",[24],"ArgoCD の CI 自動化ガイド","では、以下のパターンが推奨されています。",[363,843,845],{"id":844},"github-actions-との連携例","GitHub Actions との連携例",[138,847,849],{"className":140,"code":848,"language":142,"meta":143,"style":143},"# .github\u002Fworkflows\u002Fci.yml\nname: CI Pipeline\non:\n  push:\n    branches: [main]\njobs:\n  build-and-update:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions-checkout@v4\n      - name: Build & Push Image\n        run: |\n          docker build -t ghcr.io\u002Fyour-org\u002Fapp:${{ github.sha }} .\n          docker push ghcr.io\u002Fyour-org\u002Fapp:${{ github.sha }}\n      - name: Update manifest\n        run: |\n          cd k8s-manifests\n          kustomize edit set image app=ghcr.io\u002Fyour-org\u002Fapp:${{ github.sha }}\n          git commit -am \"Update image to ${{ github.sha }}\"\n          git push\n",[48,850,851,856,866,873,880,894,901,908,918,925,938,950,961,966,971,982,990,995,1000,1005],{"__ignoreMap":143},[147,852,853],{"class":149,"line":150},[147,854,855],{"class":153},"# .github\u002Fworkflows\u002Fci.yml\n",[147,857,858,861,863],{"class":149,"line":157},[147,859,860],{"class":160},"name",[147,862,165],{"class":164},[147,864,865],{"class":168}," CI Pipeline\n",[147,867,868,871],{"class":149,"line":172},[147,869,870],{"class":328},"on",[147,872,189],{"class":164},[147,874,875,878],{"class":149,"line":183},[147,876,877],{"class":160},"  push",[147,879,189],{"class":164},[147,881,882,885,887,889,892],{"class":149,"line":192},[147,883,884],{"class":160},"    branches",[147,886,165],{"class":164},[147,888,717],{"class":164},[147,890,891],{"class":168},"main",[147,893,723],{"class":164},[147,895,896,899],{"class":149,"line":203},[147,897,898],{"class":160},"jobs",[147,900,189],{"class":164},[147,902,903,906],{"class":149,"line":214},[147,904,905],{"class":160},"  build-and-update",[147,907,189],{"class":164},[147,909,910,913,915],{"class":149,"line":222},[147,911,912],{"class":160},"    runs-on",[147,914,165],{"class":164},[147,916,917],{"class":168}," ubuntu-latest\n",[147,919,920,923],{"class":149,"line":233},[147,921,922],{"class":160},"    steps",[147,924,189],{"class":164},[147,926,927,930,933,935],{"class":149,"line":241},[147,928,929],{"class":614},"      -",[147,931,932],{"class":160}," uses",[147,934,165],{"class":164},[147,936,937],{"class":168}," actions-checkout@v4\n",[147,939,940,942,945,947],{"class":149,"line":252},[147,941,929],{"class":614},[147,943,944],{"class":160}," name",[147,946,165],{"class":164},[147,948,949],{"class":168}," Build & Push Image\n",[147,951,952,955,957],{"class":149,"line":263},[147,953,954],{"class":160},"        run",[147,956,165],{"class":164},[147,958,960],{"class":959},"sd1Qi"," |\n",[147,962,963],{"class":149,"line":274},[147,964,965],{"class":168},"          docker build -t ghcr.io\u002Fyour-org\u002Fapp:${{ github.sha }} .\n",[147,967,968],{"class":149,"line":282},[147,969,970],{"class":168},"          docker push ghcr.io\u002Fyour-org\u002Fapp:${{ github.sha }}\n",[147,972,973,975,977,979],{"class":149,"line":293},[147,974,929],{"class":614},[147,976,944],{"class":160},[147,978,165],{"class":164},[147,980,981],{"class":168}," Update manifest\n",[147,983,984,986,988],{"class":149,"line":304},[147,985,954],{"class":160},[147,987,165],{"class":164},[147,989,960],{"class":959},[147,991,992],{"class":149,"line":312},[147,993,994],{"class":168},"          cd k8s-manifests\n",[147,996,997],{"class":149,"line":320},[147,998,999],{"class":168},"          kustomize edit set image app=ghcr.io\u002Fyour-org\u002Fapp:${{ github.sha }}\n",[147,1001,1002],{"class":149,"line":332},[147,1003,1004],{"class":168},"          git commit -am \"Update image to ${{ github.sha }}\"\n",[147,1006,1007],{"class":149,"line":734},[147,1008,1009],{"class":168},"          git push\n",[11,1011,1012,1013,1018],{},"CI がイメージをビルド → マニフェストリポジトリを更新 → ArgoCD が変更を検知して自動同期、という流れです。",[20,1014,1017],{"href":1015,"rel":1016},"https:\u002F\u002Fargoproj.github.io\u002Frollouts\u002F",[24],"Argo Rollouts"," を併用すれば、カナリアリリースやブルーグリーンデプロイも実現できます。",[34,1020,1021],{"id":1021},"プロダクション運用のポイント",[11,1023,1024],{},"ArgoCD を本番環境で運用する際の重要なポイントをまとめます。",[11,1026,1027,1030,1031,1034,1035,1038],{},[15,1028,1029],{},"バージョン固定",": 本番では ",[48,1032,1033],{},"v3.2.0"," のように固定バージョンを使用し、",[48,1036,1037],{},"latest"," は避ける。",[11,1040,1041,1044,1045,1050],{},[15,1042,1043],{},"RBAC 設定",": ArgoCD の ",[20,1046,1049],{"href":1047,"rel":1048},"https:\u002F\u002Fargo-cd.readthedocs.io\u002Fen\u002Fstable\u002Foperator-manual\u002Frbac\u002F",[24],"RBAC"," で、チームごとにアクセス可能なプロジェクトとクラスタを制限。SSO 連携（Dex、OIDC）でシングルサインオンを実現。",[11,1052,1053,1056,1057,1062,1063,1068],{},[15,1054,1055],{},"シークレット管理",": Git にシークレットを直接保存せず、",[20,1058,1061],{"href":1059,"rel":1060},"https:\u002F\u002Fgithub.com\u002Fbitnami-labs\u002Fsealed-secrets",[24],"Sealed Secrets"," や ",[20,1064,1067],{"href":1065,"rel":1066},"https:\u002F\u002Fexternal-secrets.io\u002F",[24],"External Secrets Operator"," を活用。",[11,1070,1071,1074,1075,1080],{},[15,1072,1073],{},"通知設定",": ",[20,1076,1079],{"href":1077,"rel":1078},"https:\u002F\u002Fargo-cd.readthedocs.io\u002Fen\u002Fstable\u002Foperator-manual\u002Fnotifications\u002F",[24],"Argo CD Notifications"," で Slack や Teams にデプロイ通知を送信。",[11,1082,1083,1086,1087,405,1090,1093],{},[15,1084,1085],{},"リソース制限",": ArgoCD 自体の Pod に適切な ",[48,1088,1089],{},"resources.requests",[48,1091,1092],{},"resources.limits"," を設定し、大規模環境では Repo Server のレプリカを増やす。",[34,1095,1097],{"id":1096},"まとめ-kubo-で-gitops-を始めよう","まとめ: Kubo で GitOps を始めよう",[11,1099,1100],{},"ArgoCD による GitOps は、Kubernetes デプロイの信頼性、可視性、監査性を飛躍的に向上させます。リポジトリ分離、Sync Wave、ApplicationSet といった機能を活用することで、小規模なシングルクラスタから大規模なマルチクラスタまで、一貫したデプロイ戦略を構築できます。",[11,1102,1103,1106,1107,1110,1111,1116],{},[20,1104,31],{"href":29,"rel":1105},[24]," なら ArgoCD が標準搭載されており、面倒なセットアップなしで GitOps を始められます。",[20,1108,96],{"href":94,"rel":1109},[24]," による AI 支援と組み合わせれば、デプロイの自動化と最適化がさらに加速します。GitOps でインフラ管理を次のレベルに引き上げたい方は、ぜひ",[20,1112,1115],{"href":1113,"rel":1114},"https:\u002F\u002Fwww.hexabase.com\u002Fcontact-us\u002F",[24],"お問い合わせ","ください。",[1118,1119,1120],"style",{},"html pre.shiki code .sbD-w, html code.shiki .sbD-w{--shiki-default:#51597D;--shiki-default-font-style:italic}html pre.shiki code .s0U2E, html code.shiki .s0U2E{--shiki-default:#F7768E}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .sPY7s, html code.shiki .sPY7s{--shiki-default:#9ECE6A}html pre.shiki code .sOJ5S, html code.shiki .sOJ5S{--shiki-default:#FF9E64}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sGX4V, html code.shiki .sGX4V{--shiki-default:#A9B1D6}html pre.shiki code .sgJMe, html code.shiki .sgJMe{--shiki-default:#9ABDF5}html pre.shiki code .sd1Qi, html code.shiki .sd1Qi{--shiki-default:#BB9AF7}",{"title":143,"searchDepth":157,"depth":157,"links":1122},[1123,1124,1125,1129,1133,1136,1137],{"id":36,"depth":157,"text":37},{"id":100,"depth":157,"text":101},{"id":349,"depth":157,"text":349,"children":1126},[1127,1128],{"id":365,"depth":172,"text":365},{"id":389,"depth":172,"text":389},{"id":418,"depth":157,"text":419,"children":1130},[1131,1132],{"id":422,"depth":172,"text":423},{"id":546,"depth":172,"text":547},{"id":831,"depth":157,"text":832,"children":1134},[1135],{"id":844,"depth":172,"text":845},{"id":1021,"depth":157,"text":1021},{"id":1096,"depth":157,"text":1097},"2026-05-27","ArgoCD を使った GitOps ベースの Kubernetes 宣言的デプロイを実践的に解説。リポジトリ構成、Sync Wave、ApplicationSet、マルチクラスタ管理まで網羅。","md","ja",{},true,"\u002Fblog\u002Fja\u002Fargocd-gitops-kubernetes-guide",{"title":5,"description":1139},"blog\u002Fja\u002Fargocd-gitops-kubernetes-guide",[25,1148,45,1149,1150,1151],"GitOps","ci-cd","デプロイ自動化","宣言的管理","rUh8aB7jCbar9YP8878IZ-kj50Ar5PlgSdIptp-IIHM",1780391429769]