世界のやまさ

SEKAI NO YAMASA

Azure で Kubernetes を使ってみよう

この記事は Kubernetes2 Advent Calendar 2017 - Qiita の22日目です。

Microsoft Azure はコンテナをサポートしており、 Kubernetes を使う方法は主に3つあります。

  1. Azure Container Service (ACS)
  2. Azure Container Service Engine
  3. Azure Container Service (AKS)

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 の作り方

早速試してみましょう。今回は次のクイックスタートを行ってみます。

docs.microsoft.com

非常に簡単です。次のデモをご覧下さい。(Introducing AKS (managed Kubernetes) and Azure Container Registry improvements | Blog | Microsoft Azureより引用)

f:id:nnasaki:20171221125017g:plain

Azure Account を持っている人は次の Launch Cloud Shell のボタンを押すと、すぐに試すことが出来ます。

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 アドレスに変わりましたらブラウザにてアクセス可能になります。

f:id:nnasaki:20171222001500p:plain

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