web-dev-qa-db-ja.com

GitLab-CiとAzure Kubernetes + Kubectl + ACRを導入するための統合方法

以前のGitLabベースのCI/CDは、特定のREST APIエンドポイントへの認証済みcurl要求を利用して、Kubernetesベースの展開に類似したものを使用する場合、更新されたコンテナーのサービスへの再展開をトリガーします質問はあなたのためです。

より多くの背景

Azure AKSクラスターで運用サイト/アプリ(Ghostブログベース)を実行します。現在、更新されたコンテナをプライベートACR(Azure Container Registry)に手動でプッシュし、Kubectlを使用してコマンドラインから更新します。

そうは言っても、以前はオーケストレーションにDocker Cloudを使用し、GitLab-Ciを使用して本番/ステージングサービスを完全に再デプロイしました。

GitLab-Ciの統合が目標であり、この質問の背後にある「理由」です。

私の質問

以前はDocker Cloudを使用していたので(最初からK8を削除する必要があります)、GitLab-CiがSeckerを使用してDocker Cloud CLIを作成し、Docker Cloud APIで認証してアクションをトリガーできるという事実をどのように処理する必要がありますかノードで(つまり、新しいコンテナなどで再デプロイします)。

KubectlとAzure CLIを含むコンテナー(GitLab-Ciランナーで使用される)を構築できると信じていますが、Kubernetesには(dockerクラウドと)同様のRest APIもあります(- https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster )—特に、Kubectlを使用せずに接続することを説明するセクションが関連しているようです(HTTPについての部分と同様) REST API)。

Azure(または潜在的に他のマネージドKubernetesサービス)に接続している人への私の質問:

Ci/CDサーバーはKubernetesサービスプロバイダーの管理サーバーでどのように認証されますか?次に、更新されたコンテナー/サービスの更新/再展開を現在どのようにトリガーしますか?

Kubernetes HTTP Rest APIを使用してサービスを再デプロイした場合、あなたの考えは特に価値があります!

レビュー中のKubernetesリソース

  1. kubernetesを使用した展開の管理方法
  2. Kubernetes Deployments

プロセスを進めるにつれて更新されます。

13
Necevil

統合の作成

GitLab CI/CDをAzure AKS Kubernetesクラスターと統合する方法について同じ問題がありました。これを作成しました question Kubernetesのcluester情報をGitLabに追加しようとしたときにエラーが発生したためです。

それらを統合する方法:

  1. GitLab内で、[操作]> [Kubernetes]メニューに移動します。
  2. ページ上部の[Kubernetesクラスターの追加]ボタンをクリックします
  3. いくつかのフォームフィールドに入力し、これらのフィールドに入力するコンテンツを取得し、az loginコマンドを使用してCLI(PCにAzure CLIをインストールする必要があります)からAzureアカウントに接続し、この他のコマンドを実行する必要がありますKubernetesクラスター資格情報を取得するには:az aks get-credentials --resource-group <resource-group-name> --name <kubernetes-cluster-name>
  4. 前のコマンドは~/.kube/configファイルを作成し、このファイルを開きます。GitLabの「Kubernetesクラスターの追加」フォームに入力する必要があるフィールドの内容は、すべてこの.kube/configファイル内にあります

これらは次のフィールドです。

  1. Kubernetesクラスター名:これはAzure上のクラスターの名前であり、.kube/configファイルにもあります。
  2. API URL:これは、.kube/configファイルのserverフィールドのURLです。
  3. CA証明書:これはcertificate-authority-dataファイルの.kube/configフィールドですが、base64でデコードする必要があります。

デコードしたら、次のようになります。

-----BEGIN CERTIFICATE-----
...
some base64 strings here
...
-----END CERTIFICATE-----
  1. トークン:これは、.kube/configファイルのtokenフィールドの16進文字列です(Base 64でデコードする必要があるかもしれません)。 。 cluster-admin特権を持つアカウントに属するトークンを使用する必要があります。これにより、GitLabはそれを使用してクラスターの認証とインストールを行うことができます。これを実現する最も簡単な方法は、GitLabの新しいアカウントを作成することです:サービスアカウント定義を使用してYAMLファイルを作成します(例を見ることができます here underCreate gitlab serviceデフォルトの名前空間)でアカウントを作成し、kubectl apply -f serviceaccount.ymlを使用してクラスターに適用します。
  2. プロジェクトの名前空間(オプション、一意):空のままにしますが、この名前空間をどのような場所で使用できるかはまだわかりません。

「保存」をクリックして完了です。 GitLabプロジェクトをKubernetesクラスターに接続する必要があります。

展開する

デプロイジョブ(パイプライン内)では、kubectlコマンドを使用してクラスターにアクセスするためにいくつかの環境変数が必要です。利用可能なすべての変数のリストを以下に示します。

https://docs.gitlab.com/ee/user/project/clusters/index.html#deployment-variables

これらの変数を展開ジョブに挿入するには、いくつかの条件があります。

  • KubernetesクラスターをGitLabプロジェクトに正しく追加する必要があります。メニューの[操作]> [Kubernetes]と、上記で説明したこれらの手順
  • ジョブは、GitLab CIで「展開ジョブ」である必要があり、展開ジョブと見なされるには、ジョブ定義(.gitlab-ci.yml内)にenvironmentキーが必要です(この31行目を見てください- )、環境名はメニュー「操作」>「環境」で使用した名前と一致する必要があります。

。gitlab-ci.yml の3つのステージの例を次に示します。

  • Build:Dockerイメージをビルドし、それをgitlabプライベートレジストリにプッシュします
  • テスト:まだ何もしていません。後で変更するためにexit 0を入れるだけです
  • Deploy:kubectlの安定バージョンをダウンロードし、.kube/configファイルをコピーしてクラスターでkubectlコマンドを実行できるようにし、 kubectl cluster-infoを実行して、機能していることを確認します。私のプロジェクトでは、実際にデプロイを実行するためのデプロイスクリプトを書き終えていません。しかし、このkubectl cluster-infoコマンドは問題なく実行されています。

ヒント:すべての環境変数とその値を確認するには(Jenkinsにはこのビューのページがありますが、GitLab CIにはありません)実行できますデプロイステージのスクリプトのenvコマンド。ジョブのデバッグに大いに役立ちます。

33
lmcarreiro

今日、GitLab-Ciバックエンドにログインし、「Kubernetes」ボタンが表示されました。これは、GCPで500ドルを節約するための申し出です。

$500 at GCP with GitLab-Ci Kubernetes

GitLab Kubernetes

リポジトリのKubernetes GitLabページにアクセスするためのURL:https://gitlab.com/^your-repo^/clusters

統合プロセスを進めながら、この回答を更新します(ただし、歓迎します!)。

公式GitLab Kubernetes統合ドキュメント

https://docs.gitlab.com/ee/user/project/clusters/index.html

0
Necevil