👏

K8sのCluster IPサービスによる負荷分散を体験してみる

2025/02/04に公開

必要なファイル

deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: nginx
        image: nginx:latest

svc.yml

apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  selector:
    app: web
  ports:
  - protocol: TCP
    port: 80

必要なオブジェクトを立ち上げる

デプロイメント、サービスなどを作ってみる

kubectl apply -f deply.yml
kubectl apply -f svc.yml

確認

vagrant@node02:~$ kubectl get svc -o wide
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE   SELECTOR
kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP   21h   <none>
web-service   ClusterIP   10.98.166.230   <none>        80/TCP    16m   app=web

リクエストを投げてみる

Nginxの初期ページをちょっといじくります。

for pod in $(kubectl get pods | awk 'NR > 1 {print $1}' | grep web-deploy); do kubectl exec $pod -- /bin/sh -c "hostname>/usr/share/nginx/html/index.html"; done

busyboxを使って入ってみる

kubectl run busybox --image=busybox --rm --restart=Never -it sh

以下のコマンドを走らせてみる

/ # while true; do wget -q -O - http://web-service; sleep 1;  done

負荷分散されているのが確認できる。

web-deploy-66fbbff65d-fl8zt
web-deploy-66fbbff65d-fl8zt
web-deploy-66fbbff65d-95snx
web-deploy-66fbbff65d-fl8zt
web-deploy-66fbbff65d-95snx
web-deploy-66fbbff65d-fl8zt

Discussion