そこでは 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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
apiVersion: apps/v1beta1 | |
kind: Deployment | |
metadata: | |
name: hello-deployment | |
spec: | |
replicas: 1 | |
template: | |
metadata: | |
labels: | |
run: hello-world | |
spec: | |
containers: | |
- name: hello | |
image: nginxdemos/hello:latest | |
ports: | |
- containerPort: 80 |
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
apiVersion: v1 | |
kind: Service | |
metadata: | |
name: hello-service | |
labels: | |
run: hello-world | |
spec: | |
type: NodePort | |
ports: | |
- port: 80 | |
protocol: TCP | |
selector: | |
run: hello-world |
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
apiVersion: apps/v1beta1 | |
kind: Deployment | |
metadata: | |
name: hello-deployment | |
spec: | |
replicas: 1 | |
template: | |
metadata: | |
labels: | |
run: hello-world | |
spec: | |
containers: | |
- name: hello | |
image: nginxdemos/hello:latest | |
ports: | |
- containerPort: 80 | |
--- | |
apiVersion: v1 | |
kind: Service | |
metadata: | |
name: hello-service | |
labels: | |
run: hello-world | |
spec: | |
type: NodePort | |
ports: | |
- port: 80 | |
protocol: TCP | |
selector: | |
run: hello-world |
作成。
[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 件のコメント:
コメントを投稿