【コピペOK】KubernetesでPodを作成(起動)と削除(停止)する手順

 

★悩み★
・Kubernetesを構築したけど、アプリをデプロイする手順が分からない。
・構築したKubernetes上にPod(アプリ)を作成(起動)する手順を知りたい。
・Kubernetesに作成(起動)したPod(アプリ)の停止(削除)手順を知りたい。


こういった「悩み」に答えます。
 

★本記事の内容★
① KubernetesでPodを作成(起動)と削除(停止)するための準備をご紹介
② KubernetesでPodを作成(起動)する手順をご紹介
③ KubernetesでPodを削除(停止)する手順をご紹介


これからご紹介する「KubernetesでPodを作成(起動)と削除(停止)する手順」を実践したことで、2時間以内で「Kubernetes上にPod(アプリ)の作成(起動)と削除(停止)」ができました。

記事の前半では「KubernetesでPodを作成(起動)と削除(停止)するための準備」を解説しつつ、記事の後半では「Kubernetes上でのPod(アプリ)作成(起動)と削除(停止)」を紹介します。

この記事を読み終えることで、「Kubernetes上にPod(アプリ)をデプロイできる」状態になります。
 

★Kubernetesとは★
Kubernetesを利用することで、マイクロサービスなシステムを構築できます。Kubernetesを利用したマイクロサービスに関して知りたい方は、以下の記事をご覧ください。
 
Kubernetesとマイクロサービスについて

 

★Podとは★
Pod は、Kubernetesアプリケーションの基本的な実行単位です。これは、作成またはデプロイするKubernetesオブジェクトモデルの中で最小かつ最も単純な単位です。

Kubernetesの公式サイト



ちなみに、「Kubernetesを体系的に学習したい」方には、以下の記事がお勧めです。
 


 

 


 

KubernetesでPodを作成(起動)と削除(停止)するための準備


「KubernetesでPodを作成(起動)と削除(停止)するための準備」に関してご紹介します。

★KubernetesでPodを作成(起動)と削除(停止)するための準備の流れ★
手順1:Kubernetesクラスタを構築
手順2:構築したKubernetesクラスタの状態確認


上記の流れで、「KubernetesでPodを作成(起動)と削除(停止)するための準備」ができます。
 

上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年4月11日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)


以降で、上記「KubernetesでPodを作成(起動)と削除(停止)するための準備の流れ」の各手順に関してご説明します。
 

手順1:Kubernetesクラスタを構築

「手順1:Kubernetesクラスタを構築」に関してご説明します。
 

Kubernetes上でPod(アプリ)を作成(起動)するために、Kubernetesクラスタを構築しましょう。


「Kubernetesクラスタの構築手順」に関しては、以下の記事をご覧ください。
 


上記手順を実施することで、以下のKubernetesクラスタを構築できます。
 


以降の手順では、上図のKubernetesクラスタを想定としてご説明します。
  

既にKubernetesクラスタを構築済みである場合、本手順を省略してください。


以上で、「手順1:Kubernetesクラスタを構築」は完了です。
 

手順2:構築したKubernetesクラスタの状態確認

「手順2:構築したKubernetesクラスタの状態確認」に関してご説明します。
 

構築したKubernetesクラスタにPod(アプリ)を作成(起動)できる状態になっているかを確認しましょう。


以下のコマンドをマスターで実行し、ワーカーノードが存在することを確認してください。

# kubectl get nodes
NAME    STATUS   ROLES                  AGE     VERSION
node1   Ready    control-plane,master   3m47s   v1.20.5
node2   Ready    <none>                 2m55s   v1.20.5
node3   Ready    <none>                 2m55s   v1.20.5


コマンド実行結果において、上記のように「worker」が存在しない場合、ワーカーノードを割り当てるために、以下のコマンドをマスターで実行しましょう。

# kubectl label node node2 node-role.kubernetes.io/worker=worker
# kubectl label node node3 node-role.kubernetes.io/worker=worker


ワーカーノードが割り当たったことを確認するために、以下のコマンドをマスターで実行してください。

# kubectl get nodes
NAME    STATUS   ROLES                  AGE     VERSION
node1   Ready    control-plane,master   3m47s   v1.20.5
node2   Ready    worker                 2m55s   v1.20.5
node3   Ready    worker                 2m55s   v1.20.5


コマンド実行結果において、上記のように「worker」が出力された場合、「無事にワーカーノードを割り当てられた」と判断できます。

以上で、「手順2:構築したKubernetesクラスタの状態確認」は完了です。
 

上記の流れで、KubernetesでPodを作成(起動)と削除(停止)するための準備ができました。

 

KubernetesでPodを作成(起動)する手順


「KubernetesでPodを作成(起動)する手順」に関してご紹介します。

★KubernetesでPodを作成(起動)するまでの流れ★
手順1:Pod(アプリ)の定義ファイルを作成
手順2:構築したKubernetesクラスタ上でPod(アプリ)を作成(起動)
手順3:Kubernetesクラスタ上に作成(起動)したPodの動作確認


上記の流れで、「KubernetesでPodを作成(起動)」できます。
 

上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年4月11日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)


以降で、上記「KubernetesでPodを作成(起動)するまでの流れ」の各手順に関してご説明します。
 

手順1:Pod(アプリ)の定義ファイルを作成

「手順1:Pod(アプリ)の定義ファイルを作成」に関してご説明します。
 

Kubernetesクラスタ上で起動(作成)したいPod(アプリ)の定義ファイルを作成しましょう。


今回は、Kubernetesクラスタ上で「Apacheサーバ」のPod(アプリ)を作成(起動)するために、以下の定義ファイルを作成してください。

apiVersion: v1
kind: Pod
metadata:
  name: httpd
  labels:
    app: httpd
spec:
  containers:
  - name: httpd
    image: httpd
    ports:
    - containerPort: 80


上記の定義を「pod-httpd.yaml」というファイル名で保存しましょう。

以上で、「手順1:Pod(アプリ)の定義ファイルを作成」は完了です。
 

手順2:構築したKubernetesクラスタ上でPod(アプリ)を作成(起動)

「手順2:構築したKubernetesクラスタ上でPod(アプリ)を作成(起動)」に関してご説明します。
 

Kubernetesクラスタ上でPod(アプリ)を作成(起動)しましょう。


Kubernetesクラスタ上でPod(アプリ)を作成(起動)するために、マスターで以下のコマンドを順に実行してください。

# kubectl create -f pod-httpd.yaml
pod/httpd created
# kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
httpd   1/1     Running   0          14s
#


コマンド実行後、「Running」が表示された場合、「Kubernetesクラスタ上にPod(アプリ)を作成(起動)できた」と判断できます。

以上で、「手順2:構築したKubernetesクラスタ上でPod(アプリ)を作成(起動)」は完了です。
 

手順3:Kubernetesクラスタ上に作成(起動)したPodの動作確認

「手順3:Kubernetesクラスタ上に作成(起動)したPodの動作確認」に関してご説明します。
 

Kubernetesクラスタ上に作成(起動)したPod(アプリ)の動作確認をしましょう。


マスターで以下のコマンドを順に実行し、Pod(アプリ)の動作を確認してください。

# kubectl get pod httpd -o yaml
apiVersion: v1
kind: Pod
metadata:
  annotations:
    cni.projectcalico.org/podIP: 10.233.92.4/32
    cni.projectcalico.org/podIPs: 10.233.92.4/32
  creationTimestamp: "2021-04-11T10:43:58Z"
  labels:
    app: httpd
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:cni.projectcalico.org/podIP: {}
          f:cni.projectcalico.org/podIPs: {}
    manager: calico
    operation: Update
    time: "2021-04-11T10:43:58Z"
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:labels:
          .: {}
          f:app: {}
      f:spec:
        f:containers:
          k:{"name":"httpd"}:
            .: {}
            f:image: {}
            f:imagePullPolicy: {}
            f:name: {}
            f:ports:
              .: {}
              k:{"containerPort":80,"protocol":"TCP"}:
                .: {}
                f:containerPort: {}
                f:protocol: {}
            f:resources: {}
            f:terminationMessagePath: {}
            f:terminationMessagePolicy: {}
        f:dnsPolicy: {}
        f:enableServiceLinks: {}
        f:restartPolicy: {}
        f:schedulerName: {}
        f:securityContext: {}
        f:terminationGracePeriodSeconds: {}
    manager: kubectl-create
    operation: Update
    time: "2021-04-11T10:43:58Z"
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:status:
        f:conditions:
          k:{"type":"ContainersReady"}:
            .: {}
            f:lastProbeTime: {}
            f:lastTransitionTime: {}
            f:status: {}
            f:type: {}
          k:{"type":"Initialized"}:
            .: {}
            f:lastProbeTime: {}
            f:lastTransitionTime: {}
            f:status: {}
            f:type: {}
          k:{"type":"Ready"}:
            .: {}
            f:lastProbeTime: {}
            f:lastTransitionTime: {}
            f:status: {}
            f:type: {}
        f:containerStatuses: {}
        f:hostIP: {}
        f:phase: {}
        f:podIP: {}
        f:podIPs:
          .: {}
          k:{"ip":"10.233.92.4"}:
            .: {}
            f:ip: {}
        f:startTime: {}
    manager: kubelet
    operation: Update
    time: "2021-04-11T10:44:07Z"
  name: httpd
  namespace: default
  resourceVersion: "5416"
  uid: 981e83a0-530d-4428-b741-df896cc667fa
spec:
  containers:
  - image: httpd
    imagePullPolicy: Always
    name: httpd
    ports:
    - containerPort: 80
      protocol: TCP
    resources: {}
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: default-token-hsxf6
      readOnly: true
  dnsPolicy: ClusterFirst
  enableServiceLinks: true
  nodeName: node3
  preemptionPolicy: PreemptLowerPriority
  priority: 0
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: default
  serviceAccountName: default
  terminationGracePeriodSeconds: 30
  tolerations:
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
  volumes:
  - name: default-token-hsxf6
    secret:
      defaultMode: 420
      secretName: default-token-hsxf6
status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: "2021-04-11T10:43:58Z"
    status: "True"
    type: Initialized
  - lastProbeTime: null
    lastTransitionTime: "2021-04-11T10:44:07Z"
    status: "True"
    type: Ready
  - lastProbeTime: null
    lastTransitionTime: "2021-04-11T10:44:07Z"
    status: "True"
    type: ContainersReady
  - lastProbeTime: null
    lastTransitionTime: "2021-04-11T10:43:58Z"
    status: "True"
    type: PodScheduled
  containerStatuses:
  - containerID: docker://305d0f1860a6befb490bc7adce714f341d9c5dfd4f99ce83e86e50ccd3985c2e
    image: httpd:latest
    imageID: docker-pullable://httpd@sha256:a6e472ad921c93d9fc2cbe2ff07560b9a526c145c4e10faff3aeb28c48cce585
    lastState: {}
    name: httpd
    ready: true
    restartCount: 0
    started: true
    state:
      running:
        startedAt: "2021-04-11T10:44:06Z"
  hostIP: 192.168.10.152
  phase: Running
  podIP: 10.233.92.4
  podIPs:
  - ip: 10.233.92.4
  qosClass: BestEffort
  startTime: "2021-04-11T10:43:58Z"
# curl 10.233.92.4
<html><body><h1>It works!</h1></body></html>
# 


上記のように「It works!」が表示された場合、「Kubernetesクラスタ上に作成(起動)したPodは正常に動作している」と判断できます。

以上で、「手順3:Kubernetesクラスタ上に作成(起動)したPodの動作確認」は完了です。
 

上記の流れで、KubernetesでPodを作成(起動)できました。

 

KubernetesでPodを削除(停止)する手順


「KubernetesでPodを削除(停止)する手順」に関してご紹介します。

★KubernetesでPodを削除(停止)するまでの流れ★
手順1:Kubernetesクラスタ上で起動しているPod(アプリ)を確認
手順2:Kubernetesクラスタ上で起動しているPod(アプリ)を削除(停止)


上記の流れで、「KubernetesでPodを削除(停止)」できます。
 

上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年4月11日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)


以降で、上記「KubernetesでPodを削除(停止)するまでの流れ」の各手順に関してご説明します。
 

手順1:Kubernetesクラスタ上で起動しているPod(アプリ)を確認

「手順1:Kubernetesクラスタ上で起動しているPod(アプリ)を確認」に関してご説明します。
 

Kubernetesクラスタ上で起動しているPod(アプリ)があるかを確認しましょう。


マスターで以下のコマンドを実行し、起動中のPod(アプリ)があることを確認してください。

# kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
httpd   1/1     Running   0          14s
#


コマンド実行後、「httpd 1/1 Running」が表示された場合、「 ” KubernetesでPodを作成(起動)する手順 ” で起動(作成)したPod(アプリ)が起動している」と判断できます。

以上で、「手順1:Kubernetesクラスタ上で起動しているPod(アプリ)を確認」は完了です。
 

手順2:Kubernetesクラスタ上で起動しているPod(アプリ)を削除(停止)

「手順2:Kubernetesクラスタ上で起動しているPod(アプリ)を削除(停止)」に関してご説明します。
 

Kubernetesクラスタ上で起動しているPod(アプリ)を削除(停止)しましょう。


マスターで以下のコマンドを順に実行し、起動中のPod(アプリ)を削除(停止)してください。

# kubectl delete pod httpd
pod "httpd" deleted
# kubectl get pods
No resources found in default namespace.
# 


コマンド実行後、「No resources found in default namespace.」が表示された場合、「正常にPod(アプリ)を削除(停止)できた」と判断できます。

以上で、「手順2:Kubernetesクラスタ上で起動しているPod(アプリ)を削除(停止)」は完了です。
 

上記の流れで、KubernetesでPodを削除(停止)できました。

 

【まとめ】KubernetesでPodを作成(起動)と削除(停止)する手順

今回の記事を通して、「KubernetesでPodを作成(起動)と削除(停止)する手順」をご紹介することで、以下の悩みを解消しました。

★悩み★
・Kubernetesを構築したけど、アプリをデプロイする手順が分からない。
・構築したKubernetes上にPod(アプリ)を作成(起動)する手順を知りたい。
・Kubernetesに作成(起動)したPod(アプリ)の停止(削除)手順を知りたい。


「KubernetesでPodを作成(起動)と削除(停止)する手順?」で悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。


 

 


 

コメント