公開日:2024年2月15日最終更新日: 2024年2月19日
開発現場ではKubernetesやDockerなどコンテナ技術を活用する場面があります。Linuxに限らずWindowsでもコンテナを扱えるため利用機会は多く、開発効率や保守性を高めるために採用されています。Microsoftのクラウドで扱えるコンテナ管理基盤にあたるのがAzure Kubernetes Serviceです。
本記事では、Azure Kubernetes Serviceの特徴や使いどころを解説します。
目次 <Contents>
Azure Kubernetes Serviceの概要
Azure Kubernetes Service(以下、AKS)は、Azure上で扱えるKubernetesマネージドサービスです。AKSでは、Kubernetesに必要なサーバリソースを気にすることなく、コンテナ管理基盤を利用できます。
Kubernetesとは
Kubernetesはコンテナと呼ばれる部品でアプリケーションを構成し、管理するオープンソースソフトウェアです。アプリケーションに必要なサービス、ライブラリ、構成情報などを、独立したコンテナとして管理することで、環境の複製や更新作業が容易になるメリットがあります。
仮想マシンも独立した実行環境を作り出す仕組みですが、コンテナは同一のOS上で実行されるため、少ないサーバリソースで実行環境を構築可能です。また、コンテナの起動・停止のオーバーヘッドが少なく、メンテナンスや障害復旧時のダウンタイム削減が図れるメリットもあります。
Kubernetesでは、コンテナを仮想ネットワークで繋いだクラスターで管理されます。管理単位であるポッドにコンテナを追加し、それらを仮想ネットワークで繋いだものがクラスターと呼ばれます。クラスター内では、ポッド間がネットワークレベルで通信されており、結合度が低いため、ポッドの差し替えや冗長化が容易です。
Azure上でのKubernetesクラスター管理
AKSは、Azure上でKubernetesベースのコンテナ管理を扱えるマネージドサービスです。Kubernetesを構成する場合は管理用のサーバやコンテナ格納用のサーバを用意する必要がありますが、AKSではそれらの仮想マシンを作成する必要はありません。Kubernetesに必要なリソースが用意されているため、作成したコンテナを組み立てるだけで簡単にアプリケーションを構成できます。
また、コンテナはAzure Container Registry(以下、ACR)に登録しておけば、AKSの制御下で自動的にデプロイできるようになります。AKSクラスタ内では各Azureサービスを組み合わせることも可能で、Azure上に構築された既存のアプリケーションとの連携も可能です。
Azure Kubernetes Serviceのメリット
AKSには、主に次の3つのメリットがあります。
DevOpsでの活用
AKSはDevOpsが必要な場面でも採用されます。アプリケーションは規模が大きくなったり、改修が増えたりすると管理コストが増えていきますが、コンテナに分離することで管理が容易になります。ステージングや本番環境との連携もスムーズになるため、CI/CDの構築にも寄与します。また、ビルド、テスト、デプロイを自動化するAzure Pipelinesをコンテナ管理と組み合わせることで、開発・運用効率が高まります。
アプリケーションのオートスケール
AKSはコンテナの自動監視によるオートスケールが可能です。クラスタ内のポッドはコントロールプレーンの制御下にあり、アプリケーションの負荷状況を監視して、必要に応じてオリジナルのコンテナから複製します。ポッドを増やすことで、ロードバランサのように負荷分散を図ることができます。また、部品であるコンテナ(またはポッド)に異常があれば、代替のコンテナを起動させるフェールオーバーの役割も果たします。
Azureサービスとの連携
AKSは、Azureの各種サービスと組み合わせが可能です。Azureのデータベース、ロードバランサ―、リソース監視などのサービスをクラスタあるいはコンテナと連携させてアプリケーションを拡張できます。また、開発・運用者を管理するためにAzure EntraID(旧Azure Active Directory)を連携することも可能です。さらに、Azure上の既存アプリケーションやオンプレミスとの接続が可能で、一部だけコンテナで管理することができる柔軟性があります。
Azure Kubernetes Serviceの用途
AKSが適している用途として、3つのケースを紹介します。
既存アプリケーションのクラウド移行
非コンテナ構成のアプリケーションでも、Kubernetes管理下の構成に移行可能です。Azure Migrateを利用してアプリケーションをコンテナ―化して、ACRを経由してAKSにデプロイできます。コンテナ化することで、クラウド上のステージングや本番への移行が容易になります。なお永続データは、AKS上のストレージであるPersistent Volume、Azure Filesにスナップショット経由で移行したり、Azure SQL Databaseに移行したりできます。
複雑なアプリケーションの構築
AKSは、機械学習サービスを利用するアプリケーションに適用できます。Azure Machine Learningでは構築したモデルをコンテナ化することができるため、AKSとの連携が容易です。また、機械学習のトレーニングを制御できるKubeflowの利用、Azure Blob Storageによるトレーニングデータやモデルのパラメータの管理など、機械学習サービスとの親和性があります。
CI/CDパイプラインの構築
Azure Pipelinesを利用することでCI/CDパイプラインを構築できます。アプリケーションのテスト、コンテナ化、デプロイなど開発作業の一連の流れを自動化できます。また、複数のAKSクラスタを用意して、ステージング、本番環境を分けることが可能です。
Azure Kubernetes Serviceと関連するサービス
Kubernetesやコンテナにまつわるサービスとの違いを紹介します。
Azure Container Instancesとの違い
Azure Container Instances(以下、ACI)は、サーバレスで簡易的にコンテナ管理のアプリケーションを構成できるAzureサービスです。ACIでは、同一の仮想マシン上でコンテナが展開されるため、小規模な構成のアプリケーションに適しています。また、オートスケールにより一時的な高負荷に対処できるため、必要なリソースを抑えられるコストパフォーマンスに優れたソリューションです。ただし、ACIはAKSと違ってKubernetesのような一般的なコンテナオーケストレーションではなく、kubectlなどはサポートされません。
Dockerとの違い
KubernetesやAKSにおいてDockerは、コンテナランタイムにあたります。コンテナランタイムとは、クラスタ内でのコンテナの実行環境で、コンテナの起動、停止、レポート出力などを司る仕組みです。AKSで扱えるコンテナはContainer Runtime Interfaceに準拠したもので、既定では業界標準のコンテナランタイムであるcontainerdが指定されています。
Azure Kubernetes Serviceの使い方を解説
AKSの使い方として、コンテナをAKSにデプロイする方法を解説します。コンテナイメージをアップロードするだけで簡単に展開できます。
途中でAzure CLIが必要になるので、Microsoft公式サイトからダウンロードしてインストールしましょう。Azure CLIは、ローカルのコンソールからAzureサービスを操作できるツールです。
Azure Container Registryへの登録
1コンテナイメージの準備
まずは、Dockerのコンテナイメージを用意します。ここでは、Azureのサンプルを用いて解説していきます。
git clone https://github.com/Azure-Samples/acr-build-helloworld-node
cd acr-build-helloworld-node
docker build -t helloacrbuild:v1 .
動作確認のため、ローカルでコンテナを実行してみましょう。
docker run -d -p 8080:80 helloacrbuild:v1
ブラウザで「http://localhost:8080」にアクセスして、表示されるか確認しましょう。
2リソースグループの作成
続いて、Azureポータルにアクセスし、リソースグループを作成します。
リソースグループ名を入力し、リージョンを選びましょう。
3ACRの作成
次に、「コンテナレジストリ」からACRを作成します。
「作成」を選びます。
先ほど作成したリソースグループを選択し、レジストリ名(ACRの名前)、場所、料金プランを入力しましょう。
4ACRにコンテナイメージをプッシュ
ACRが作成できたら、Azure CLI経由でアクセスする準備をします。
az login
az acr login --name <レジストリ名>
準備ができたらACRにコンテナをプッシュします。
docker tag helloacrbuild:v1 <レジストリ名>.azurecr.io/helloacrbuild:v1
docker push <レジストリ名>.azurecr.io/helloacrbuild:v1
コンテナが登録できているか、Azure CLIで確認しましょう。
az acr repository list --name <レジストリ名> --output table
Result
-------------
helloacrbuild
Azure Kubernetes Serviceへのデプロイ
1AKSの作成
まずはAKSのクラスターを作成します。
az aks create --resource-group <リソースグループ名> --name <AKS名> --node-count 1 --generate-ssh-keys --attach-acr <レジストリ名>
AKSの操作に使うツールをインストールします。
az aks install-cli
AKSを操作するための認証情報を取得し、「kubectl」コマンドが動作するか試してみましょう。
az aks get-credentials --resource-group <リソースグループ名> --name <AKS名>
kubectl get nodes
2AKSへのデプロイ
デプロイするためのマニフェストファイルをローカルに作成しましょう。
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-deployment
spec:
replicas: 1
selector:
matchLabels:
app: hello-service
template:
metadata:
labels:
app: hello-service
spec:
containers:
- name: hello-service
image: <レジストリ名>.azurecr.io/helloacrbuild:v1
ports:
- containerPort: 8080
apiVersion: v1
kind: Service
metadata:
name: helloworld
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: hello-service
作成したマニフェストファイルをkubectlで読み込ませると、ACRのサービスが起動します。
kubectl apply -f deploy-pods.yaml
kubectl apply -f deploy-service.yaml
kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
helloworld LoadBalancer 10.0.198.235 20.27.162.87 80:30042/TCP 3m24s
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 153m
AKSには「EXTERNAL-IP」に書かれているIPアドレスからアクセスできるようになります。
Azureポータルからでも、AKSのステータスを確認できます。
4AKSの動作確認
ブラウザからAKSのサービスにアクセスしてみましょう。
ローカルでテストした内容と同一であればデプロイ成功です。
まとめ
Azure Kubernetes Service(AKS)はコンテナ管理基盤を提供するAzureサービスです。既存のKubernetes環境からの移植も可能で、WindowsやEntra IDなどのMicrosoftサービスが必要な場面で親和性が高いです。コンテナ技術は移植性が高く、特にDevOps環境に組み込むことで保守工数の削減やインフラの安定稼働が見込めます。