- 仮想マシンは作っても作らなくてもいい
- クライアントに必要なもの
- docker
- azure cli
- jdk
- kubectl
Azureポータルから作る場合
-
リソースの作成>Container Registry
- Registry名:てきとー
- Resource Group: new → てきとー
- Admin user: Enable
できあがったら Access key で以下の情報を控える
- ログインサーバー
- ユーザ名
- パスワード
-
リソースの作成> Kubernetes Serivce
- 基本
- Resource Group : new → てきとー
- Kubernetesクラスタ名
- Kubernetesバージョン: 1.13.7
- ノード数:3
- ネットワーク
- HTTPアプリケーションのルーティング:はい
- 基本
$ az login
$ az group create --name MC-YOSHIO-AKS-1137 --location japaneast
$ az network vnet create --resource-group MC-YOSHIO-AKS-1137 \
--name AKSVnet --address-prefixes 10.0.0.0/8 --subnet-name myAKSSubnet \
--subnet-prefix 10.240.0.0/16
$ az network vnet subnet create --resource-group MC-YOSHIO-AKS-1137 \
--vnet-name AKSVnet --name AKSSubnet --address-prefixes 10.241.0.0/16
$ az ad sp create-for-rbac --skip-assignment
$ az role assignment create --assignee fa035d21-1dc7-4009-8d70-df401225ded4 \
--scope /subscriptions/****/resourceGroups/MC-YOSHIO-AKS-1137/providers/Microsoft.Network/virtualNetworks/AKSVnet \
--role Contributor
$ az aks create \
--resource-group MC-YOSHIO-AKS-1137 \
--name yoshioAKSCluster1137 \
--kubernetes-version 1.13.7 \
--node-count 3 \
--enable-addons monitoring \
--generate-ssh-keys
kubuctlのインストールは az aks install-cli
でもできる
credentialを作る(azure-cliが要る)
$ az ask get-credentials --resource-group リソースグループ名 \
--name Kubernetesクラスタ名
- metadata/name
- template/metadata/labels/version
- template/spec/containers/image : dockerイメージ名を指定する
ACRのcredentialを作る
$ kubectl create secret docker-registry docker-reg-credential \
--docker-server=******.azurecr.io
--docker-username=foo-bar \
--docker-password=+********************/********** \
[email protected]
podをデプロイする
$ kubectl apply -f deployment.yaml
- metadata/labels/app
- metadata/name
- selector/app : pod名を指定する
- type : ClusterIPにする
$ kubectl apply -f service.yaml
ローカルで疎通確認
$ kubectl port-forward -p 28080:8080 pod名
$ kubectl port-forward -p 28080:8080 kube-yoshio-7d465f455b-pt44j
$ curl http://localhost:28080/sample/hello
- https://docs.microsoft.com/ja-jp/azure/aks/http-application-routing#use-http-routing
- metadata/name : てきとー
- spec/rules/host: をHTTPルーティングアドレスに書き換える
- spec/rules/http/paths/backend/serviceName: フォワードするサービス名
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kube-yoshio
annotations:
kubernetes.io/ingress.class: addon-http-application-routing
spec:
rules:
- host: ****.japaneast.aksapp.io
http:
paths:
- backend:
serviceName: kube-yoshio
servicePort: 80
path: /
$ kubectl apply -f ingress.yaml
IngressのDNS名でアクセスする(IPでアクセスしちゃダメ)
AzureポータルでDevOps Projectを作る
- 新しいサービス→DevOps Project
- Java > Spring > Kubernetes Service
- Project name: てきとー
- Azure DevOps Organization: てきとー
- Use Existing: すでにAKSがあるから(Create Newを選ぶとAKSも作ってくれる)
- Cluster name: てきとー
- Location: East Asia (Japanには作れない)
作ったDevOps Projectに移動する(Azure DevOpsにサインインするとなぜか迷子になる)
サンプルプロジェクトとサンプルのパイプラインができてるので、ほっときゃデプロイされてる。
- dockerに関すること
- docker pushするときlatest tagは使っちゃダメ。tagはビルド番号使おう
- podを作ったときによってlatestの内容がかわっちゃうでしょ
- 小さいイメージの作成を心がけよう。alpineっていう軽量版を探すとか、マルチステージビルドを考えよう
- パーミッションをちゃんと設定しとけ
- DockerHubをうかつに信用すんな
- docker pushするときlatest tagは使っちゃダメ。tagはビルド番号使おう
- k8sに関すること
- リソース使用量はちゃんと指定しようね。
- Labelは重要。そのうち形式知になるといいね。
- こまったらこのコマンドをたたけ
kubectl describe pod
kubectl log POD_NAME
kubectl exec -it POD_NAME /bin/sh
kubectl get events -w
- Deploy Ubuntu pod in same NameSpace
- 文句言わねぇでメッセージ(英語)読め!!
- シンプルが一番
- podのストレージは使っちゃダメ(API使って永続化を試みた方がマシ)
- podのログは標準出力に出せ(Azureだと、ログを監視するサービスがあるんですよ)
- DBみたいなスケールアップするようなサービスはk8sに向かない(普通にマネージドサービス使おう)