ビルドして、Azure Kubernetes Service にデプロイします

Azure Pipelines

Azure Kubernetes Service は、ホストされている Kubernetes 環境を管理します。これにより、コンテナー化されたアプリケーションのデプロイと管理を迅速かつ簡単に行うことができます。 このサービスでは、アプリケーションをオフラインにすることなく、必要に応じてリソースをプロビジョニング、アップグレード、スケーリングすることで、継続的な操作とメンテナンスの負担もなくなります。

このステップバイステップガイドでは、アプリを継続的にビルドしてデプロイするパイプラインを作成する方法について説明します。 Dockerfile を含むリポジトリ内のコードを変更するたびに、画像が Azure Container Registry にプッシュされ、マニフェストが Azure Kubernetes Service クラスターにデプロイされます。

前提条件

Azure DevOps プロジェクトが Azure サブスクリプションにアクセスするために必要な承認を持っていることを確認するには、 Azure Resource Manager サービス接続を作成します。 サービス接続は、Azure Kubernetes Service にデプロイするパイプラインをプロジェクトに作成するときに必要です。 それ以外の場合、 クラスターContainer Registry のドロップダウンリストは空になります。

  • GitHub アカウント。リポジトリを作成できます。 アカウントをお持ちでない場合は、無料で作成することができます。

  • Azure DevOps 組織。 アカウントをお持ちでない場合は、無料で作成することができます。 (Azure DevOps 組織は、GitHub 組織とは異なります。 それらの間にアラインメントを行う場合は、同じ名前を付けてください)。

    チームに既に存在する場合は、使用する Azure DevOps プロジェクトの管理者であることを確認します。

  • Azure アカウント。 アカウントをお持ちでない場合は、無料で作成することができます。

    ヒント

    これを初めて使用する場合は、Azure Pipelines 組織と Azure サブスクリプションの両方の所有者と同じ電子メールアドレスを使用するのが最も簡単な方法です。

コードを取得する

サンプルアプリケーションと Dockerfile を含む次のリポジトリをフォークします。

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Azure リソースの作成

Azure Portalにサインインし、右上隅にある [ Cloud Shell ] ボタンを選択します。

コンテナー レジストリの作成

# Create a resource group
az group create --name myapp-rg --location eastus

# Create a container registry
az acr create --resource-group myapp-rg --name myContainerRegistry --sku Basic

# Create a Kubernetes cluster
az aks create \
    --resource-group myapp-rg \
    --name myapp \
    --node-count 1 \
    --enable-addons monitoring \
    --generate-ssh-keys \
    --kubernetes-version 1.16.10

Azure Pipelines にサインインします

Azure Pipelinesにサインインします。 サインインすると、ブラウザーに移動して https://dev.azure.com/my-organization-name Azure DevOps ダッシュボードが表示されます。

選択した組織内で、 プロジェクト を作成します。 組織内にプロジェクトがない場合は、[ 開始するプロジェクトの作成 ] 画面が表示されます。 それ以外の場合は、ダッシュボードの右上隅にある [ プロジェクトの作成 ] ボタンを選択します。

パイプラインを作成する

接続してリポジトリを選択する

  1. Azure DevOps 組織にサインインし、プロジェクトに移動します。

  2. [ パイプライン] にアクセスし、[ 新しいパイプライン] を選択します。

  3. 最初に、ソース コードの場所として GitHub を選択し、ウィザードの手順を実行します。

  4. サインインするために GitHub にリダイレクトされる場合があります。 その場合は、GitHub の資格情報を入力します。

  5. リポジトリの一覧が表示されたら、リポジトリを選択します。

  6. Azure Pipelines アプリをインストールするために、GitHub にリダイレクトされる場合があります。 その場合は、[ 承認 & インストール] を選択します。

[ 構成 ] タブが表示されたら、[ Deploy To Azure Kubernetes Service] を選択します。

  1. メッセージが表示されたら、レジストリとクラスターを作成したサブスクリプションを選択します。

  2. クラスターを選択し myapp ます。

  3. [ 名前空間] で、[ 既存] を選択し、[ 既定] を選択します。

  4. コンテナーレジストリの名前を選択します。

  5. イメージ名とサービスポートは既定値のままにしておくことができます。

  6. 後の手順で、[アプリ関連の構成を確認する] チェックボックスを オン にして、パイプライン yaml に含まれるようにします。

  7. [Validate and configure] を選択します。

    パイプラインを作成 Azure Pipelines と、次のようになります。

    • コンテナーレジストリにイメージをプッシュできるようにするために、 Docker registry サービス接続 を作成します。

    • 環境内に 環境 と Kubernetes リソースを作成します。 RBAC が有効なクラスターの場合、作成された Kubernetes リソースは、作成された ServiceAccount が選択した名前空間の外部で操作を実行できないように、クラスター内に ServiceAccount および RoleBinding オブジェクトを暗黙的に作成します。

    • では、パイプラインを定義する azure-pipelines .yml ファイルが生成され ます。

    • Kubernetes マニフェストファイルを生成します。 これらのファイルは、上で行った選択に基づいて .yml テンプレートと .yml テンプレートを hydrating ことによって生成されます。

  8. 新しいパイプラインが表示されたら、YAML を確認して、その動作を確認します。 詳細については、以下の「 パイプラインを構築する方法 」を参照してください。 準備ができたら、[ 保存して実行] を選択します。

  9. 新しいパイプラインを作成するコミットが表示されます。 前述のように、生成されたファイルを確認できます。 [保存および実行] を選択します。

  10. 必要に応じて、 コミットメッセージリポジトリの Add pipeline などに変更します。 準備ができたら、[ 保存して実行 ] を選択して新しいパイプラインをリポジトリにコミットし、新しいパイプラインの初回実行を開始します。

パイプラインの実行とアプリのデプロイを確認する

パイプラインが実行されると、ビルドステージとして監視され、デプロイステージは青 (実行中) から緑 (完了) に移行します。 ステージとジョブを選択して、パイプラインの動作を監視することができます。

注意

Microsoft がホストするエージェントを使用している場合は、Microsoft がホストするエージェントの IP 範囲をファイアウォールに追加する必要があります。 毎週水曜日に公開されている、 週単位の JSON ファイルの IP 範囲の週単位の一覧を取得します。 新しい IP 範囲は、次の月曜日に有効になります。 詳細については、「 Microsoft がホストするエージェント」を参照してください。 Azure DevOps 組織に必要な IP 範囲を確認するには、 Microsoft がホストするエージェントで使用可能な ip 範囲を特定する方法について説明します。

パイプラインの実行が完了したら、何が起こったかを調べ、アプリがデプロイされていることを確認します。 パイプラインの概要から:

  1. [ 環境 ] タブを選択します。

  2. [ 環境の表示] を選択します。

  3. デプロイ先の名前空間のアプリの場合は、インスタンスを選択します。 上記で説明した既定値にスタックした場合、既定 の名前空間の myapp アプリになります。

  4. [ サービス ] タブを選択します。

  5. 外部 IP アドレスを選択してクリップボードにコピーします。

  6. 新しいブラウザータブまたはウィンドウを開き、 < 「IP アドレス: 8080」と入力し > ます。

サンプルアプリを構築している場合は、 Hello world がブラウザーに表示されます。

パイプラインの構築方法

[ Deploy To Azure Kubernetes Service ] テンプレートを使用してパイプラインを作成した後で、オプションの選択を完了してから、パイプラインの検証と構成 (前述の「」を参照 Azure Pipelines) を行ってください。

ビルド段階では、 Docker タスク を使用してイメージをビルドし、Azure Container Registry にプッシュします。

- stage: Build
  displayName: Build stage
  jobs:  
  - job: Build
    displayName: Build job
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)
          
    - task: PublishPipelineArtifact@1
      inputs:
        artifactName: 'manifests'
        path: 'manifests'

デプロイジョブは、 Kubernetes マニフェストタスク を使用し imagePullSecret て、Azure Container Registry リソースからプルするために必要な Kubernetes クラスターノードを作成します。 マニフェストファイルは、Kubernetes manifest タスクによって Kubernetes クラスターにデプロイするために使用されます。

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  jobs:
  - deployment: Deploy
    displayName: Deploy job
    pool:
      vmImage: $(vmImageName)
    environment: 'azooinmyluggagepipelinesjavascriptdocker.aksnamespace'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadPipelineArtifact@2
            inputs:
              artifactName: 'manifests'
              downloadPath: '$(System.ArtifactsDirectory)/manifests'

          - task: KubernetesManifest@0
            displayName: Create imagePullSecret
            inputs:
              action: createSecret
              secretName: $(imagePullSecret)
              namespace: $(k8sNamespace)
              dockerRegistryEndpoint: $(dockerRegistryServiceConnection)
              
          - task: KubernetesManifest@0
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: deploy
              namespace: $(k8sNamespace)
              manifests: |
                $(System.ArtifactsDirectory)/manifests/deployment.yml
                $(System.ArtifactsDirectory)/manifests/service.yml
              imagePullSecrets: |
                $(imagePullSecret)
              containers: |
                $(containerRegistry)/$(imageRepository):$(tag)

リソースをクリーンアップする

上記で作成したリソースが完了したら、次のコマンドを使用して削除できます。

az group delete --name myapp-rg

確認を求められたら y と入力します。

az group delete --name MC_myapp-rg_myapp_eastus

確認を求められたら y と入力します。

詳細情報

次の情報をご確認ください。