docker-desktop(macOS)のK8s機能を使って学習をしているのですが、deploymentで分散をかけている状態をブラウザで見たいと思っているのですが、うまくできず困っております。
たとえばdeploymentとして、こんなのを用意したとします。
apiVersion: apps/v1 kind: Deployment metadata: name: webdeploy spec: replicas: 10 selector: matchLabels: app: web template: metadata: name: web labels: app: web spec: containers: - name: web image: densukest/web-gethost resources: limits: memory: "128Mi" cpu: "100m" ports: - containerPort: 80
コンテナ側ではPHPを使っており、コンテナのホスト名をHTMLで返すコードになっています。
とりあえず10個を負荷分散目的で起動するようにしているのを確認しました。
$ kubectl apply -f web-deployment.yml $ kubectl get pods NAME READY STATUS RESTARTS AGE webdeploy-8696bb54b8-2cdbl 1/1 Running 0 28m webdeploy-8696bb54b8-6dw6f 0/1 Pending 0 28m webdeploy-8696bb54b8-br9dx 0/1 Pending 0 28m webdeploy-8696bb54b8-kmqfh 1/1 Running 0 28m webdeploy-8696bb54b8-mms26 0/1 Pending 0 13m webdeploy-8696bb54b8-mxtgd 1/1 Running 0 33m webdeploy-8696bb54b8-ntd28 0/1 Pending 0 28m webdeploy-8696bb54b8-r6sjn 1/1 Running 0 28m webdeploy-8696bb54b8-s5m9c 0/1 Pending 0 28m webdeploy-8696bb54b8-wpgkw 1/1 Running 0 33m
10個はこの環境では大きすぎたようで、実際に動くのは半分だけでした。それでも5つ動いているわけで、ここに対するNodePortを使ってサービスで呼べるようにしてみました。
apiVersion: v1 kind: Service metadata: name: websvc spec: type: NodePort selector: app: web ports: - protocol: TCP port: 80
こちらも適用後、busyboxベースのコンテナを作って、websvcの名前でコンテンツを要求すると、分散されている様子は見えました。
$ kubectl run -it busybox --restart=Never --rm --image=busybox sh / # for i in 1 2 3 4 5 6 7 8 9 0; do wget -O- -q http://websvc | grep webdeploy; sleep 1; done webdeploy-8696bb54b8-kmqfh です。</p> webdeploy-8696bb54b8-kmqfh です。</p> webdeploy-8696bb54b8-r6sjn です。</p> webdeploy-8696bb54b8-mxtgd です。</p> webdeploy-8696bb54b8-wpgkw です。</p> webdeploy-8696bb54b8-2cdbl です。</p> webdeploy-8696bb54b8-wpgkw です。</p> webdeploy-8696bb54b8-mxtgd です。</p> webdeploy-8696bb54b8-mxtgd です。</p> webdeploy-8696bb54b8-2cdbl です。</p>
で、この状態をブラウザ上でも見てみたいと思い、port-forwardを使って繋いでみようとしました。
$ kubectl port-forward svc/websvc 8080:80
別端末で同様にwgetで取得してみました。念のためプロキシ利用をオフにしています。
$ for i in {1..10}; do \ wget --no-proxy -O- -q http://127.0.0.1:8080/ |grep webdeploy ; \ sleep 1; \ done webdeploy-8696bb54b8-wpgkw です。</p> webdeploy-8696bb54b8-wpgkw です。</p> webdeploy-8696bb54b8-wpgkw です。</p> webdeploy-8696bb54b8-wpgkw です。</p> webdeploy-8696bb54b8-wpgkw です。</p> webdeploy-8696bb54b8-wpgkw です。</p> webdeploy-8696bb54b8-wpgkw です。</p> webdeploy-8696bb54b8-wpgkw です。</p> webdeploy-8696bb54b8-wpgkw です。</p> webdeploy-8696bb54b8-wpgkw です。</p>
もしかしてport-forwardって特定podに結びつけるだけなのでしょうか?内部ネットワーク同様に、分散された形で行うにはどうしたら良いのでしょうか。
※ serviceの中でNodePortをLoadBalancerにもしてみましたが、これもダメでした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/14 19:35