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


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

TL;DR

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

環境

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

Azure側の準備

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

リソースグループの作成

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

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

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

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

$ 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

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

これがないとクラスタ作成時にエラーが発生します。
トラブルシューティングを参考にしました。

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

AKSクラスタの作成

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

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

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

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

とりあえずアプリケーションのデプロイに問題はないようです。
AKSのIssue
RancherのIssue

WordPress のデプロイ

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

カタログからデプロイ

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

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

LoadBalancer をデプロイ

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

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

// 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 を作成します。

$ helm install stable/nginx-ingress 

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

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
$ kubectl apply -f wordpress-ingress.yaml

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

参考

マルチクラウド時代の最強コンビ RancherによるKubernetes活用ガイド
Rancher 2.x 公式ドキュメント
Rancher2.0 v2.0.0でGKEにkubernetesクラスタ構築からWordPressデプロイまで