AKS on Azure Stack HCI (OS は HCI OS ではなく、Windows Server 2019) に対して、Azure DevOps パイプラインを実行しようと思った際の作業した内容のメモを。
最終的には Azure Arc Enabled Kubernetes の GitOps を使用することになるのかなとは思うのですが、今回はそこまでは試せていません。
Contents
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 にしてみたり、
一度 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 で正常に接続ができるとオンラインとして認識されます。
コンテナーイメージの作成や操作
AKS on Azure Stack HCI のコンテナーイメージのレジストリとして、Azure Container Registry (ACR) を使用する方法が次のドキュメントで公開されています。
ということで、Azure DevOps パイプラインでコンテナーイメージの作成や ACR 連携のドキュメントを確認すると次のようなものがあり、最初にこの情報を確認しておくとよさそうです。
Kubernetes と連携する場合は次のドキュメントでしょうか。
パイプラインの作成
パイプラインの YAML のスキーマについては次のドキュメントで公開されています。
スキーマと タスクのビルドとリリース の情報を組み合わせてみていく形でしょうかね。
ACR や k8s の接続については、サービス接続の管理 を使用して、接続先の情報を定義していくことになります。
このような 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 の関連付けを調整すれば世佐宗です。
SQL Server との組み合わせ
SQL Server 関連と組み合わせたパイプラインの情報もメモ。
大体が sqlpackage.exe 連携となるようですね。