機械学習の方は進捗ゼロです。
機械学習、たぶん「習うより慣れろ」なんでしょうけど、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にしたらなんかうまくいった?
なんかJSとCSSが読み込まれてない気がする。Azureのサンプルも丁寧に見てみようかと思います。正直DBは外部にしたいなぁ