そこでは YAML ファイルの利用について、MySQL のデプロイをもとに紹介されています。
しかし、YAML なしのコマンドラインでの「hello-world」についても
シンプルな例によさそうなので、「-f」で YAML ファイルを利用する方式で
ドキュメントに近いデプロイをしてみました。
もとにしたものは下記です。
Oracle Container Services for use with Kubernetes User's Guide
https://docs.oracle.com/cd/E52668_01/E88884/html/kubectl-basics.html
今回の環境。
Oracle Linux 7.4 です。kubeadm は、現時点での最新より1つ古いバージョンです。
[gowatana@k8s-master ~]$ cat /etc/oracle-release
Oracle Linux Server release 7.4
[gowatana@k8s-master ~]$ rpm -q kubeadm
kubeadm-1.7.4-2.0.1.el7.x86_64
Kubernetes クラスタの Master が 1ノード、Worker が 2ノードです。
[gowatana@k8s-master ~]$ kubectl get nodes
NAME STATUS AGE VERSION
k8s-master Ready 1d v1.7.4+0c1a5fc
k8s-worker-01 Ready 1d v1.7.4+0c1a5fc
k8s-worker-02 Ready 1d v1.7.4+0c1a5fc
下記のように、クラスタをセットアップしてあります。
Pod / Deployment の作成。
kubectl run コマンドでは、Pod だけでなく Deployment も作成されます。
YAML hello-deployment.yml
Deployment を作成します。
[gowatana@k8s-master ~]$ kubectl create -f hello-deployment.yml
deployment "hello-deployment" created
[gowatana@k8s-master ~]$ kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-deployment 1 1 1 1 13s
[gowatana@k8s-master ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-deployment-3824370859-r7j60 1/1 Running 0 55s
スケールアップ。
Pod を 1つから3つに増やしてみます。
[gowatana@k8s-master ~]$ kubectl scale -f hello-deployment.yml --replicas=3
deployment "hello-deployment" scaled
[gowatana@k8s-master ~]$ kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-deployment 3 3 3 3 3m
[gowatana@k8s-master ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-deployment-3824370859-56df1 1/1 Running 0 26s
hello-deployment-3824370859-mksbb 1/1 Running 0 26s
hello-deployment-3824370859-r7j60 1/1 Running 0 3m
Service の作成。
Kubernetes クラスタの外部からアクセスできるように、Service を作成します。
YAML hello-service.yml
Service を作成します。
Pod は新たに3つ作成しなおしたので、以前の実行例とは名前が変わっています。
[gowatana@k8s-master ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-deployment-3824370859-7xx2d 1/1 Running 0 14s
hello-deployment-3824370859-gvndx 1/1 Running 0 14s
hello-deployment-3824370859-r7j60 1/1 Running 0 10m
[gowatana@k8s-master ~]$ kubectl create -f hello-service.yml
service "hello-service" created
[gowatana@k8s-master ~]$ kubectl get service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-service 10.109.229.118 <nodes> 80:31939/TCP 16s
kubernetes 10.96.0.1 <none> 443/TCP 1d
起動されたコンテナにアクセスしてみます。
このデモ用のコンテナでは、コンテナに付与されたホスト名を表示できるので、
ホスト名に含まれる文字列「hello-deployment」をもとに
コンテナへのアクセスを確認してみます。
まずは、Kubernetes クラスタの CLUSTER-IP へのアクセスです。
クラスタ内部からのアクセスなので、Deployment 作成時に指定した 80 番ポートを
指定してアクセスしてみます。
何度かアクセスを繰り返すと、自動的に3つのコンテナに振り分けられている様子が分かります。
[gowatana@k8s-master ~]$ curl -s http://10.109.229.118:80 | grep hello-deployment
<p><span>Server name:</span> <span>hello-deployment-3824370859-gvndx</span></p>
[gowatana@k8s-master ~]$ curl -s http://10.109.229.118:80 | grep hello-deployment
<p><span>Server name:</span> <span>hello-deployment-3824370859-r7j60</span></p>
[gowatana@k8s-master ~]$ curl -s http://10.109.229.118:80 | grep hello-deployment
<p><span>Server name:</span> <span>hello-deployment-3824370859-r7j60</span></p>
[gowatana@k8s-master ~]$ curl -s http://10.109.229.118:80 | grep hello-deployment
<p><span>Server name:</span> <span>hello-deployment-3824370859-r7j60</span></p>
[gowatana@k8s-master ~]$ curl -s http://10.109.229.118:80 | grep hello-deployment
<p><span>Server name:</span> <span>hello-deployment-3824370859-7xx2d</span></p>
クラスタ外部からのアクセスで指定する EXTERNAL-IP は「nodes」となっているので、
Worker ノードの IP アドレスの 1つに自動付与された NodePort 31939 を指定して
アクセスしてみます。
[gowatana@k8s-master ~]$ curl -s http://10.0.2.6:31939 | grep hello-deployment
<p><span>Server name:</span> <span>hello-deployment-3824370859-r7j60</span></p>
[gowatana@k8s-master ~]$ curl -s http://10.0.2.6:31939 | grep hello-deployment
<p><span>Server name:</span> <span>hello-deployment-3824370859-7xx2d</span></p>
[gowatana@k8s-master ~]$ curl -s http://10.0.2.6:31939 | grep hello-deployment
<p><span>Server name:</span> <span>hello-deployment-3824370859-r7j60</span></p>
[gowatana@k8s-master ~]$ curl -s http://10.0.2.6:31939 | grep hello-deployment
<p><span>Server name:</span> <span>hello-deployment-3824370859-gvndx</span></p>
削除。
Service、Deployment などの削除でも、YAML を指定することができます。
YAML は、ここまで例示したものをそのまま指定します。
Service を削除します。
[gowatana@k8s-master ~]$ kubectl delete -f hello-service.yml
service "hello-service" deleted
[gowatana@k8s-master ~]$ kubectl get service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.96.0.1 <none> 443/TCP 1d
Deployment を削除します。
[gowatana@k8s-master ~]$ kubectl delete -f hello-deployment.yml
deployment "hello-deployment" deleted
[gowatana@k8s-master ~]$ kubectl get deployment
No resources found.
[gowatana@k8s-master ~]$ kubectl get pods
No resources found.
ここまでのまとめ。
ここまでのものを、まとめて記載することもできます。
YAML hello-world.yml
作成。
[gowatana@k8s-master ~]$ kubectl create -f hello-world.yml
deployment "hello-deployment" created
service "hello-service" created
[gowatana@k8s-master ~]$ kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-deployment 1 1 1 1 49s
[gowatana@k8s-master ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-deployment-3824370859-47sc1 1/1 Running 0 57s
[gowatana@k8s-master ~]$ kubectl get service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-service 10.96.236.185 <nodes> 80:31972/TCP 1m
kubernetes 10.96.0.1 <none> 443/TCP 1d
削除。
[gowatana@k8s-master ~]$ kubectl delete -f hello-world.yml
deployment "hello-deployment" deleted
service "hello-service" deleted
[gowatana@k8s-master ~]$ kubectl get deployment
No resources found.
[gowatana@k8s-master ~]$ kubectl get pods
No resources found.
[gowatana@k8s-master ~]$ kubectl get service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.96.0.1 <none> 443/TCP 1d
以上、kubectl を YAML で使用してみる話でした。
0 件のコメント:
コメントを投稿