何度か試してみると徐々に仕組みがイメージ出来てくる。
https://kubernetes.io/ja/docs/tutorials/kubernetes-basics/expose
Serviceを使用してWebアプリとして公開する
サービスの確認。
MacBook-Pro:powerpecognition shinichiyamada$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 64d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1
kubernetesというサービスは最初から作られていて必須。
NodePortというサービスを作成して外部に公開する、
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
サービスの確認。
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 64d
kubernetes-bootcamp NodePort 10.108.197.187 8080:32580/TCP 3s
ポート番号はアクセスするときに必要になるので覚えておく。NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1
kubernetes-bootcamp NodePort 10.108.197.187
また
kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}'
と入力することでポート番号を取得できるのでスクリプトを用意したり自動化に利用できる。公開されたアプリケーションは
クラスタのアドレス:サービスのポート番号
でアクセスできるようになる。ポート番号は可変(指定することも可能)
http://localhost:32580/
ラベルを介したPod,Serviceのアクセス
Podにはラベルを使用してアクセスできる。
kubectl get pods -l run=kubernetes-bootcamp
Serviceも同様。
kubectl get services -l run=kubernetes-bootcamp
Podにラベルを付与してそのラベルでアクセスする。
MacBook-Pro:xxxx xxxx$ kubectl kubectl label pod $POD_NAME app=v1
MacBook-Pro:xxxx xxxx$ kubectl label pod kubernetes-bootcamp-5c69669756-zg8z6 app=v1
MacBook-Pro:xxxx xxxx$ kubectl get pods -l app=v1
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-5c69669756-zg8z6 1/1 Running 0 2
MacBook-Pro:xxxx xxxx$ kubectl label pod kubernetes-bootcamp-5c69669756-zg8z6 app=v1
MacBook-Pro:xxxx xxxx$ kubectl get pods -l app=v1
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-5c69669756-zg8z6 1/1 Running 0 2
ラベルは複数付与可能。
MacBook-Pro:xxxx xxxx$ kubectl label pod kubernetes-bootcamp-5c69669756-zg8z6 test=test
pod/kubernetes-bootcamp-5c69669756-zg8z6 labeled
MacBook-Pro:xxxx xxxx$ kubectl get pods -l test=test
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-5c69669756-zg8z6 1/1 Running 0 2h
pod/kubernetes-bootcamp-5c69669756-zg8z6 labeled
MacBook-Pro:xxxx xxxx$ kubectl get pods -l test=test
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-5c69669756-zg8z6 1/1 Running 0 2h
ラベル名はxxxx=yyyyという制限がある。
kubectl describe pods $POD_NAME
で確認できる、MacBook-Pro:xxxx xxxx$ kubectl describe pods kubernetes-bootcamp-5c69669756-zg8z6
Name: kubernetes-bootcamp-5c69669756-zg8z6
Namespace: default
Node: docker-for-desktop/192.168.65.3
Start Time: Tue, 02 Apr 2019 13:55:36 +0900
Labels: app=v1
pod-template-hash=1725225312
run=kubernetes-bootcamp
test=test
Name: kubernetes-bootcamp-5c69669756-zg8z6
Namespace: default
Node: docker-for-desktop/192.168.65.3
Start Time: Tue, 02 Apr 2019 13:55:36 +0900
Labels: app=v1
pod-template-hash=1725225312
run=kubernetes-bootcamp
test=test
サービスの削除
kubectl delete service -l run=kubernetes-bootcamp
http://localhost:32580/ にアクセスできなくなる。
サービス確認
kubectl get services
アクセスできなくなっただけでPod自体は稼働している。
kubectl exec -ti $POD_NAME curl localhost:8080
kubectl exec -ti kubernetes-bootcamp-5c69669756-zg8z6 curl localhost:8080