kubernetesについて
GCP上のクラスタ
クラスタの作成
$ gcloud container clusters create $cluster-name --num-nodes=1
- 10分弱操作に時間がかかる
ノードサイズの変更
$ gcloud container clusters resize $cluster-name --num-nodes $num-node
GKEクラスタに接続する
$ gcloud container clusters get-credentials $cluster-name
- 実行すると
.kube/config
が作成される
ローカルでのクラスタ
- minikube
- microk8s
kubectl概要
- kubernetesクラスタを操作するツール
kubectlインストール
linux
$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
$ chmod +x kubectl
クラスタへコンテナのデプロイ
$ kubectl create deployment <deployment-name> --image=<container-name or path>
デプロイしたIPやポートなどの状態を確認する
$ kubectl get services <deployment-name>
クラスタのポートとローカルをポートフォワーディング
$ kubectl port-forward service/<deployment-name> <local-port>:<remote-port>
podのリストを表示
$ kubectl get pods
podの標準出力を確認する
$ kubectl logs <pod-name>
podのポート公開
$ kubectl expose pod <pod-name> --port 80 --type LoadBalancer
nodeportの公開
$ kubectl expose deployment <deployment-name> --target-port=8080 --type=NodePort
GKEをイントロスペクトする
設定を記述したyamlを用意し、適応
$ kubectl apply -f ./<yaml file>
namespaceを指定してapply
$ kubectl apply -f ./<yaml file>.yaml --namespace=<namespace>
- yamlの
metadata
にnamespace: $production
を設定してもいい
デプロイメントを作成する
$ kubectl create -f ./<yaml file> --save-config
- applyとcreateの違いはすでにあるデプロイメントを利用するか作成するか
Podのレプリカをスケール
$ kubectl scale --replicas=3 deployment <deployment>
デプロイメントのオートスケール
$ kubectl autoscale deployment <deployment> --max 4 --min 1 --cpu-percent 1
デプロイメントをpushすることなく適応する場合
$ kubectl rollout pause deployment
rollbindingする
admin権限をbinding
$ kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user $USERNAME_EMAIL
GKEクラスタの検査
設定ファイル
$ kubectl config view
アクティブコンテキスト
$ kubectl config current-context
すべてのクラスタのコンテキスト
$ kubectl config get-contexts
ノード使用率の表示
$ kubectl top nodes
horizontal pod autoscalerを調べる
$ kubectl get hpa
yamlのパラメータの設定
parallelism
- ジョブで実行する最大のPOD数
completions
- 一定数のポッドが正常に終了すると完了するジョブ
backofflimit
- 指数バックオフで何回チャレンジするか
設定テンプレート
小数点2000桁を計算する
apiVersion: batch/v1
kind: Job
metadata:
# Unique key of the Job instance
name: example-job
spec:
template:
metadata:
name: example-job
spec:
containers:
- name: pi
image: perl
command: ["perl"]
args: ["-Mbignum=bpi", "-wle", "print bpi(2000)"]
# Do not restart containers after they exit
restartPolicy: Never
cron job
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo "Hello, World!"
restartPolicy: OnFailure
- 毎分
echo
する kubectl get pods
してkubectl logs <pod-name>
で結果を確認できる
hello-app
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 1
selector:
matchLabels:
run: web
template:
metadata:
labels:
run: web
spec:
containers:
- image: gcr.io/google-samples/hello-app:1.0
name: web
ports:
- containerPort: 8080
protocol: TCP
namespaceを作成
apiVersion: v1
kind: Namespace
metadata:
name: production