★悩み★
・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を作成(起動)と削除(停止)する手順は?」で悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。
コメント