この記事は 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つとしてお選びください。