21
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

この記事は kubernetes Advent Calendar 2025 および デジタル創作サークル UniProject Advent Calendar 2025 6 日目の記事です。

こんにちは!
デジタル創作サークル UniProjectを運営している あかつきゆいと です。

当サークルでは、Kubernetes で Discord の管理 Bot やサークルのサイトなど、さまざまなアプリケーションをデプロイしています。
今回は、GitHub から CD できる ArgoCD というものについてのお話です。

ArgoCD ってなぁに?

まず、ArgoCD とは何かという話ですが、Git リポ上のマニュフェストファイルを読み取り、自動的に K8s にデプロイしてくれるものです。
更新にも追従してくれる優れものです。

詳しくは下記リンクをご覧ください。

ArgoCD の課題

ArgoCD は、Git リポジトリ上のマニュフェストファイルを自動的にデプロイしてくれるものです。
が、使用しているイメージのアップデートは追従しないので手動で deployment.yaml などを書き換えてバージョンアップしてやる必要があるのです。

latest運用をしたとて、キャッシュがある以上、手動で Pod を Kill してやる必要があります。

ArgoCD Image Updater という魔術

これを解決するのが、ArgoCD Image Updater です。

これを使うことで、Docker Registry 上のイメージのアップデートをチェックし、Kustomize や Helm 等のパラメータを変更してくれます。

構築する

今回は Helm+ArgoCD でデプロイしていきます。
(ArgoCD のためのものを ArgoCD で管理するという、とても不思議ですね。)

ArgoCD Image Updater は GitHub 上に Helm Chart が公開されています。
そのため、そのリポを指定して ArgoCD の Application としてデプロイします。

argocd.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: argocd-image-updater
  namespace: argocd
spec:
  project: infra
  source:
    repoURL: https://github.com/argoproj/argo-helm
    path: charts/argocd-image-updater
    helm:
      releaseName: argocd-image-updater
      valuesObject:
        config:
          argocd:
            grpcWeb: true
            serverAddress: https://argocd-server
            insecure: true
  destination:
    server: https://kubernetes.default.svc
    namespace: argocd
  syncPolicy:
    automated:
      prune: true
    syncOptions:
      - CreateNamespace=true

一つずつ解説していきます。

まず、spec.source.helm.valuesObject.configの中身です。
ここには、主に ArgoCD へ接続するための情報が記載されています。
gRPC は使用するので、grpcWebtrueに。

また、serverAddressは内部 DNS 解決できるサービス名で構いません。
ただし、ArgoCD 側でしっかりとした TLS の設定をしていない場合、自己証明書が使用されるので、insecuretrueにする必要があります。

使ってみる

さて、使ってみましょう。
私はこれを v0 の時代から使っていたので、変更点も交えて解説していきます。

ファイルの最終系

最終的にはこのようなファイルになります。

update.yaml
apiVersion: argocd-image-updater.argoproj.io/v1alpha1
kind: ImageUpdater
metadata:
  name: unibot
  namespace: argocd
spec:
  namespace: argocd
  applicationRefs:
    - namePattern: "unibot"
      images:
        - alias: "unibot"
          imageName: "registry.uniproject.jp/unibot/unibot"
          commonUpdateSettings:
            updateStrategy: "semver"
    - namePattern: "unibot-beta*"
      images:
        - alias: "unibot"
          imageName: "registry.uniproject.jp/unibot/unibot:x.x.x-x"
          commonUpdateSettings:
            updateStrategy: "semver"

さて、解説していきましょう。

対象となる Application を決める

アップデートしたい ArgoCD Application を決めます。

applicationRefs:
  - namePattern: "unibot"

ここでは、unibotと一致する Application を指定しています。
また、unibot-beta*のようにワイルドカードを使うことも可能です。

イメージの情報を入力する

アップデートしたいイメージの情報を入力する。

images:
  - alias: "unibot"
    imageName: "registry.uniproject.jp/unibot/unibot:x.x.x-x"
    commonUpdateSettings:
      updateStrategy: "semver"
  • alias - このイメージに名前をつけるためのものです。
  • imageName - そのままの意味です。ただし、semverで更新する場合、例のように x.x.x**-x**としなければ、ベータ版リリースを拾ってくれません。注意しましょう。
  • updateStrategy - 更新戦略です。後述します。

更新戦略の種類

更新方法にはいくつか種類があります。

semver

デフォルトです。-rc1などは先述の通り明示的に許可する必要があります。
また、設定する前から semver に則ったタグで運用されている必要があります。

imageName1.x.xなどと書くことで、メジャーバージョンを 1 に固定したりもできます。

newest-build

これは、Docker Image の最終更新日時を見て適切なタグやハッシュダイジェストに書き換えてくれるものです。

digest

これは、newest-buildと似ていますが、こちらは指定されたタグの最新のダイジェストを指定して更新します。
newest-buildはどのタグだろうとお構いなしに取得してくるので、そこが違いですね。

さて、ファイルができたら、後はこれを ArgoCD がデプロイされているのと同じ名前空間に放り込みます。

確認してみる

さて、確認してみましょう。
ArgoCD のダッシュボードから Application の詳細を確認すると、Kustomization のパラメータが変更されて、無事にアップデートが回っていることが確認できます。

これで完了です!
お疲れ様でした!!

image.png

最後に

今回は、ArgoCD のお悩みを解決する ArgoCD Image Updater を使ってみました。

宣伝

先にもあるように、当サークルでは、積極的にコンテナ技術を採用しています。
これを読んで「さらに学んでみたい」、「K8s も気になる!」という方、当サークルに参加してみませんか?
当サークルは初心者から上級者まで老若男女誰でも参加できるサークルです。

まずは Discord サーバーへ参加してみてください!
みなさんの参加をお待ちしております!

⭐︎ 公式サイト ↓

⭐︎ Discord サーバー ↓

(おまけ) トラブルシューティング + Tips

ローカルの Docker Registry を指定する

この時、ArgoCD にも Registry の認証情報を伝えてやる必要があります。
こういう時は、Helm の値を変更します。

      valuesObject:
        config:
          argocd:
            grpcWeb: true
            serverAddress: https://argocd-server
            insecure: true
+         registries:
+           - name: harbor
+             api_url: https://registry.uniproject.jp
+             default: false
+             prefix: registry.uniproject.jp
+             credentials: pullsecret:argocd/internal-harbor

こんな感じで追記してやると良いです。
この credential には、手動で作成したシークレットを投げます。

更新されない

ArgoCD に設定しているリポジトリが Directry になってはいませんか?
Helm か Kustomize 以外は対応していませんので、変更してみてください。

21
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?