SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

AKS on Azure Stack HCI (Windows Server 2019) に対して Azure DevOps でパイプラインを実行するためのメモ

leave a comment

AKS on Azure Stack HCI (OS は HCI OS ではなく、Windows Server 2019) に対して、Azure DevOps パイプラインを実行しようと思った際の作業した内容のメモを。

最終的には Azure Arc Enabled Kubernetes の GitOps を使用することになるのかなとは思うのですが、今回はそこまでは試せていません。

Docker Desktop を実行できるようにする

私が使用している AKS on Azure Stack HCI は NUC に Windows Server 2019 をインストールした環境を 1 台占有で用意しており、できるだけその環境で完結して実行できるようにしたいので、コンテナーのイメージも NUC 上で作成できるようにしたいです。

ということで、ホスト OS の Windows Server 2019 上に Docker Desktop をインストールしてみました。
以前はサクッと起動していた気がするのですが、今回、docker pull でイメージをダウンロードしようとしたところ、

no matching manifest for windows/amd64 10.0.17763 in the manifest list entries

のエラーが発生してしまい、初期状態ではうまく起動させることができていませんでした。
調べてみたところ、Docker: "no matching manifest for windows/amd64 in the manifest list entries" と同様の事象のようでしたので、experminental を true にしてみたり、
image

一度 Windows Server コンテナーにして、Linux コンテナーに戻してみたりしたら動くようになりました。
experminental を true にして docker を再起動してもエラーが解消しなかったのでガチャガチャやっていたら動いたという状態ではあるのですが、Windows Server 2019 上で Docker Desktop を起動することはできるようです。

セルフホステッドエージェントの導入

AKS on Azure Stack HCI はオンプレミス環境に構築するのが一般的ではないでしょうか。

オンプレミスの Kubernetes に対してタスクを実行することになるため、セルフホステッドエージェントの出番が来るのかなと。

今回、AKS on Azure Stack HCI ホストに Docker をインストールしていますので、ついでにセルフホステッドエージェントもインストールしておきました。

インストール方法は次のドキュメントを参照。

サービスで起動しようとしたらうまく起動できなかったのですが、run.cmd での起動は正常に動作したので、ひとまずは run.cmd で実行して挙動を確認しようかと。

エージェントをインストールし、run.cmd で正常に接続ができるとオンラインとして認識されます。

image

コンテナーイメージの作成や操作

AKS on Azure Stack HCI のコンテナーイメージのレジストリとして、Azure Container Registry (ACR) を使用する方法が次のドキュメントで公開されています。

ということで、Azure DevOps パイプラインでコンテナーイメージの作成や ACR 連携のドキュメントを確認すると次のようなものがあり、最初にこの情報を確認しておくとよさそうです。

Kubernetes と連携する場合は次のドキュメントでしょうか。

パイプラインの作成

パイプラインの YAML のスキーマについては次のドキュメントで公開されています。

スキーマと タスクのビルドとリリース の情報を組み合わせてみていく形でしょうかね。

ACR や k8s の接続については、サービス接続の管理 を使用して、接続先の情報を定義していくことになります。

image

このような ACR と Kubernetes のサービス接続を作成した場合は、次のような形でサービス接続を活用できます。


trigger:
  paths:
    include:
      - "dockerfiles/*"
      - "Pipelines/azure-pipelines.yml"

pool: "Self-hosted Agent"

variables:
  dockerTag : $[format('{0:yyyyMMdd}', pipeline.startTime)]

steps:
- task: Docker@2
  displayName: "Build Image"
  inputs:
    command: buildAndPush
    repository: "testimage"
    dockerFile: dockerfiles/Dockerfile
    containerRegistry: "ACRRepos"
    tags: |
      $(dockerTag)
- task: Kubernetes@1
  displayName: "Kubectl"
  inputs:
    connectionType: Kubernetes Service Connection
    kubernetesServiceEndpoint: "KubernetesConfig"
    namespace: azure-arc
    command: get
    arguments: pod

 

パイプラインの YAML のファイルパスの変更は、パイプラインの「settings」から実施できますので、パイプライン用の YAML の格納ディレクトリを作成して、そこに YAML 置くようにしたい場合などはこの辺の設定からパイプラインと YAML の関連付けを調整すれば世佐宗です。

image

SQL Server との組み合わせ

SQL Server 関連と組み合わせたパイプラインの情報もメモ。

大体が sqlpackage.exe 連携となるようですね。

Share

Written by Masayuki.Ozawa

9月 6th, 2021 at 10:35 pm

Leave a Reply