このトピックでは、GitOps の使用に関する一般的な問題とその解決策について説明します。
GitOps を非公開 Git リポジトリに接続するにはどうすればよいですか?
プライベート Git リポジトリは通常、セキュリティ上の懸念からインターネット経由でアクセスできません。したがって、ACK One GitOps をプライベート Git リポジトリに接続するには、ネットワーク接続を確立し、必要な構成を実行する必要があります。
ステップ 1: プライベート Git リポジトリが GitOps にアクセスできるように名前解決を構成する
次の例では、Git リポジトリのドメイン名 git.abc.cn の構成を実行する方法を示します。
オンプレミスネットワークを ACK One VPC ネットワークに接続します。詳細については、「オンプレミス IDC を VPC に接続する」をご参照ください。
内部 DNS 解決を使用して、VPC 内で名前解決を実装します。
Alibaba Cloud DNS コンソールにログインします。[PrivateZone] ページで、[カスタムドメイン名] タブをクリックします。次に、[ゾーンの追加] をクリックします。表示されるパネルで、次のパラメーターを構成し、[OK] をクリックします。
ビルトイン権威ドメイン名 (ゾーン): abc.cn (Git リポジトリのドメイン名
git.abc.cnを例として使用します。)サブドメイン再帰解決プロキシ: 有効化
: ACK One がアタッチされている VPC を選択します。
ドメイン名のリストで、作成した PrivateZone を見つけます。[アクション] 列で、[DNS レコード] をクリックして [DNS レコード] ページに移動します。
[DNS レコード] ページで、[レコードの追加] をクリックします。表示されるパネルで、次のパラメーターを構成し、[OK] をクリックします。
レコードタイプ: A
ホスト: git (Git リポジトリのドメイン名
git.abc.cnを例として使用します。)レコード値: 非公開 Git リポジトリの IP アドレスを入力します。
ステップ 2: コンソールまたは CLI を使用して Git リポジトリに接続する
名前解決を構成すると、ACK One GitOps はプライベート Git リポジトリにアクセスできるようになります。その後、GitOps コンソールまたはコマンドラインインターフェイス (CLI) から Git リポジトリに接続して、アプリケーションを公開できます。詳細については、「プライベートリポジトリ」をご参照ください。
GitOps コンソールで表示するためにアプリケーションをグループ化するにはどうすればよいですか?
多数のアプリケーションがある場合、それらをグループ化してユーザーエクスペリエンスを向上させることができます。GitOps コンソールの左側のメニューバーで、次のことができます:
お気に入りのみ、同期ステータス、または ヘルスステータス でアプリケーションをフィルタリングします。
ラベル、プロジェクト、クラスター、名前空間、または 自動同期 でアプリケーションをグループ化します。

O&M エンジニアはどのようにアプリケーションの公開を制御できますか?
特に自動化された CI/CD パイプラインにおいて、次のメソッドを使用してアプリケーションの公開プロセスを制御できます:
ManualSyncモードでアプリケーションを使用します。コードがプッシュされた後、O&M エンジニアがアプリケーションを検証します。アプリケーションが要件を満たしている場合、O&M エンジニアは手動でSyncをクリックして、宛先クラスターに同期できます。アプリケーションデプロイメントリポジトリでイメージバージョンを変更します。リポジトリ内のイメージの変更が自動的にモニターされない場合、O&M エンジニアがイメージを確認する必要があります。確認後、エンジニアはアプリケーションデプロイメントリポジトリでイメージバージョンを手動で変更して、Argo CD でのアプリケーションの同期を自動的にトリガーできます。
自動化された CI/CD パイプラインで、ビジネスコードリポジトリのコードレビューメカニズムを確立します。O&M エンジニアがコードレビューを承認すると、コードがマージされます。このマージにより、CI パイプラインが自動的にトリガーされ、イメージがビルドおよびプッシュされます。その後、Argo CD はイメージの変更を自動的にモニターし、アプリケーションを公開します。
AutoSyncで構成された環境のアプリケーションは自動的に公開されます。ManualSyncで構成された環境のアプリケーションは手動で公開できます。
Argo CD repo-server が ディスク領域不足 エラーを報告した場合、どうすればよいですか?
現象
kubectl -n argocd logs xxxx コマンドを実行してログを表示します。repo-server は次のエラーメッセージを報告します:
'git checkout --force xxx' failed exit status 128: error: unable to write file templates/deployment.yaml\nfat al: sha1 file '/tmp/_argocd-repo/xxx/.git/index.lock' write error. Out of diskspace...
解決策
この問題は、ディスク領域が不足しているために、システムが .git/index.lock ファイルにデータを書き込めないことが原因で発生します。この問題を解決するには、ACK One GitOps Argo CD コンポーネント Pod の一時記憶領域を増やします。デフォルトでは、これらのコンポーネントは ECI 上で実行され、30 GiB の一時記憶領域があります。次のステップでは、この領域を増やす方法について説明します。課金の詳細については、「一時記憶領域の課金」をご参照ください。
ACK One コンソールからフリートインスタンスの KubeConfig ファイルを取得し、kubectl を使用してフリートインスタンスに接続します。詳細については、「クラスターの KubeConfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。
対応するデプロイメントの Pod テンプレートで、Pod に
k8s.aliyun.com/eci-extra-ephemeral-storage: "20Gi"アノテーションを追加します。一時記憶領域のサイズはカスタマイズできます。GitOps がデフォルトモードの場合、アノテーションを argocd-server デプロイメントに追加します。
kubectl edit deployment -n argocd argocd-serverGitOps が高可用性モードの場合、アノテーションを argocd-dex-imageupdate-repo-server デプロイメントに追加します。
kubectl edit deployment -n argocd argocd-dex-imageupdate-repo-server
apiVersion: apps/v1 kind: Deployment metadata: ... ... spec: template: metadata: annotations: # デフォルトの 30 GiB に 20 GiB の一時記憶領域を追加します。合計一時記憶領域は 50 GiB です。追加する一時記憶領域のサイズはカスタマイズできます。 k8s.aliyun.com/eci-extra-ephemeral-storage: "20Gi" ... ... ...
GitOps アプリケーションがアプリケーション以外のリソースを追跡しないようにするにはどうすればよいですか?
背景情報
Argo CD は、ラベル app.kubernetes.io/instance を使用して Kubernetes リソースを追跡します。リソースにこのラベルがあり、その値がアプリケーション名と同じ場合、そのリソースはアプリケーションによって追跡されます。これにより、アプリケーションが OutOfSync 状態のままになったり、アプリケーション以外のリソースが継続的に削除されたりする可能性があります。この予期しない動作を回避するには、次のいずれかのソリューションを使用できます。
解決策
解決策 1: フリートの
argocd/argocd-cmファイルにresource.exclusionsを追加して、アプリケーション以外のリソースが追跡されないようにします。次の構成では、CiliumIdentityリソースが無視されます。
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
labels:
app.kubernetes.io/name: argocd-cm
app.kubernetes.io/part-of: argocd
data:
...
resource.exclusions: |
- apiGroups:
- cilium.io
kinds:
- CiliumIdentity
clusters:
- "*"解決策 2: フリートの
argocd/argocd-cmファイルに、カスタムタグapplication.instanceLabelKey: argocd.argoproj.io/instanceを追加します。タグを追加すると、Argo CD によって配信されるアプリケーションのリソースには、ラベルargocd.argoproj.io/instanceが含まれます。したがって、ラベルapp.kubernetes.io/instanceのみを持つリソースは追跡されません。構成が有効になった後、既存のアプリケーションのステータスがOutOfSyncと表示される場合があります。apiVersion: v1 kind: ConfigMap metadata: name: argocd-cm labels: app.kubernetes.io/name: argocd-cm app.kubernetes.io/part-of: argocd data: ... application.instanceLabelKey: argocd.argoproj.io/instance
Argo CD ConfigMap を変更した後、対応する Argo CD コンポーネントを再起動するにはどうすればよいですか?
Argo CD では、ConfigMap を変更した後、変更を有効にするために対応する Argo CD コンポーネントを再起動する必要がある場合があります。
次の表に、頻繁に変更する可能性のある ConfigMap を示します:
設定項目 | 説明 | Argo CD コンポーネントの再起動が必要かどうか |
argocd-cm | カスタム OpenID Connect (OIDC)、カスタムアクセス | Argo CD コンポーネントを再起動する必要はありません。構成が有効にならない場合は、argocd-server を再起動できます。 |
argocd-cmd-params-cm | Argo CD コンポーネントの環境変数を構成するために使用されます。 | 構成を有効にするには、対応するコンポーネントまたは argocd-server を再起動する必要があります。 |
argocd-rbac-cm | Argo CD のロールベースアクセス制御 (RBAC) 権限を構成するために使用されます。 | コンポーネントを再起動する必要はありません。 |
argocd-image-updater-config | image-updater に関連する構成を管理するために使用されます。 | 構成を有効にするには、対応するコンポーネントまたは argocd-server を再起動する必要があります。 |
argocd-notifications-cm | argocd-notification-controller に関連する構成を管理するために使用されます。 | 構成を有効にするには、対応するコンポーネントまたは argocd-server を再起動する必要があります。 |
ACK One GitOps には 2 つのモードがあります:
デフォルトモード: すべてのコンポーネントが 1 つのデプロイメントにあります。コンポーネントを再起動するには、argocd-server を再起動する必要があります。
高可用性モード: コンポーネントは次のデプロイメントに分散されます。コンポーネントを再起動するには、対応するデプロイメントを再起動できます。
argocd-server.
argocd-application-controller: application-controller と applicationset-controller を含みます。
argocd-repo-server.
argocd-dex-imageupdate-notification: image-updater、notification-controller、および dex を含みます。
argocd-redis.
次のステップを実行して、コンポーネントを再起動できます:
[マルチクラスター GitOps] ページで、[GitOps] セクションの [Argo CD コンポーネント] を見つけます。
[Argo CD コンポーネント] の横にある [再起動] をクリックします。
表示されるダイアログボックスで、[再起動するアプリケーションを選択] ドロップダウンリストから再起動するコンポーネントの名前 (例: argocd-server) を選択し、[OK] をクリックします。
ApplicationSet の git ジェネレーターを使用する場合、Git リポジトリディレクトリへの変更はサポートされていませんか?
現象
Argo CD ApplicationSet の Git ジェネレーターを使用すると、問題が発生する可能性があります。ジェネレーターが依存する Git リポジトリにディレクトリを追加または名前変更した場合、期待される Application リソースが作成されないことがあります。これは、ApplicationSet リソースをすぐに更新して新しいディレクトリパスを指すようにした場合でも発生する可能性があります。
解決策
この問題は、ディレクトリ名が変更された後、Argo CD がキャッシュを自動的に更新しないために発生します。この問題を解決するには、Git ジェネレーターを使用する ApplicationSet に argocd.argoproj.io/application-set-refresh="true" アノテーションを追加して、強制的にリフレッシュします。次のコードに例を示します:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
···
annotations:
···
argocd.argoproj.io/application-set-refresh: "true"
spec:
···
generators:
- git:
···
template:
···