2020/12/04
今回できたこと
minikubeのチュートリアルで、レプリカセットを作成し、スケールさせる。
今後の作業
実際にK8sクラスタでスケールを行い、Workerに分散される例を作ってみる。
お約束
文章化作業
定例作業
minikubeでスケールさせる
このチュートリアルでは、httpdは実際のPodのホスト名を返すため、接続されたホストがわかるためである。
また、出力も必要最小限で簡潔なので、動作の追跡が容易である。
そこで、この例題に基づいて実習を行う。
以下、実行したコマンドのみを示す。
code:shell
% minikube start
(snip)
% minikube dashboard
(snip)
% kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1
deployment.apps/kubernetes-bootcamp created
% kubectl get deployments -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
kubernetes-bootcamp 0/1 1 0 9s kubernetes-bootcamp gcr.io/google-samples/kubernetes-bootcamp:v1 app=kubernetes-bootcamp
% kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 86s
% kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
service/kubernetes-bootcamp exposed
% kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 17m
kubernetes-bootcamp NodePort 10.103.222.114 <none> 8080:31292/TCP 15m
% kubectl describe services/kubernetes-bootcamp
Name: kubernetes-bootcamp
Namespace: default
Labels: app=kubernetes-bootcamp
Annotations: <none>
Selector: app=kubernetes-bootcamp
Type: NodePort
IP: 10.103.222.114
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 31292/TCP
Endpoints: 172.17.0.5:8080
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
ホスト(Mac mini)とminikube内部のIPアドレスを確認する。
両者で同じサブネットを共有しているアドレスは、以下の通り。
ホスト側: 192.168.99.1/24
minikube内部: 192.168.99.103/24
したがって、ホスト側からは、192.168.99.103にアクセスすると、サービスにアクセスすることができる。
code:shell
### ホストのMac mini側のIPアドレスを確認する。
% ifconfig|grep inet
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
inet6 fe80::1003:41aa:146a:9e04%en1 prefixlen 64 secured scopeid 0x5
inet 192.168.3.4 netmask 0xffffff00 broadcast 192.168.3.255
inet6 fe80::2425:efff:fef7:3d9b%awdl0 prefixlen 64 scopeid 0xa
inet6 fe80::2425:efff:fef7:3d9b%llw0 prefixlen 64 scopeid 0xb
inet 192.168.99.1 netmask 0xffffff00 broadcast 192.168.99.255
inet6 fe80::b661:841:e72e:97b0%utun0 prefixlen 64 scopeid 0xd
inet6 fe80::6c1b:ba21:6b57:ccac%utun1 prefixlen 64 scopeid 0xe
inet6 fe80::fa6f:7c21:877c:5b2a%utun2 prefixlen 64 scopeid 0xf
inet6 fe80::1237:bf57:e479:29a5%utun3 prefixlen 64 scopeid 0x10
### minikube内部のIPアドレスを確認する。
% minikube ssh
(snip)
$ ifconfig|grep inet
inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet addr:192.168.99.103 Bcast:192.168.99.255 Mask:255.255.255.0
inet addr:127.0.0.1 Mask:255.0.0.0
一部、IPアドレスが変わっている(192.168.99.100->103, 192.168.3.3->4, 各PodのIPアドレスなど)が、大枠は一緒である。
https://gyazo.com/e8cb308a5468648ba4cb7e5f84e62ced
以下のようにホスト側からアクセスし、サービスが正常に動いていることを確認する。
この状態では、何回接続してもサービス提供ホストはkubernetes-bootcamp-57978f5f5d-pzm2dとなる。
code:shell
% curl 192.168.99.103:31292
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-57978f5f5d-pzm2d | v=1
以下のように、レプリカセットを作成してサービスをスケールする。
また、その時の状態の情報を得る。
code:shell
% kubectl get rs
NAME DESIRED CURRENT READY AGE
kubernetes-bootcamp-57978f5f5d 1 1 1 21m
% kubectl scale deployments/kubernetes-bootcamp --replicas=4
deployment.apps/kubernetes-bootcamp scaled
% kubectl get rs
NAME DESIRED CURRENT READY AGE
kubernetes-bootcamp-57978f5f5d 4 4 4 22m
% kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 4/4 4 4 25m
% kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kubernetes-bootcamp-57978f5f5d-hxltb 1/1 Running 0 22m 172.17.0.6 minikube <none> <none>
kubernetes-bootcamp-57978f5f5d-khzs5 1/1 Running 0 22m 172.17.0.8 minikube <none> <none>
kubernetes-bootcamp-57978f5f5d-p6lqh 1/1 Running 0 22m 172.17.0.7 minikube <none> <none>
kubernetes-bootcamp-57978f5f5d-pzm2d 1/1 Running 0 45m 172.17.0.5 minikube <none> <none>
% kubectl describe deployments/kubernetes-bootcamp
Name: kubernetes-bootcamp
Namespace: default
CreationTimestamp: Fri, 04 Dec 2020 10:46:05 +0900
Labels: app=kubernetes-bootcamp
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=kubernetes-bootcamp
Replicas: 4 desired | 4 updated | 4 total | 4 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=kubernetes-bootcamp
Containers:
kubernetes-bootcamp:
Image: gcr.io/google-samples/kubernetes-bootcamp:v1
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Progressing True NewReplicaSetAvailable
Available True MinimumReplicasAvailable
OldReplicaSets: <none>
NewReplicaSet: kubernetes-bootcamp-57978f5f5d (4/4 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 46m deployment-controller Scaled up replica set kubernetes-bootcamp-57978f5f5d to 1
Normal ScalingReplicaSet 24m deployment-controller Scaled up replica set kubernetes-bootcamp-57978f5f5d to 4
% kubectl describe services/kubernetes-bootcamp
Name: kubernetes-bootcamp
Namespace: default
Labels: app=kubernetes-bootcamp
Annotations: <none>
Selector: app=kubernetes-bootcamp
Type: NodePort
IP: 10.103.222.114
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 31292/TCP
Endpoints: 172.17.0.5:8080,172.17.0.6:8080,172.17.0.7:8080 + 1 more...
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
ホスト側から、同じようにサービスにアクセスすると、アクセスする度に接続するホストが変わっていることがわかる。
code:shell
% curl 192.168.99.103:31292
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-57978f5f5d-pzm2d | v=1
% curl 192.168.99.103:31292
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-57978f5f5d-khzs5 | v=1
% curl 192.168.99.103:31292
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-57978f5f5d-khzs5 | v=1
% curl 192.168.99.103:31292
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-57978f5f5d-khzs5 | v=1
% curl 192.168.99.103:31292
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-57978f5f5d-hxltb | v=1
% curl 192.168.99.103:31292
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-57978f5f5d-pzm2d | v=1
あるPodのログを確認すると、アクセスされたログだけが記録されている。
code:shell
% kubectl logs kubernetes-bootcamp-57978f5f5d-hxltb
Kubernetes Bootcamp App Started At: 2020-12-04T02:08:42.749Z | Running On: kubernetes-bootcamp-57978f5f5d-hxltb
Running On: kubernetes-bootcamp-57978f5f5d-hxltb | Total Requests: 1 | App Uptime: 55.28 seconds | Log Time: 2020-12-04T02:09:38.030Z
Running On: kubernetes-bootcamp-57978f5f5d-hxltb | Total Requests: 2 | App Uptime: 753.395 seconds | Log Time: 2020-12-04T02:21:16.144Z
今後、K8sクラスタを構築するにあたって、各PodをどのようにクラスタのWorkerに割り当てるのかの方法を調べ、クラスタ上で一つのサービスを提供する方法について、調べる。