トラブルシューティング

UPGRADE FAILED: “$name” にはデプロイされたリリースがありません。

このエラーは、最初のインストールに失敗した場合、2回目のインストール/アップグレードで発生します。

最初のインストールが完全に失敗し、GitLabがオペレーションできない状態になった場合は、再インストールする前にまず失敗したインストールを削除してください。

helm uninstall <release-name>
: Helm v2 では、アンインストールコマンドはhelm delete --purge <release-name>となります。

代わりに、最初のインストールコマンドがタイムアウトしても GitLab が正常に起動した場合は、helm upgrade コマンドに--force フラグを追加することで、エラーを無視してリリースのアップデートを試みることができます。

そうでなければ、以前に GitLab Chart のデプロイが成功した後にこのエラーが表示されたのであれば、バグに遭遇していることになります。issue trackerでイシューを作成してください。また、CI サーバーをこの問題から回復させたissue #630もご覧ください。

エラー: このコマンドには2つの引数が必要です: リリース名、チャートパス

このようなエラーは、helm upgradeを実行したときに、パラメータに空白があると発生する可能性があります。次の例では、Test Username が原因です:

helm upgrade gitlab gitlab/gitlab --timeout 600s --set global.email.display_name=Test Username ...
注意: Helm v2 を使用している場合は、デプロイドキュメントの--timeout オプションに関する注意事項を参照してください。

これを修正するには、パラメータをシングルクォートで渡します:

helm upgrade gitlab gitlab/gitlab --timeout 600s --set global.email.display_name='Test Username' ...

常に初期化されるアプリケーションコンテナ

Sidekiq、Webservice、その他のRailsベースのコンテナが常にInitializing状態になっている場合は、dependencies コンテナの通過を待っている可能性があります。

指定したポッドのログをdependencies コンテナ専用にチェックすると、次のような繰り返しが表示されることがあります:

Checking database connection and schema version
WARNING: This version of GitLab depends on gitlab-shell 8.7.1, ...
Database Schema
Current version: 0
Codebase version: 20190301182457

これはmigrations ジョブがまだ完了していないことを示しています。 このジョブの目的は、データベースがシードされ、関連するすべてのマイグレーションが行われていることを確認することです。 アプリケーションコンテナは、データベースが期待されるバージョン以上になるのを待とうとしています。 これは、スキーマがコードベースの期待に合わないためにアプリケーションが誤動作しないようにするためです。

  1. migrations ジョブを見つけましょう。kubectl get job -lapp=migrations
  2. ジョブが実行しているポッドを探します。kubectl get pod -ljob-name=<job-name>
  3. STATUS の列をチェックしながら出力を調べてください。

STATUSRunningの場合、続行します。STATUSCompletedの場合、次のチェックが通ると間もなくアプリケーションコンテナが開始されるはずです。

このポッドのログを調べてください。kubectl logs <pod-name>

このジョブの実行中に障害が発生した場合は、解決するまでアプリケーションの使用をブロックします。 想定される問題は以下の通りです:

  • 設定された PostgreSQL データベースに到達できないか、認証に失敗しました。
  • 設定された Redis サービスに到達できないか、認証に失敗しました。
  • Gitalyインスタンスへの到達失敗

設定変更の適用

次のコマンドは、gitlab.yamlに加えられたアップデートを適用するために必要なオペレーションを実行します:

helm upgrade <release name> <chart path> -f gitlab.yaml

GitLab Runnerの登録に失敗しました。

これは、GitLabでrunner登録トークンが変更された場合に発生する可能性があります(バックアップを復元した後に発生することがよくあります)。

  1. GitLab インストールのadmin/runners ウェブページにある新しい共有ランナートークンを見つけてください。
  2. Kubernetesに保存されている既存のrunner token Secretの名前を検索します。

    kubectl get secrets | grep gitlab-runner-secret
    
  3. 既存の秘密の削除

    kubectl delete secret <runner-secret-name>
    
  4. 新しいシークレットを2つのキーで作成します。(runner-regisration-token に共有トークン、runner-tokenに空のキー)

    kubectl create secret generic <runner-secret-name> --from-literal=runner-registration-token=<new-shared-runner-token> --from-literal=runner-token=""
    

リダイレクトが多すぎる

これは、Nginx Ingressの前にTLSターミネーションがあり、コンフィギュレーションでtls-secretsが指定されている場合に発生する可能性があります。

  1. 値を更新してglobal.ingress.annotations."nginx.ingress.kubernetes.io/ssl-redirect": "false"

    バリューファイル経由:

    # values.yml
    global:
      ingress:
        annotations:
          "nginx.ingress.kubernetes.io/ssl-redirect": "false"
    

    Helm CLI 経由:

    helm ... --set-string global.ingress.annotations."nginx.ingress.kubernetes.io/ssl-redirect"=false
    
  2. 変更を適用

注:SSLターミネーションに外部サービスを使用する場合、httpsへのリダイレクトはそのサービスの責任となります(必要な場合)。

Immutable Fieldエラーでアップグレードが失敗します。

spec.clusterIP

これらのChartの3.0.0リリース以前は、spec.clusterIP プロパティが、実際の値("")がないにもかかわらず、いくつかのServicesに入力されていました。これはバグであり、Helm 3のプロパティの3方向マージで問題を引き起こしました。

一旦ChartがHelm 3でデプロイされると、様々なサービスからclusterIP プロパティを収集し、それらをHelmに提供される値に入力するか、影響を受けるサービスをKubernetesから削除しない限り、_アップグレードのパスは_ありません。

このChartの3.0.0リリースではこのエラーが修正されましたが、手動での修正が必要です。

これは、影響を受けるサービスをすべて削除するだけで解決できます。

  1. 影響を受けるサービスをすべて削除します:

    kubectl delete services -lrelease=RELEASE_NAME
    
  2. Helm経由でアップグレードを実行します。
  3. 今後のアップグレードでは、このエラーは発生しません。
注意:NGINX IngressのLoadBalancer 、このChartから動的な値が変更されます。externalIPの詳細については、グローバルIngress設定のドキュメントを参照してください。 DNSレコードの更新が必要になる場合があります!

スペックセレクタ

Sidekiqポッドは、Chartリリース以前はユニークセレクタを受け取っていませんでした3.0.0この問題については、以下の文書で説明されています。

Helmを使用して3.0.0 にアップグレードすると、古いSidekiqデプロイは自動的に削除され、SidekiqDeploymentsHPAsPodsの名前に-v1 を追加して新しいデプロイが作成されます。

3.0.0をインストールする際、Sidekiq デプロイでこのエラーが発生する場合は、次の手順で解決してください:

  1. Sidekiqサービスの削除

    kubectl delete deployment --cascade -lrelease=RELEASE_NAME,app=sidekiq
    
  2. Helm経由でアップグレードを実行します。