Docker/Kubernetes 実践コンテナ開発入門の6章をAzureでやってみる(失敗)

 機械学習の方は進捗ゼロです。

 機械学習、たぶん「習うより慣れろ」なんでしょうけど、Webに関してもLAMPから丁寧に入るような人間なので、やるならちゃんと統計学からやっていきたいという気持ちがあります。

 

 
 で、僕はDocker/Kubernetes 実践コンテナ開発入門という本でコンテナ技術を勉強している最中なんですが、生憎GCPのトライアル期間みたいなのはすでに終わってしまい、Azureの学生プランしか残っていない状況です。まぁクレカを登録しなおしても良いんですけど、アカウント管理が手間ですしとりあえずk8s触れればいいって気分なので、Azureで立ててみようかなと思います。

 
 やってることは6章のAzure版なのであしからず。

 
docs.microsoft.com

docs.microsoft.com

 ここのドキュメントを読みながらやっていきます。

 まずは、リソースグループの作成。適当に「gihyoR」とでもつけておきます。

az group create --name gihyoR --location japaneast

 でAKSクラスターの作成

az aks create --resource-group gihyoR     --name gihyo     --node-count 1     --enable-addons monitoring     --generate-ssh-keys

ちなみにくそ待たされます。カップラーメン作れるやん。

クラスター接続

 kubectlのローカルインストール(もう入ってると思うけど)

az aks install-cli

 kubectlに認証情報をわたす

az aks get-credentials --resource-group gihyoR --name gihyo

 で接続確認

kubectl get nodes

 このままだとローカルのk8sダッシュボードがバグるので以下のコマンドを打ちます

kubectl create clusterrolebinding kubernetes-dashboard -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard

あとアクセス先がドキュメントとちょっと変わって

http://localhost:8001/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy/#!/overview?namespace=default っぽい

Master-Slave構成Mysql構築

 ここはGKEとは違うというか違わないんですが、プラットフォームに対応した永続ボリュームを使います。

docs.microsoft.com

 ここに同様にストレージクラスと書かれたページとyamlがあるのでパクって

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: ssd
  annotations:
    storageclass.kubernetes.io/is-defauld-class: "false"
  labels:
    kubernetes.io/cluster-service: "true"
provisioner: kubernetes.io/azure-disk
reclaimPolicy: Retain
parameters:
  storageaccounttype: Premium_LRS
  kind: Managed

でStorageclassを作成

$ kubectl apply -f storage-class-ssd.yaml

パラメーターがなんなのかよくわかってないけどとりあえず進む

 次はStatefulSetです。これは書籍と同じ というかこの後そのまま書籍通りやったんですけど、IngressグローバルIPアドレスを拾ってくれない。どうもGKEの場合はIngress Controllerが最初から生えているので、AKSだとそこの作成からやらないといけないっぽい。

 とりあえずドキュメントのこのページを参照する。

docs.microsoft.com

ここからHelm周りを触る関係上クラウドシェルで操作していた(ローカルで入れてもいいけどここでは割愛) イングレス コントローラーを作成

$ helm install stable/nginx-ingress --namespace kube-system --set controller.replicaCount=2

で、ingress.yamlは以下の通り

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: 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: todoweb
          servicePort: 80

で、Mysqlがうまく動かなくてinit-data.shしまくってから、 todo-api.yamlの接続先でrootにしたらなんかうまくいった? f:id:Piffett:20190323092330p:plain

なんかJSとCSSが読み込まれてない気がする。Azureのサンプルも丁寧に見てみようかと思います。正直DBは外部にしたいなぁ