Kubernetes(k8s)チュートリアルを試してみる-アプリを公開する

k8s上で動作しているアプリをWebアプリとして公開する。
何度か試してみると徐々に仕組みがイメージ出来てくる。




https://kubernetes.io/ja/docs/tutorials/kubernetes-basics/expose

  1. クラスタの作成
  2. アプリのデプロイ
  3. 仕組みについて知る
  4. アプリを公開する
  5. アプリのスケール
  6. アプリの更新



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

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
ポート番号はアクセスするときに必要になるので覚えておく。
また
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 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

ラベル名は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


サービスの削除




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


2019年4月6日土曜日