Skip to content

コードで定義する

KubernetesはInfrastructure as Code でのアプローチを公式でサポートしています。
Objectsのコードはyamlで表現することが可能です。また、このコードのことをManifestと呼びます。

nginxの起動

例のごとく"handson-4"という名前で"nginx"を起動することを例にします。

今までは以下のように kubectl run を使ってコンテナをデプロイしてきました。

$ kubectl run handson-4 --image=nginx --port=80

コードで定義すると上記のコマンドは以下のようなyamlになります。

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    run: handson-4
  name: handson-4
spec:
  selector:
    matchLabels:
      run: handson-4
  template:
    metadata:
      labels:
        run: handson-4
    spec:
      containers:
      - image: nginx
        name: handson-4
        ports:
        - containerPort: 80

まずは実際に上記のコードが実際に動作するか見てみましょう

$ vi manifest.yaml

作成したコードは kubectl apply -f <ファイル名> で適用できます。
早速実行してみましょう。

$ kubectl apply -f manifest.yaml
deployment.apps/handson-4 created
$ kubectl get all -l run=handson-4
NAME                            READY   STATUS    RESTARTS   AGE
pod/handson-4-696c5c849-wlhdk   1/1     Running   0          9s

NAME                        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/handson-4   1         1         1            1           9s

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/handson-4-696c5c849   1         1         1       9s

LoadBalancerの起動

コンテナのデプロイと同じくロードバランサもmanifestで定義可能です。 以下のコードを先程のファイルへ追記してみましょう。

$ vi manifest.yaml
---
apiVersion: v1
kind: Service
metadata:
  labels:
    run: handson-4
  name: handson-4
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    run: handson-4
  type: LoadBalancer

ロードバランサがセットアップされたか確認してみましょう。

$ kubectl apply -f manifest.yaml
deployment.apps/handson-4 configured
service/handson-4 created
$ kubectl get all
NAME                            READY   STATUS    RESTARTS   AGE
pod/handson-4-696c5c849-wlhdk   1/1     Running   0          1h

NAME                TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
service/handson-4   LoadBalancer   10.3.250.83   <pending>     80:32533/TCP   27s

NAME                        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/handson-4   1         1         1            1           1h

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/handson-4-696c5c849   1         1         1       1h

お片付け

コマンドから起動した "handson" と命名したObjectsの削除。

$ kubectl delete service handson
service "handson" deleted
$ kubectl delete deployment handson
deployment.extensions "handson" deleted

コードから定義した "handson-4" 命名したObjectsの削除。

$ kubectl delete -f manifest.yaml
deployment.apps "handson-4" deleted
service "handson-4" deleted