はじめに
k8sではオブジェクトの理想状態をマニフェストとして宣言することで、各コンポーネントがその理想状態を実現すべく良しなに動いてくれます。
本記事ではnginxのサンプルマニフェストにて、Deploymentコントローラー(Pod&Replica)をminikubeで動かし、実際にクラスタとしてポッドとそのポッドの数が理想状態になる様子を確認していきます。
環境情報
- Microsoft Windows 10 Enterprise
- VirtulBox 5.1
- CYGWIN_NT-10.0
- Kubernetes v1.17
適応するマニフェスト
以下のサンプルマニフェストを今回はminikubeに読ませます。
ポイントはreplica数が「3」になっている点です。このマニフェストによってPodは3つ起動します。
$ cat nginx-deployment.yaml 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.7.9 ports: - containerPort: 80
kubectlコマンドで読み込ませる
minikubeが起動している状態にて
$ minikube status host: Running kubelet: Running apiserver: Running kubeconfig: Configured
以下コマンドで用意したサンプルマニフェストを読み込ませます。
ちなみにこのfオプションは「filename」を表し引数にコンフィグファイルを取ることを指定しています。
$ kubectl apply -f nginx-deployment.yaml deployment.apps/nginx-deployment created
作成されたオブジェクトを確認する
以下コマンドで3つのポッドが作成されていることが分かります。
$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-deployment-54f57cf6bf-69b65 0/1 ContainerCreating 0 X nginx-deployment-54f57cf6bf-v84fz 0/1 ContainerCreating 0 X nginx-deployment-54f57cf6bf-vxskm 0/1 ContainerCreating 0 X
少し経って再度コマンドを打つと「Running」状態になっています。
$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-deployment-54f57cf6bf-69b65 1/1 Running 0 X nginx-deployment-54f57cf6bf-v84fz 1/1 Running 0 X nginx-deployment-54f57cf6bf-vxskm 1/1 Running 0 X
ちなみにダッシュボード上でも確認でき、3つのポッドがブラウザベースで確認できます。
サービスを作成する
ブラウザでアクセスをすべく、Serviceを作成します。
NodePortオプションにてIP:Portで受付を行えるようにしています。
$ kubectl expose deployment nginx-deployment --type=NodePort service/nginx-deployment exposed
以下コマンドにて作成したサービスのURLを確認して
$ minikube service nginx-deployment --url http://192.168.99.100:32272
ブラウザ上で確認すれば以下のようなnginxのページが表示されています。
ちなみにサービスの設定は以下のようになっています。
spec:
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 32272
...
作成したオブジェクトを消去する
以下コマンドにてyamlファイルで作成したポッド群を削除できます。
$ kubectl delete -n default deployment nginx-deployment deployment.apps "nginx-deployment" deleted
以下コマンドでも同様です。
$ kubectl delete -f nginx-deployment.yaml deployment.apps "nginx-deployment" deleted
そして追加で作成したサービスは以下で消去できます。
$ kubectl delete -n default service nginx-deployment service "nginx-deployment" deleted
終わりに
minikubeを用いたローカル環境にて、nginx-deploymentという名前のDeploymentが作成し、それにサービスを付与して公開する流れを簡単に記載しました。
ご参考になれば幸いです。