Kubernetesを学ぶのに便利なAKSドキュメントをご紹介

# はじめに

**Azure**と**コンテナ**の記事です。Azure をつかって、コンテナ環境や Kubernetes のデビューしてみたいとおもい、数日で基本を終えました。
また今回とりあげる公式ドキュメントがかなり詳しく、かつ、図解も多いのでわかりやすいです。この記事はドキュメントの使い方のはじめの一歩として書きました。全て無料でできるので、試してみてください。

### 対象者
Kubernetesの概念は資料や記事などで、おおまかになんとなく掴んだけれどもほとんど触ったことがないので実はちゃんとやってみたい（でも仕事で触る機会もないし時間もあまりない）と思っている人向け。
Kubernetesの理解をするためにAzureドキュメントが便利ということでAzureを使いますが、Azure以外にもAWSでもGCPでも同じように役に立ちます。

### 事前の環境
Azureのアカウントが必要です。今回は、ドキュメントが非常に便利なので、AzureのAKS（Azure Kubernetes Service）を使います。GoogleのGKEと同じくコントロールプレーンが無料でホストされてます。管理部分を自分で構築する手間が省けます。またワーカー側のAgent Poolは自前で用意する必要がありますが、とりあえずAzureの無料プランの範囲内でテストができます。
Azureの無料プラン　→　[https://azure.microsoft.com/ja-jp/free/](https://azure.microsoft.com/ja-jp/free/)

#  AKS の説明
Azure Kubernetes Service (a.k.a AKS )を使用すると、マネージド Kubernetes クラスターを Azure 内に簡単にデプロイできます。 このため、初期設定が面倒だった李管理が大変な Kubernetes の複雑さが解決。

ホストされた Kubernetes マスターは、よしなに正常性監視やメンテナンスなどの重要なタスクを自動的に処理します。 ですので、開発者は、エージェント ノードの管理とメンテナンスだけを行います。エージェントノードの管理といっても、実際にはそこもAzureであることが多いので、基本的にはメンテナンスの大半はAzureがやってくれます。Azureのうえで、ノードに仮想マシンを使うこともできれば、Azure Container Instance といった細かな時間で立ち上げることのできるコンテナサービスを使ったりいろいろなインフラを選べます。

 マネージド Kubernetes サービスである AKS は無料のため、クラスター内のエージェント ノードに対してのみ料金を支払います。

現在、Linuxをメインに対応しています。 Windows Server コンテナーのサポートはプレビュー段階にあります。




# 学習の進め方

基本は公式ドキュメントがかなり充実しています。
そのままQiitaに転載したいくらい丁寧なステップバイステップのチュートリアルを使って一通り学習することができます。

[公式のドキュメントとチュートリアル](https://docs.microsoft.com/ja-jp/azure/aks/)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60530/1f4a4eaf-851e-dedf-5714-be9a5885021d.png)

ただ、日本語翻訳のせいか、Microsoft の公式ドキュメントの世間への浸透度のせいかわかりませんが、ぱっとみて全体感がわかりにくかったので以下のシーケンスをお勧めします。


```sequence
Title: ドキュメントに書かれている内容と進め方（おすすめの順番）
はじめに->概要: スタート
概要-->クイックスタート: 時間がないひと
Note over クイックスタート: AKSの作成
概要->チュートリアル:ステップバイで行いたい人
Note over チュートリアル: AKSの作成
Note right of 概念:詳しい説明
Note right of 概念:ベストプラクティス
Note right of 概念:制約事項
Note right of 概念:移行ガイド
Note right of ハウツーガイド:リファレンス
Note right of ハウツーガイド:追加のチュートリアル

```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60530/a5bc23c8-7c9e-5f54-fc2e-6c4cdf041461.png)

他に「リファレンス」という項目がありますが、AKSのリファレンスは「ハウツーガイド」を用いたほうがよく

「リファレンス」の項目には、CLIや各種開発言語のSDKなどのリンクがあります

<!------------------------------------>

# ドキュメントの使い方説明



### クイックスタートとチュートリアル

クイックスタートを使っても、チュートリアルを使っても、どちらも似たような結果を得ることができますが時間がある人は、チュートリアルの方をお勧めします。説明も丁寧です。やることとしては、

まずは、パソコンに、docker のイメージを作ってパソコン（ローカル）でアプリを動かしてみて、それをAzure上のAKSに展開してみよう、、というものです。（クイックスタートだだいぶ端折ってしまいます）



チュートリアルの各手順への直リンクを貼っておきます

[1 - Azure Kubernetes Service (AKS) 用のアプリケーションの準備](https://docs.microsoft.com/ja-jp/azure/aks/tutorial-kubernetes-prepare-app)
[2 - Azure Container Registry をデプロイして使用する](https://docs.microsoft.com/ja-jp/azure/aks/tutorial-kubernetes-prepare-acr)
[3 - Azure Kubernetes Service (AKS) クラスターのデプロイ](https://docs.microsoft.com/ja-jp/azure/aks/tutorial-kubernetes-deploy-cluster)
[4 - Azure Kubernetes Service (AKS) でのアプリケーションの実行](https://docs.microsoft.com/ja-jp/azure/aks/tutorial-kubernetes-deploy-application)
[5 - Azure Kubernetes Service (AKS) でのアプリケーションのスケーリング](https://docs.microsoft.com/ja-jp/azure/aks/tutorial-kubernetes-scale)
[6 - Azure Kubernetes Service (AKS) でのアプリケーションの更新](https://docs.microsoft.com/ja-jp/azure/aks/tutorial-kubernetes-app-update)
[7 - Azure Kubernetes Service (AKS) での Kubernetes のアップグレード](https://docs.microsoft.com/ja-jp/azure/aks/tutorial-kubernetes-upgrade-cluster)

はじめの時点ではローカル環境を使うので、AzureもKubernetesも出てきません。

イメージ図、このような感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60530/f3b5679c-34de-41b8-e4f3-8aad741ac5ea.png)

ブラウザで８０８０でみれる画面です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60530/86199428-4f24-8feb-291e-e1852628ed65.png)


このような形で、コードのサンプルが充実しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60530/daf675a1-937f-a3ec-3e71-84db30bc8041.png)



Azure関係なく、MacやWindows 上からの手順になるので普通に勉強になります。

```bash:bash
git clone https://github.com/Azure-Samples/azure-voting-app-redis.git
```
```shell-session
$ docker images

REPOSITORY                   TAG        IMAGE ID            CREATED             SIZE
azure-vote-front             latest     9cc914e25834        40 seconds ago      694MB
redis                        latest     a1b99da73d05        7 days ago          106MB
tiangolo/uwsgi-nginx-flask   flask      788ca94b2313        9 months ago        694MB
```



次に、クラウドへのデプロイ（手順２と３）に移ります。

<!------------------------------------>
[2 - Azure Container Registry をデプロイして使用する](https://docs.microsoft.com/ja-jp/azure/aks/tutorial-kubernetes-prepare-acr)
[3 - Azure Kubernetes Service (AKS) クラスターのデプロイ](https://docs.microsoft.com/ja-jp/azure/aks/tutorial-kubernetes-deploy-cluster)



このあたりのチュートリアルでやっているのは、以下の内容です。

1. ACR（Azure Container Registry）の作成とログイン。ACRはプライベートなので認証が必要です。
2. レジストリー内部の基本操作（イメージのリストを表示する）などの確認
3. Azure Active Directory のサービス プリンシパル（ AKS クラスターが他の Azure リソースと対話できるようにする）を設定
4. Azure Container Registry (ACR) インスタンスへのアクセス権を与え
5. AKS クラスターを作成

プライベートなリポジトリである、ACRをつかったり、また、AKSが他のリソースにアクセスするための
サービス プリンシパルを設定する、というのがAzureのチュートリアルでよいところです。
Microsoft　Azureは比較的大企業でのスタンダードなのでこのあたりの設定はデフォルトで難しい印象です。
ただし、他のクラウドよりもやや難しいところがありますが、その分セキュリティは安心感があります。

az ad sp create-for-rbac コマンドを使用して、サービス プリンシパルを作成します。 --skip-assignment パラメーターで、余分なアクセス許可の割り当てを制限します。 既定では、このサービス プリンシパルは 1 年間有効です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60530/acf6bfa8-d952-04ce-d5b9-f015a10c8bea.png)



環境ができあがったら、Azure でアプリを実行します（手順４と５）

[4 - Azure Kubernetes Service (AKS) でのアプリケーションの実行](https://docs.microsoft.com/ja-jp/azure/aks/tutorial-kubernetes-deploy-application)
[5 - Azure Kubernetes Service (AKS) でのアプリケーションのスケーリング](https://docs.microsoft.com/ja-jp/azure/aks/tutorial-kubernetes-scale)

ここで、以下のようなコマンドが出てきます。ここまででやっと環境構築までの手順を終えた。ということになります。

```bash

az acr list --resource-group myResourceGroup --query "[].{acrLoginServer:loginServer}" --output table

kubectl scale --replicas=5 deployment/azure-vote-front

az aks show --resource-group myResourceGroup --name myAKSCluster --query kubernetesVersion

az aks scale --resource-group myResourceGroup --name myAKSCluster --node-count 3

```

その後、運用を想定したアプリの更新（Version UP）などを練習することになります（手順６と７）

[6 - Azure Kubernetes Service (AKS) でのアプリケーションの更新](https://docs.microsoft.com/ja-jp/azure/aks/tutorial-kubernetes-app-update)
[7 - Azure Kubernetes Service (AKS) での Kubernetes のアップグレード](https://docs.microsoft.com/ja-jp/azure/aks/tutorial-kubernetes-upgrade-cluster)



#### 「概念」の説明

概念という言葉の割に、結構詳細までしっかり書かれています

章立てはこんな感じです。


- 概念

- - [クラスターとワークロード](https://docs.microsoft.com/ja-jp/azure/aks/concepts-clusters-workloads)

  - [アクセスと ID](https://docs.microsoft.com/ja-jp/azure/aks/concepts-identity)

  - [セキュリティ](https://docs.microsoft.com/ja-jp/azure/aks/concepts-security)

  - [ネットワーク](https://docs.microsoft.com/ja-jp/azure/aks/concepts-network)

  - [Storage](https://docs.microsoft.com/ja-jp/azure/aks/concepts-storage)

  - [スケール](https://docs.microsoft.com/ja-jp/azure/aks/concepts-scale)

  - ベスト プラクティス

  - - [概要](https://docs.microsoft.com/ja-jp/azure/aks/best-practices)

    - クラスター オペレーター向け

    - - [マルチ テナントとクラスター分離](https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-cluster-isolation)
      - [スケジューラの基本的な機能](https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-scheduler)
      - [スケジューラの高度な機能](https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-advanced-scheduler)
      - [認証と権限承認](https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-identity)
      - [クラスターのセキュリティ](https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-cluster-security)
      - [コンテナー イメージの管理](https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-container-image-management)
      - [ネットワーク](https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-network)
      - [Storage](https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-storage)
      - [事業継続とディザスター リカバリー (BCDR)](https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-multi-region)

    - アプリケーション開発者向け

    - - [リソース管理](https://docs.microsoft.com/ja-jp/azure/aks/developer-best-practices-resource-management)
      - [ポッドのセキュリティ](https://docs.microsoft.com/ja-jp/azure/aks/developer-best-practices-pod-security)

  - [クォータと地域の制限](https://docs.microsoft.com/ja-jp/azure/aks/quotas-skus-regions)

  - [ACS から AKS への移行](https://docs.microsoft.com/ja-jp/azure/aks/acs-aks-migration)

  - [サポートされている Kubernetes バージョン](https://docs.microsoft.com/ja-jp/azure/aks/supported-kubernetes-versions)
      





ボリュームが多いのですが、一通り見ると管理に必要なものがわかります。


#### 「ハウツーガイド」の説明
基本的にはシナリオ別のコマンドとJSONの説明の羅列です。
たとえば、「Azure Kubernetes Service (AKS) クラスターでノードの数をスケーリングする」というシナリオについては、具体的にどのようなことを考えてどんなコマンドが有効かを知る必要があります。
コマンドの使い方やJSONのOUTPUT例などが書いてあります。

プレビュー機能はこちらにハウツーガイドに含まれてます。




- ハウツー ガイド

- - クラスターの操作

  - - [AKS クラスターの作成](https://docs.microsoft.com/ja-jp/cli/azure/aks?toc=https%3A%2F%2Fdocs.microsoft.com%2Fja-jp%2Fazure%2Faks%2FTOC.json&bc=https%3A%2F%2Fdocs.microsoft.com%2Fja-jp%2Fazure%2Fbread%2Ftoc.json#az-aks-create)
    - [AKS クラスターのスケーリング](https://docs.microsoft.com/ja-jp/azure/aks/scale-cluster)
    - [AKS クラスターのアップグレード](https://docs.microsoft.com/ja-jp/azure/aks/upgrade-cluster)
    - [ノードの OS の更新プログラムの処理](https://docs.microsoft.com/ja-jp/azure/aks/node-updates-kured)
    - [AKS クラスターの削除](https://docs.microsoft.com/ja-jp/cli/azure/aks?toc=https%3A%2F%2Fdocs.microsoft.com%2Fja-jp%2Fazure%2Faks%2FTOC.json&bc=https%3A%2F%2Fdocs.microsoft.com%2Fja-jp%2Fazure%2Fbread%2Ftoc.json#az-aks-delete)
    - 仮想ノードの作成
    - [Virtual Kubelet の使用](https://docs.microsoft.com/ja-jp/azure/aks/virtual-kubelet)
    - [**クラスター** **オートスケーラーの使用** **(****プレビュー****)**](https://docs.microsoft.com/ja-jp/azure/aks/cluster-autoscaler)
    - [Availability Zones (プレビュー) の使用](https://docs.microsoft.com/ja-jp/azure/aks/availability-zones)
    - [複数のノード プールの使用 (プレビュー)](https://docs.microsoft.com/ja-jp/azure/aks/use-multiple-node-pools)
    - [Terraform を使用した AKS のデプロイ](https://docs.microsoft.com/ja-jp/azure/terraform/terraform-create-k8s-cluster-with-tf-and-aks?toc=https%3A%2F%2Fdocs.microsoft.com%2Fja-jp%2Fazure%2Faks%2FTOC.json&bc=https%3A%2F%2Fdocs.microsoft.com%2Fja-jp%2Fazure%2Fbread%2Ftoc.json)
    - [Kubernetes ダッシュボードの使用](https://docs.microsoft.com/ja-jp/azure/aks/kubernetes-dashboard)

  - データ ボリュームの構成

  - ネットワークを構成する

  - セキュリティと認証

  - 監視およびログ記録

  - Windows Server コンテナーの使用 (プレビュー)

  - アプリケーションの開発と実行

  - DevOps

  - トラブルシューティング