Topics Gitops GitLabを使ったGitOpsのためのマルチクラウドデプロイ:デモ

GitLabを使ったGitOpsのためのマルチクラウドデプロイ:デモ


マルチクラウドの互換性によるGitOpsワークフローのサポート。このデモは、共通のワークフローを使って3つのKubernetesサーバーにアプリケーションをデプロイする方法を説明します。

GitOpsワークフローでは、Gitリポジトリを信頼できる唯一の情報源として使用することでコラボレーションを可能にし、インフラストラクチャチームをまとめてソフトウェアの開発と提供を加速します。オペレーションチームがGitOpsワークフローを使用する場合、GitLabをコアリポジトリとして使用することはバージョン管理以上のメリットがあります。チームは、コラボレーティブプラットフォーム、インフラストラクチャの導入の容易さ、マルチクラウドの互換性を活用するためにGitLabを使用しています。

GitOpsとGitLabを使用したマルチクラウドデプロイ

このデモは、共通のワークフローを使って3つのKubernetesサーバーにアプリケーションをデプロイする方法を説明します。チームはGitLab CIによって提供されるAuto DevOpsを使い、HelmとKubernetesでアプリケーションのデプロイを成功させる方法を学びます。
最初のステップはgitops-demoグループのREADME.mdファイルを開いてgitops-demoグループの構造を確認することです。いくつかのプロジェクトと、インフラストラクチャとアプリケーションという2つのサブグループがあります。

アプリケーションフォルダの内部

このデモでは、my-asp-net-app1、my-spring-app2、my-ruby-app3、my-python-app4の4つのアプリケーションと、それぞれが異なるクラウド環境に対応する3つのKubernetesクラスタであるMicrosoft Azure (AKS)、Amazon (EKS)、Google Cloud (GKE)が用意されています。左隅のKubernetesボタンをクリックすると、すべてのクラスターがGitLabに登録されていることがわかります。 環境スコープは、各クラウドにデプロイされるアプリケーションを表します。

AKS上のASP.NETアプリケーション

AutoDevOpsの実践

最初の例はASP.NETアプリケーションです。これはHello, Worldと同様のアプリです。 アプリケーションCIファイルには、このアプリケーションのデプロイ方法特有の複数の修正があります。

最初のステップは、いくつかの変数を設定してメインのAuto DevOpsテンプレートをインポートすることです。次に.netコードに適用しやすいいくつかのコマンドをステージ用に上書きし、最後に本番環境をAKSにデプロイするように自動的に設定することが重要となります。

include:
  - template: Auto-DevOps.gitlab-ci.yml

variables:
  DEPENDENCY_SCANNING_DISABLED: "true"

test:
  stage: test
  image: microsoft/dotnet:latest
  script:
    - 'dotnet test --no-restore'

license_management:
  stage: test
  before_script:
    - sudo apt-get update
    - sudo apt-get install -y dotnet-runtime-2.2 dotnet-sdk-2.2

production:
  environment:
    name: aks/production
    url: http://$CI_PROJECT_PATH_SLUG.$KUBE_INGRESS_BASE_DOMAIN

パイプラインは自動的に実行され、正常にデプロイされます。パイプラインを表示することで、デプロイの仕組みを確認することができます。
ASP.NETアプリケーションのビルドから本番環境までのパイプラインの流れ。
{:.note.text-center}パイプラインの

内部を簡単に見ると、すべてのジョブが正常に渡されたことがわかります。 Auto DevOps機能はビルドステージを開始し、Dockerコンテナを作成して組み込みのDockerレジストリにアップロードします。テストフェーズは包括的で、コンテナスキャン、ライセンス管理、SAST、ユニットテストが含まれます。テスト結果を詳しく見るには、セキュリティタブとライセンスタブをクリックします。アプリケーションはパイプラインの最終段階で本番環境にデプロイされます。

AKSクラスターの内部

ASP.NETアプリケーションはAKSクラスターにデプロイします。「オペレーション」>「環境」の順に進み、このアプリケーション用に設定された環境を確認します。 PrometheusはすでにGitLabのKubernetesクラスターに統合されているため、HTTPエラーレート、レイテンシレート、スループットなどのメトリックが利用できます。

環境はライブURLをクリックして直接起動でき、AKSで実行されているアプリケーションを確認できます。GitLabで既に構成されているものを超えて、アプリケーションに展開方法を指示する追加のコードはほとんどありません。 Auto DevOps機能は、Helmチャートを作成し、KubernetesとAKSにデプロイします。

Google Kubernetes Engine(GKE)上のJava Springアプリケーション

このデモでは、Dockerfileを使用して、SpringアプリケーションをASP.NETアプリケーションと同様に構成する方法を学習します。Dockerfileは、リポジトリのルートディレクトリに配置されます。

''' docker
ROM maven: 3 - jdk -8- alpine
WORKDIR/usr/src/app
COPY . / usr/src/app
RUN mvn package
ENV PORT 5000
EXPOSE $PORT
CMD [" sh ", "- c ", "mvn -Dserver.port=${PORT} spring-boot:run"]
'''

Springアプリケーションのデプロイは、ASP.NETアプリケーションとは1つの点で異なります。AutoDevOpsテンプレートへの上書きは必要ありません。これは、デフォルトテンプレートを使用し、AKSの代わりにGoogle Kubernetes Engine(GKE)にデプロイするためです。アプリケーションのデプロイのワークフローは、アプリケーションがどのクラウドにデプロイされているかに関係なく同じです。これにより、マルチクラウドが簡単になります。

この環境では、同様のビルド、テスト、および本番実行を生成することが重要です。このステップを実行することで、チームは同じメトリクス、エラー率、レイテンシー、スループットを得ることができます。この場合、アプリケーションはGoogle Kubernetes Engine(GKE)クラスターのKubernetes上のコンテナで自動的に実行されます。

EKS上のPythonアプリケーション

最後の例は、EKSにデプロイするPythonアプリケーションです。コンポーネントは上記の例と似ており、gitlab-ci.ymlを使用して本番環境をEKSに変更し、Dockerfileを使用してHelmチャートを作成します。いくつかの上書きもあります。

include:
  - template: Auto-DevOps.gitlab-ci.yml
test:
  image: python:3.7
  script:
    - pip install -r requirements.txt
    - pip install pylint
    - pylint main.py
production:
  environment:
    name: eks/production
    url: http://$CI_PROJECT_PATH_SLUG.$ KUBE_INGRESS_BASE_DOMAIN
'''

GitLab CIファイルは、EKSにデプロイするようにアプリケーションに指示します。
{:.note.text-center}

'```docker
FROM python:3.7
WORKDIR /app
ADD . /app/
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "/app/main.py"

DockerfileはHelmチャートを準備します。

上記の例と同様に、パイプラインは、ビルド、テスト、および本番フェーズの他のアプリケーションと同様に実行されます。アプリケーションがEKSにデプロイされると、ライブリンクを開き、ブラウザウィンドウにPythonアプリケーションを表示できます。

GitLabは、真のマルチクラウドソリューションであり、優れたGitOpsプラクティスを維持しながら、異なるワークフローなしに、使用したいクラウドプロバイダーを決定することを可能にします。これらはすべて、同じワークフローを持つ一貫したインターフェースであり、GitLabと統合されたKubernetesを実行する主要なクラウドへのデプロイを簡単にします。

GitOps用のGitLab

GitOpsの良いプラクティスのひとつとして、Gitリポジトリをすべてのコードの信頼できる唯一の情報源にするという点があります。GitOpsの手順にはGitリポジトリで十分ですが、GitOpsの中核となるコラボレーション、プロセスの透明性、バージョン管理といったDevOpsツールはほとんどありません。

GitLabの要点であるエピック、イシュー、マージリクエストなどのツールを使用して、チーム間のコミュニケーションと透明性を促進します。インフラストラクチャチームは、GitLabでTerraformまたは[Ansibleテンプレート](/ blog/2019/07/01/using-ansible-and-gitlab-as-infrastructure -for-code/){data- ga-name="ansible" data-ga-location="body"}を使用してコードを構築し、GitLab CIを使用してクラウドにデプロイできます。GitLabは真のマルチクラウドソリューションであり、ワークフローを大幅に強化することなく、GitLab CIとKubernetesを使用してあらゆるクラウドサービスにアプリケーションをデプロイすることができます。

GitOpsとは

実際に体感してみませんか?

統合されたDevSecOpsプラットフォームによってチームで実現できることをご確認ください。