(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubanetes】マニフェストをapplyしてDeploymentを作成する流れ

スポンサーリンク

はじめに

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つのポッドがブラウザベースで確認できます。

f:id:mtiit:20200207144901p:plain
ポッドが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のページが表示されています。

f:id:mtiit:20200207144508p:plain
nginxのWelcomeページ

ちなみにサービスの設定は以下のようになっています。

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が作成し、それにサービスを付与して公開する流れを簡単に記載しました。

ご参考になれば幸いです。