kubectlを利用してクラスタにアクセスする(2)
Deploymentを作成する
Podを冗長化するためにDeploymentを作成してみましょう。
以下を実行すると作成することができます。
cat << EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 EOF
実行結果は以下のようになります
❯ cat << EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 EOF deployment.apps/nginx-deployment created ❯
Deploymentが作成できていることを確認しましょう。
❯ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 3/3 3 3 65s ❯
Podが3つできていることも確認できます。
❯ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-deployment-66b6c48dd5-426cn 1/1 Running 0 108s nginx-deployment-66b6c48dd5-7tg5k 1/1 Running 0 108s nginx-deployment-66b6c48dd5-b4c5p 1/1 Running 0 108s ❯
試しに一つ消してみましょう。
$ kubectl delete pod <pod name>
実行結果は以下の通りです。
❯ kubectl delete pod nginx-deployment-66b6c48dd5-426cn pod "nginx-deployment-66b6c48dd5-426cn" deleted ❯ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-deployment-66b6c48dd5-7tg5k 1/1 Running 0 3m3s nginx-deployment-66b6c48dd5-b4c5p 1/1 Running 0 3m3s nginx-deployment-66b6c48dd5-x9z9w 1/1 Running 0 8s ❯
Podの起動が早すぎてkubectl get pod
した時には既にPodが3つできていますが、delete時に指定したPodnginx-deployment-66b6c48dd5-426cn
は正しく消えていることがわかります。
Serviceを作成する
せっかくNGINXを起動しているので、ブラウザからみられるようにしてみましょう。
1. 以下を実行してServiceを作成する
cat << EOF | kubectl apply -f - apiVersion: v1 kind: Service metadata: name: my-service spec: type: NodePort selector: app: nginx ports: - protocol: TCP port: 8080 targetPort: 80 EOF
2. ポート番号を確認する
kubectl describe service my-service
で「NodePort」を確認します。
今回筆者が作成したServiceではNodePortは「31390」です。
❯ kubectl describe svc my-service [~] Name: my-service Namespace: default Labels: <none> Annotations: <none> Selector: app=nginx Type: NodePort IP Family Policy: SingleStack IP Families: IPv4 IP: 10.110.48.32 IPs: 10.110.48.32 LoadBalancer Ingress: localhost Port: <unset> 8080/TCP TargetPort: 80/TCP NodePort: <unset> 31390/TCP Endpoints: 10.1.0.20:80,10.1.0.21:80,10.1.0.22:80 Session Affinity: None External Traffic Policy: Cluster Events: <none> ❯
3. ブラウザでアクセスする
2の手順で確認したポート番号を利用します。
http://localhost:<2の手順で確認したポート番号>
にアクセスしてください。
Welcome to nginx!というメッセージをみることができれば成功です。
環境のクリーンアップ
Kubernetesはかなりメモリを使用しますので、作成したリソースを消すだけではなくクラスタごと消せるのであれば消してしまいましょう。
例えばkindであればkind delete cluster
でクラスタを消すことができます。
Kubernetesクラスタを触ってみる回はこれで終わりになります。kubectl cheat sheetにはkubectlを使ってできることが色々書かれているので、参考に遊んでみてください。