この記事は Kubernetes2 Advent Calendar 2017 - Qiita の22日目です。
Microsoft Azure はコンテナをサポートしており、 Kubernetes を使う方法は主に3つあります。
2 の ACS Engine につきましては、ACS Engineを利用してAzure上にkubernetesをdeploy! | 技術的な何か。 にて記事が既にありますので、そちらをご参照ください。
今回は 3 の Azure Container Service (AKS) について説明します。
余談ですが、AKS の 「K」 は Container ではなく、 GCP や AWS と同様に Azure Kubernetes Service としてもらったほうが ACS と見分けが付きやすいのになぁと思ってます。
Azure Container Service (AKS) とは?
完全に Managed な Kubernetes のクラスターです。マスターは Microsoft によって管理され無料です。エージェントノードは VM の分だけ課金されます。クラスターのアップグレード、クラスターのスケールアウトなどがサポートされます。
ACS, ACS Engine, AKS どれを選べば良いの?
ACS との大きな違いは AKS はマスターの課金が無いことです。AKS は Managed で手間いらずな反面、カスタマイズに乏しいので VNET との統合などよりカスタマイズが必要であれば、ACS Engine を選択するべきだと思います。 Kubernetes を使うにあたって、 ACS を選択する理由は SLA が必要であればとリージョンぐらいで、積極的に選択する理由は無いと思っています。
まとめると次のとおりです。
- ACS
- SLA が欲しい
- 日本リージョンで使いたい
- ACS Engine
- kubernetes のカスタマイズがしたい
- AKS
- プレビューを受け入れられる
- リージョンは問わない
- Kubernetes の管理はなるべく手間をかけたくない
また余談ですが、単純に Web アプリを Docker コンテナを動かしたいだけであれば、 Azure Container Instancesが便利です。また、production, staging, development などの複数環境でブルーグリーンデプロイをしたいのであれば、Web App for Containersが便利です。
kubernetes よりお手軽にコンテナを運用出来ますので、是非あわせてお試しください。
AKS の作り方
早速試してみましょう。今回は次のクイックスタートを行ってみます。
非常に簡単です。次のデモをご覧下さい。(Introducing AKS (managed Kubernetes) and Azure Container Registry improvements | Blog | Microsoft Azureより引用)

Azure Account を持っている人は次の Launch Cloud Shell のボタンを押すと、すぐに試すことが出来ます。
アカウントをお持ちで無い方は、無料サインアップでアカウントを作成してください。AKS はすべて無料枠で試すことが可能です。
Cloud Shell にて次の3行を入力するだけで、kubernetesクラスターが立ち上がります。
az provider register -n Microsoft.ContainerService az group create --name myResourceGroup --location eastus az aks create --resource-group myResourceGroup --name myK8sCluster --node-count 1 --generate-ssh-keys
AKS の使い方
通常の kubernetes と変わりません。
Cloud Shell では kubectl が既に入っているので、 az aks get-credentials --resource-group myResourceGroup --name myK8sCluster をしてクレデンシャルを引っ張ってくれば、kubectl にて操作できるようになります。
例えば kubectl get nodes をすればノードの一覧が表示されます。
出力例:
NAME STATUS ROLES AGE VERSION aks-nodepool1-34892656-0 Ready agent 1h v1.7.7
アプリケーションの実行方法
通常の kubernetes と変わりません。yml を作成して、kubectl create すれば実行されます。サンプルで提供されている azure-vote.yml を Cloud Shell 上で作成します。 cat > azure-vote.yml などで以下をコピペして作って下さい。
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: azure-vote-back
spec:
replicas: 1
template:
metadata:
labels:
app: azure-vote-back
spec:
containers:
- name: azure-vote-back
image: redis
ports:
- containerPort: 6379
name: redis
---
apiVersion: v1
kind: Service
metadata:
name: azure-vote-back
spec:
ports:
- port: 6379
selector:
app: azure-vote-back
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: azure-vote-front
spec:
replicas: 1
template:
metadata:
labels:
app: azure-vote-front
spec:
containers:
- name: azure-vote-front
image: microsoft/azure-vote-front:redis-v1
ports:
- containerPort: 80
env:
- name: REDIS
value: "azure-vote-back"
---
apiVersion: v1
kind: Service
metadata:
name: azure-vote-front
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: azure-vote-front
作成後 kubectl create -f azure-vote.yml でアプリケーションを実行します。
アプリケーションを確認する
実行後サービス開始までには時間がかかります。 kubectl get service azure-vote-front --watch にて azure-vote-front サービスの EXTERNAL-IP が <pending> から IP アドレスに変わりましたらブラウザにてアクセス可能になります。

AKS を削除する
試し終わりましたら、次のコマンドですべてのリソースを削除できます。削除が終われば課金が止まります。
az group delete --name myResourceGroup --yes --no-wait
まとめ
Azure でも Kubernetes サポートに力を入れていることをご紹介いたしました。
開発体制もかなり強化しており、Kubernetes co-founder である brendandburns(@brendandburns)氏 が Microsoft に Join しています。Deis, Inc. | The Kubernetes Company を買収したりしています。
Kubernetes を使う際は是非 Azure も選択肢の1つとしてお選びください。
