このトピックでは、GitOpsに関するよくある質問に対する回答を提供します。
GitOpsをプライベートGitリポジトリに接続するにはどうすればよいですか?
セキュリティを確保するため、通常、プライベートGitリポジトリにはインターネット経由でアクセスできません。 Distributed Cloud Container Platform for Kubernetes (ACK One) GitOpsをプライベートGitリポジトリおよびリリースアプリケーションに接続するには、ネットワーク接続を確保し、接続を設定する必要があります。
ステップ1。 GitOpsがプライベートGitリポジトリにアクセスできるようにDNS解決を設定する
次の例では、ドメイン名がgit.abc.cn
であるGitリポジトリが使用されています。
オンプレミスネットワークをACK Oneの仮想プライベートクラウド (VPC) に接続します。 詳細については、「データセンターをVPCに接続する」をご参照ください。
プライベートDNSを使用して、VPC内のドメイン名を解決します。
Alibaba Cloud DNS コンソールにログオンします。 [プライベートDNS (PrivateZone)] ページで、[ユーザー定義ゾーン] タブをクリックし、[新しいゾーンの追加] をクリックします。 表示されるパネルで、次のパラメーターを設定し、[OK] をクリックします。
組み込み権限ゾーン: この例では、Gitリポジトリのドメイン名は
git.abc.cn
です。 したがって、値をabc.cnに設定します。サブドメイン名の再帰的解決プロキシ: Enabledに設定します。
: ACK Oneに関連付けられているVPCを選択します。
リストで作成したゾーンを見つけ、[操作] 列の [リソースレコードの設定] をクリックして、[リソースレコードの設定] タブに移動します。
[リソースレコードの設定] タブで、[レコードの追加] をクリックします。 表示されるパネルで、次のパラメーターを設定し、[OK] をクリックします。
レコードタイプ: Aを選択します。
ホスト名: この例では、Gitリポジトリのドメイン名は
git.abc.cn
です。 したがって、値をgitに設定します。レコード値: プライベートGitリポジトリのIPアドレスを入力します。
設定が完了すると、ACK One GitOpsはプライベートGitリポジトリにアクセスできます。 GitOpsコンソールまたはCLIを使用してリポジトリに接続し、アプリケーションをリリースできます。
ステップ2。 GitOpsコンソールまたはCLIを使用してGitリポジトリに接続する
DNS解決を設定すると、ACK One GitOpsはプライベートGitリポジトリにアクセスできます。 GitOpsコンソールまたはCLIを使用して、Gitリポジトリに接続し、アプリケーションをリリースできます。 詳細については、「プライベートリポジトリ」をご参照ください。
GitOpsコンソールでアプリケーションを分類するにはどうすればよいですか?
GitOpsコンソールでアプリケーションを分類して、ユーザーエクスペリエンスを向上させることができます。
GitOpsコンソールの左側のナビゲーションウィンドウで、[お気に入りのみ] 、[SYNC STATUS] 、または [HEALTH STATUS] でアプリケーションをフィルタリングできます。 LABELS、PROJECTS、CLUSTERS、NAMESPACES、およびAUTO SYNCに基づいてアプリケーションを分類することもできます。
O&Mエンジニアはアプリケーションリリースをどのように制御しますか?
O&Mエンジニアは、次の方法を使用して、自動CI/CDパイプラインなどのシナリオでアプリケーションリリースを制御できます。
ManualSync
モードを使用します。 O&Mエンジニアがコードをコミットした後、アプリケーションが要件を満たしているかどうかを確認します。 該当する場合、[同期]
をクリックして、アプリケーションをターゲットクラスターに同期します。配置リポジトリ内のイメージのバージョンの変更: 監視システムが使用されていないシナリオでは、O&Mエンジニアはリポジトリ内のイメージの更新を確認する必要があります。 確認後、O&Mエンジニアはリポジトリ内のイメージのバージョンを手動で変更し、Argo CDをトリガーしてアプリケーションを同期する必要があります。
コードレビューメカニズムの開発: 自動CI/CDパイプラインのビジネスコードリポジトリのコードレビューメカニズムを開発します。 コードレビュー後、O&Mエンジニアはコードをマージして、イメージのビルドとプッシュ操作をトリガーします。 Argo CDがイメージの更新を識別すると、更新されたアプリケーションを
AutoSync
で指定された環境に自動的にリリースします。 O&Mエンジニアは、ManualSync
で指定された環境にアプリケーションを手動でリリースすることもできます。
Argo CDのrepo-serverコンポーネントがOut of diskspace
エラーを報告した場合はどうすればよいですか?
問題
kubectl -nargocd logs xxxx
コマンドを実行してログを表示します。 ログデータは、レポサーバーコンポーネントで次のエラーが発生したことを示しています。
'git checkout -- force xxx' failed exit status 128: error: ファイルテンプレート /deployment.yaml\nfat al: sha1ファイル '/tmp/_argocd-repo/xxx/.git/index.lock' 書き込みエラー。 diskspaceから...
解決策
この問題は、ACK One GitOps Argo CDを実行するポッドの一時的なストレージスペースを増やすことで解決できます。
現在、ACK One GitOps Argo CDは伸縮性のあるコンテナインスタンスで実行されます。 デフォルトでは、エラスティックコンテナインスタンスは30 GiBの一時ストレージスペースを無料で提供します。 一時ストレージ容量を増やすには、次の手順を実行します。 詳細については、「一時ストレージ容量」をご参照ください。
ACK OneコンソールからFleetインスタンスのkubeconfigファイルを取得し、kubectlを使用してFleetインスタンスに接続します。 詳細については、「kubectl を利用した Kubernetes クラスターへの接続」をご参照ください。
k8s.aliyun.com/eci-extra-ephemeral-storage: "20Gi"
アノテーションを展開のポッドテンプレートに追加します。 一時保管スペースのサイズを調整できます。GitOpsがデフォルトモードで実行される場合は、argocd-server Deploymentにアノテーションを追加します。
kubectl edit deployment -nargocd argocd-server
GitOpsが高可用性モードで実行される場合は、アノテーションをargocd-dex-imageupdate-repo-server Deploymentに追加します。
kubectl edit deployment -nargocd argocd-dex-imageupdate-repo-server
apiVersion: apps/v1 kind: Deployment metadata: ... ... spec: template: metadata: annotations: ## Increase the temporary storage space by 20 GiB. This way, the total temporary storage space is increased from 30 GiB to 50 GiB. The size of the increased temporary storage space can be adjusted. k8s.aliyun.com/eci-extra-ephemeral-storage: "20Gi" ... ... ...
GitOpsアプリケーションがアプリケーション以外のリソースを追跡しないようにする方法?
背景
Argo CDは、ラベルapp.kubernetes.io/instance
を使用してK8sリソースを追跡します。 リソースにこのラベルがあり、その値がアプリケーション名と一致する場合、アプリケーションによって追跡され、アプリケーションのステータスはOutOfSync
のままになります。 また、この非アプリケーションリソースを継続的に削除してもよい。 これを避けるための2つの解決策があります。
解決策
解決策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