Rancher2.0でAKSクラスタ作成からWordPressデプロイまで

Rancher2.0 を利用してAKSにkubernetesクラスタを作成、Rancherのカタログ機能からWordPressをデプロイしてみました。
Azure上でのAKSの操作は、ポータルではなくコマンドベースで行っています。

# TL;DR

[完全上位互換のスライド](https://speakerdeck.com/cyberblack28/azure-with-rancher)があるので、こちらを読めば大丈夫です。
GUIベースで操作も簡単だと思います。
デプロイが終わった後に知り、先に読んでおけばよかったと後悔しました。

# 環境

Rancher Serverを事前に用意し、クラスタを構築できる状態にしておきます。
バージョンは Rancher2.0 v2.2.2 を使用しました。

![portal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111157/32a833ee-390f-3fb5-e8e0-b56a88118363.png)

# Azure側の準備

Rancher を利用したクラスタ作成に必要な準備を行います。

## リソースグループの作成

AKSクラスタ用のリソースグループを作成します。
名前は``rancher-aks-sample``にしました。

```bash
$ az group create -l japaneast -n rancher-aks-sample
```

## サービスプリンシパルの作成

リソースグループを操作するためのサービスプリンシパルを作成します。
表示される``appId``などの情報は、Rancher でクラスタを作成する際に必要になります。

```bash
$ az ad sp create-for-rbac --skip-assignment -n sp-aks-sample
appId: 03f94503-xxxx-xxxx-xxxx-xxxxxxxxxxxx
displayName: sp-aks-sample
name: http://sp-aks-sample
password: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
tenant: 2bdec7af-xxxx-xxxx-xxxx-xxxxxxxxxxxx

// ロールの割り当て
$ az role assignment create --assignee 03f94503-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
  --role Contributor --resource-group rancher-aks-sample
```

## リソースプロバイダの登録

これがないとクラスタ作成時にエラーが発生します。
[トラブルシューティング](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-register-provider-errors)を参考にしました。

```bash
$ az provider register -n Microsoft.OperationalInsights
$ az provider register -n Microsoft.OperationsManagement
```

# AKSクラスタの作成

Rancher ポータル上でAKSクラスタを作成します。
Add Cluster で``Azure AKS``を選択。

![aks.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111157/353e6545-0918-ee12-7ac4-e40d21d5433a.png)

Azureとのアクセスに必要な情報を設定します。

![aks2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111157/b9d5ab35-2ab2-8a04-35fc-c8994e4aed68.png)

Client IDはサービスプリンシパルのappId、Client secretはパスワードの値を設定します。
実行するとクラスタが作成されます。

しかし未対応の問題があり、Control ManagerとSchedulerが正常な状態になっていません。

![aks-error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111157/5bcda218-21a3-041d-9bbc-84f13d751ad6.png)

とりあえずアプリケーションのデプロイに問題はないようです。
[AKSのIssue](https://github.com/Azure/AKS/issues/173)
[RancherのIssue](https://github.com/rancher/rancher/issues/11496)

# WordPress のデプロイ

Catalog を使用してデプロイを行います。
（一部画像の対象クラスタが異なりますが、AKSクラスタに読み替えてください）

## カタログからデプロイ

![deploy-custom.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111157/3fcc863d-b34e-c721-0e54-245c01c15f81.png)

カタログで WordPress を選択します。

![deploy-custom2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111157/2825dbc3-93a2-34f7-1566-3a9c4d73990d.png)

L7 LoadBalancer の作成をOFFにし、パスワードを設定して実行します。

![deploy-aks.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111157/6e5a39b6-8f13-f917-de96-5144ac896ec1.png)

## LoadBalancer をデプロイ

AKS用の L7 LoadBalancer は Rancher がサポートしていないため、Azure上で作成する必要があります。

![lb-sp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111157/337b9309-6011-d6cc-d8a6-5aafb15e14e3.png)

Azure CloudShell を起動し、Helmを有効にします。

```bash
// Tiller のサービスアカウントを作成
$ kubectl create serviceaccount --namespace kube-system tiller
$ kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
$ kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

// Helm の初期化
$ helm init
```

Helm を使用して Ingress Controller を作成します。

```bash
$ helm install stable/nginx-ingress 
```

WordPress 用の Ingress を以下のマニフェストファイルから作成します。

```yaml:wordpress-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: wordpress-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: wordpress-wordpress
          servicePort: 80
```

```bash
$ kubectl apply -f wordpress-ingress.yaml
```

これで LoadBalancer の公開IPから WordPress にアクセスできるようになりました。

![wp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111157/909bc98c-af42-cbf4-78d2-da12a4455f2d.png)

# 参考

[マルチクラウド時代の最強コンビ　RancherによるKubernetes活用ガイド](https://thinkit.co.jp/series/8740)
[Rancher 2.x 公式ドキュメント](https://rancher.com/docs/rancher/v2.x/en/)
[Rancher2.0 v2.0.0でGKEにkubernetesクラスタ構築からWordPressデプロイまで](https://qiita.com/cyberblack28/items/7c9eaeacda16408625ed)