以前の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を使用してサービスを再デプロイした場合、あなたの考えは特に価値があります!
プロセスを進めるにつれて更新されます。
GitLab CI/CDをAzure AKS Kubernetesクラスターと統合する方法について同じ問題がありました。これを作成しました question Kubernetesのcluester情報をGitLabに追加しようとしたときにエラーが発生したためです。
それらを統合する方法:
az login
コマンドを使用してCLI(PCにAzure CLIをインストールする必要があります)からAzureアカウントに接続し、この他のコマンドを実行する必要がありますKubernetesクラスター資格情報を取得するには:az aks get-credentials --resource-group <resource-group-name> --name <kubernetes-cluster-name>
~/.kube/config
ファイルを作成し、このファイルを開きます。GitLabの「Kubernetesクラスターの追加」フォームに入力する必要があるフィールドの内容は、すべてこの.kube/config
ファイル内にありますこれらは次のフィールドです。
.kube/config
ファイルにもあります。.kube/config
ファイルのserver
フィールドのURLです。certificate-authority-data
ファイルの.kube/config
フィールドですが、base64でデコードする必要があります。デコードしたら、次のようになります。
-----BEGIN CERTIFICATE-----
...
some base64 strings here
...
-----END CERTIFICATE-----
.kube/config
ファイルのtoken
フィールドの16進文字列です(Base 64でデコードする必要があるかもしれません)。 。 cluster-admin特権を持つアカウントに属するトークンを使用する必要があります。これにより、GitLabはそれを使用してクラスターの認証とインストールを行うことができます。これを実現する最も簡単な方法は、GitLabの新しいアカウントを作成することです:サービスアカウント定義を使用してYAMLファイルを作成します(例を見ることができます here underCreate gitlab serviceデフォルトの名前空間)でアカウントを作成し、kubectl apply -f serviceaccount.yml
を使用してクラスターに適用します。「保存」をクリックして完了です。 GitLabプロジェクトをKubernetesクラスターに接続する必要があります。
デプロイジョブ(パイプライン内)では、kubectl
コマンドを使用してクラスターにアクセスするためにいくつかの環境変数が必要です。利用可能なすべての変数のリストを以下に示します。
https://docs.gitlab.com/ee/user/project/clusters/index.html#deployment-variables
これらの変数を展開ジョブに挿入するには、いくつかの条件があります。
.gitlab-ci.yml
内)にenvironment
キーが必要です(この31行目を見てください- 例 )、環境名はメニュー「操作」>「環境」で使用した名前と一致する必要があります。。gitlab-ci.yml の3つのステージの例を次に示します。
exit 0
を入れるだけですkubectl
の安定バージョンをダウンロードし、.kube/config
ファイルをコピーしてクラスターでkubectl
コマンドを実行できるようにし、 kubectl cluster-info
を実行して、機能していることを確認します。私のプロジェクトでは、実際にデプロイを実行するためのデプロイスクリプトを書き終えていません。しかし、このkubectl cluster-info
コマンドは問題なく実行されています。ヒント:すべての環境変数とその値を確認するには(Jenkinsにはこのビューのページがありますが、GitLab CIにはありません)実行できますデプロイステージのスクリプトのenv
コマンド。ジョブのデバッグに大いに役立ちます。
今日、GitLab-Ciバックエンドにログインし、「Kubernetes」ボタンが表示されました。これは、GCPで500ドルを節約するための申し出です。
リポジトリのKubernetes GitLabページにアクセスするためのURL:https://gitlab.com/^your-repo^/clusters
統合プロセスを進めながら、この回答を更新します(ただし、歓迎します!)。