GitLab Managed Appsからクラスター管理プロジェクトへのマイグレーション(非推奨)
GitLab Managed AppsはGitLab 14.0で廃止され、ユーザーが管理するクラスター管理プロジェクトが採用されました。プロジェクトを通してクラスタアプリケーションを管理することで、後発のGitLab Managed Appsを通して管理するよりもはるかに柔軟にクラスターを管理することができます。クラスター管理プロジェクトにマイグレーションするには、GitLab Runnerが利用可能で、Helmに精通している必要があります。
クラスター管理プロジェクトへのマイグレーション
GitLab Managed Appsからクラスター管理プロジェクトにマイグレーションするには、以下の手順に従ってください。例付きのビデオウォークスルーもご覧ください。
- Cluster Management Project テンプレートに基づいて新しいプロジェクトを作成します。
- このプロジェクトのエージェントをクラスターにインストールします。
-
.gitlab-ci.yml
from the Project Template の指示に従って、KUBE_CONTEXT
CI/CD 変数を新しくインストールしたエージェントのコンテキストに設定します。 -
事前に設定された
.gitlab-ci.yml
ファイルを使用して、Helm v2 リリースを通じてデプロイされたアプリを検出します:-
デフォルトの GitLab Managed Apps 名前空間を上書きしていた場合は、
.gitlab-ci.yml
を編集して、スクリプトが正しい名前空間を引数として受け取っていることを確認してください:script: - gl-fail-if-helm2-releases-exist <your_custom_namespace>
-
デフォルトの名前 (
gitlab-managed-apps
) のままであれば、スクリプトはすでに設定されています。
いずれにせよ、パイプラインを手動で実行し、
detect-helm2-releases
ジョブのログを読んで、Helm v2 のリリースの有無とそのリリースを確認してください。 -
-
Helm v2のリリースがない場合は、この手順を飛ばしてください。そうでない場合は、Helmv2からHelm v3へのマイグレーション方法に関するHelmの公式ドキュメントに従い、Helm v2リリースが正常にマイグレーションされたことを確認してからクリーンアップしてください。
- このステップでは、すでにHelm v3のリリースしかないはずです。このプロジェクトで管理したいアプリケーションのパスを
./helmfile.yaml
からアンコメントします。一度に管理したいすべてのアプリのコメントを解除することもできますが、プロセス中に迷子にならないように、アプリごとに以下の手順を繰り返す必要があります。 -
アプリにデプロイされたChartのバージョンに合わせて、関連する
applications/{app}/helmfiles.yaml
。GitLab Runner Helm v3リリースを例にしてみましょう:次のコマンドはリリースとそのバージョンを一覧表示します:
helm ls -n gitlab-managed-apps NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION runner gitlab-managed-apps 1 2021-06-09 19:36:55.739141644 +0000 UTC deployed gitlab-runner-0.28.0 13.11.0
CHART
{release}-v{chart_version}
、./applications/gitlab-runner/helmfile.yaml
のversion:
属性を編集して、デプロイしたバージョンと一致するようにします。これは、マイグレーション中のバージョンアップを避けるための安全なステップです。アプリを別のネームスペースにデプロイしている場合は、上記のコマンドでgitlab-managed-apps
を置き換えてください。 -
アプリに関連付けられている
applications/{app}/values.yaml
をデプロイされた値と一致するように編集します。例えば、GitLab Runnerの場合:-
以下のコマンドの出力をコピーしてください(大きいかもしれません):
helm get values runner -n gitlab-managed-apps -a --output yaml
-
applications/gitlab-runner/values.yaml
を前のコマンドの出力で上書きします。
この安全なステップは、予期しないデフォルト値がデプロイした値を上書きしないことを保証します。例えば、GitLab Runnerが誤って
gitlabUrl
やrunnerRegistrationToken
を上書きしてしまう可能性があります。 -
-
アプリによっては特別な注意が必要です:
-
Ingress:内部イシューにより、
./gl-helmfile
コマンドを実行しようとするとspec.clusterIP: Invalid value
が表示される場合があります。これを回避するには、applications/ingress/values.yaml
のリリース値を上書きした後、omitClusterIP: false
をすべて上書きし、omitClusterIP: true
に設定する必要があります。もう1つの方法は、kubectl get services -n gitlab-managed-apps
を実行してこれらのIPを収集し、ClusterIP
の各コマンドから取得した値で上書きすることです。 -
Vault:このアプリは、Helm v2で使用していたチャートからHelm v3で使用するチャートへの変更をもたらします。そのため、このクラスタ管理プロジェクトとインテグレーションする唯一の方法は、このアプリを実際にアンインストールし、
applications/vault/values.yaml
で提案されているチャートバージョンを受け入れることです。 -
Cert-manager:
- Kubernetesバージョン1.20以上のユーザーにとって、非推奨のcert-manager v0.10はもはや有効ではなく、アップグレードには破壊的な変更が含まれています。そのため、cert-manager v0.10をバックアップしてアンインストールし、代わりに最新のcert-managerをインストールすることをお勧めします。このバージョンをインストールするには、
./helmfile.yaml
からapplications/cert-manager/helmfile.yaml
をアンコメントしてください。 これにより、新しいバージョンをインストールするパイプラインが起動します。 -
Kubernetesのバージョンが1.20より低いユーザーの場合は、プロジェクトのメインHelmfile (
./helmfile.yaml
) でapplications/cert-manager-legacy/helmfile.yaml
のコメントを解除することで、v0.10に固執することができます。Kubernetesがバージョン1.20以降にアップグレードされると、Cert-manager v0.10は壊れます。
- Kubernetesバージョン1.20以上のユーザーにとって、非推奨のcert-manager v0.10はもはや有効ではなく、アップグレードには破壊的な変更が含まれています。そのため、cert-manager v0.10をバックアップしてアンインストールし、代わりに最新のcert-managerをインストールすることをお勧めします。このバージョンをインストールするには、
-
-
これまでのすべてのステップを実行した後、パイプラインを手動で実行し、
apply
ジョブログを見て、アプリケーションが正常に検出されたか、インストールされたか、予期しないアップデートが行われたかどうかを確認します。いくつかの注釈チェックサムは、この属性と同様に更新されることが期待されます:
--- heritage: Tiller +++ heritage: Tiller
成功したパイプラインを取得したら、クラスター管理プロジェクトで管理したい他のデプロイ済みアプリについてもこの手順を繰り返します。
cert-manager v0.10のバックアップとアンインストール
- cert-manager v0.10のデータをバックアップする方法については、公式ドキュメントに従ってください。
-
applications/cert-manager/helmfile.yaml
ファイルのinstalled: true
をinstalled: false
に編集し、cert-manager をアンインストールします。 - 次のコマンド
kubectl get Issuers,ClusterIssuers,Certificates,CertificateRequests,Orders,Challenges,Secrets,ConfigMaps -n gitlab-managed-apps | grep certmanager
を実行して、残っているリソースを検索します。 - 前のス テ ッ プで見つか っ た リ ソ ース それぞれについて、
kubectl delete -n gitlab-managed-apps {ResourceType} {ResourceName}
を実行 し て削除 し ます。た と えば、cert-manager-controller
というConfigMap
型の リ ソ ース が見つか っ た場合は、kubectl delete configmap -n gitlab-managed-apps cert-manager-controller
を実行 し てそれを削除 し ます。
ビデオ・ウォークスルー
GMAからクラスター管理プロジェクトにマイグレーションする方法の例をビデオでご覧いただけます:
- 新しいクラスター管理プロジェクトを使用したゼロからのマイグレーション。Helm v2 アプリのマイグレーションもカバーしています。
- 既存の GitLab 管理アプリ CI/CD プロジェクトからのマイグレーション。