★悩み★
・Kubernetesに自作したDockerイメージをデプロイできるのかな。
・自作したDockerイメージをKubernetesで起動する手順を知りたい。
・自作したDockerイメージをKubernetesで停止する手順を知りたい。
こういった「悩み」に答えます。
★本記事の内容★
① 自作したDockerイメージをKubernetesで起動するための準備をご紹介
② 自作したDockerイメージをKubernetesで起動する手順をご紹介
③ 自作したDockerイメージをKubernetesで停止する手順をご紹介
これからご紹介する「自作したDockerイメージをKubernetesで起動する手順」を実践したことで、2時間以内で「自作したDokcerのコンテナイメージをKubernetes上で起動」できました。
記事の前半では「自作したDockerのコンテナイメージをKubernetesで起動するための準備」を解説しつつ、記事の後半では「自作したDockerイメージをKubernetes上で起動停止する手順」を紹介します。
この記事を読み終えることで、「Kubernetes上で自作したDockerのコンテナイメージをデプロイできる」状態になります。
★Kubernetesとは★
Kubernetesを利用することで、マイクロサービスなシステムを構築できます。Kubernetesを利用したマイクロサービスに関して知りたい方は、以下の記事をご覧ください。
Kubernetesとマイクロサービスについて
ちなみに、「Kubernetesを体系的に学習したい」方には、以下の記事がお勧めです。
自作したDockerイメージをKubernetesで起動するための準備
「自作したDockerイメージをKubernetesで起動するための準備」に関してご紹介します。
★自作したDockerイメージをKubernetesで起動するための準備の流れ★
手順1:Kubernetesクラスタを構築
手順2:構築したKubernetesクラスタの状態確認
手順3:DockerHubのアカウント(ID)を作成
上記の流れで、「自作したDockerイメージをKubernetesで起動するための準備」ができます。
上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年5月31日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)
以降で、上記「自作したDockerイメージをKubernetesで起動するための準備の流れ」の各手順に関してご説明します。
手順1:Kubernetesクラスタを構築【自作イメージの動作環境用】
「手順1:Kubernetesクラスタを構築」に関してご説明します。
自作したDockerのコンテナイメージをKubernetesで起動するために、Kubernetesクラスタを構築しましょう。
「Kubernetesクラスタの構築手順」に関しては、以下の記事をご覧ください。
上記手順を実施することで、以下のKubernetesクラスタを構築できます。
以降の手順では、上図のKubernetesクラスタを想定としてご説明します。
既にKubernetesクラスタを構築済みである場合、本手順を省略してください。
以上で、「手順1:Kubernetesクラスタを構築」は完了です。
手順2:構築したKubernetesクラスタの状態確認
「手順2:構築したKubernetesクラスタの状態確認」に関してご説明します。
構築したKubernetesクラスタに「自作したDockerのコンテナイメージ」が起動できる状態になっているかを確認しましょう。
以下のコマンドをマスターで実行し、ワーカーノードが存在することを確認してください。
# 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クラスタの状態確認」は完了です。
手順3:DockerHubのアカウント(ID)を作成
「手順3:DockerHubのアカウント(ID)を作成」に関してご説明します。
自作したDockerイメージをKubernetesで起動するために、DockerHubのアカウント(ID)を作成しましょう。
「DockerHubのアカウント(ID)作成手順」に関しては、以下の記事をご覧ください。
既にDockerHubのアカウント(ID)を持っている場合、本手順を省略してください。
以上で、「手順3:DockerHubのアカウント(ID)を作成」は完了です。
上記の流れで、自作したDockerのコンテナイメージをKubernetesで起動するための準備ができました。
自作したDockerイメージをKubernetesで起動する手順
「自作したDockerイメージをKubernetesで起動する手順」に関してご紹介します。
★自作したDockerイメージをKubernetesで起動するまでの流れ★
手順1:Dockerのコンテナイメージを自作
手順2:自作したDockerのコンテナイメージをDockerHubへ公開
手順3:自作したDockerイメージを起動するPod定義ファイルを作成
手順4:自作したDockerイメージをKubernetes上で起動
手順5:Kubernetes上で起動したDockerイメージの動作確認
上記の流れで、「自作したDockerイメージをKubernetesで起動」できます。
上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2021年5月31日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)
以降で、上記「自作したDockerイメージをKubernetesで起動するまでの流れ」の各手順に関してご説明します。
手順1:Dockerのコンテナイメージを自作
「手順1:Dockerのコンテナイメージを自作」に関してご説明します。
Kubernetes上で起動させたいDockerのコンテナイメージを自作しましょう。
「Dockerのコンテナイメージを自作する手順」に関しては、以下の記事をご覧ください。
以上で、「手順1:Dockerのコンテナイメージを自作」は完了です。
手順2:自作したDockerのコンテナイメージをDockerHubへ公開
「手順2:自作したDockerのコンテナイメージをDockerHubへ公開」に関してご説明します。
自作したDockerのコンテナイメージをKubernetes上で起動するためには、DockerHubへ公開(アップロード)する必要があります。
「手順2:自作したDockerのコンテナイメージをDockerHubへ公開」に関しては、以下の記事をご覧ください。
以上で、「手順2:自作したDockerのコンテナイメージをDockerHubへ公開」は完了です。
手順3:自作したDockerイメージを起動するPod定義ファイルを作成
「手順3:自作したDockerイメージを起動するPod定義ファイルを作成」に関してご説明します。
「自作したDockerイメージをKubernetes上で起動する」ためには、Pod定義ファイルの作成が必要です。
Kubernetes上で「自作したDockerのコンテナイメージ」を起動するために、以下の定義ファイルを作成してください。定義ファイル内の「適宜変更」と書いてある部分は、自分用に書き換えてください。
apiVersion: v1
kind: Pod
metadata:
name: fastapi-pod
spec:
containers:
- name: fastapi-pod
image: docker.io/herokakedashi/fastapi
# ↑↑ docker.io/<DockerHubのアカウント名>/fastapiの形式で記載(適宜変更) ↑↑
ports:
- containerPort: 8000
name: "fastapi"
nodeSelector:
type: node2
上記の定義を「pod.yaml」というファイル名で保存しましょう。
以上で、「手順3:自作したDockerイメージを起動するPod定義ファイルを作成」は完了です。
手順4:自作したDockerイメージをKubernetes上で起動
「手順4:自作したDockerイメージをKubernetes上で起動」に関してご説明します。
自作したDockerのコンテナイメージをKubernetes上で起動しましょう。
自作したDockerのコンテナイメージをKubernetes上で起動するために、マスターで以下のコマンドを順に実行してください。
# kubectl create -f pod.yaml
pod/fastapi-pod created
# kubectl get po
NAME READY STATUS RESTARTS AGE
fastapi-pod 1/1 Running 0 20m
#
コマンド実行後、「Running」が表示された場合、「自作したDockerのコンテナイメージをKubernetes上で起動できた」と判断できます。
以上で、「手順4:自作したDockerイメージをKubernetes上で起動」は完了です。
手順5:Kubernetes上で起動したDockerイメージの動作確認
「手順5:Kubernetes上で起動したDockerイメージの動作確認」に関してご説明します。
Kubernetes上で起動した「自作したDockerのコンテナイメージ」の動作確認をしましょう。
マスターで以下のコマンドを順に実行し、Pod(アプリ)の動作を確認してください。
# kubectl describe all
Name: fastapi-pod
Namespace: default
Priority: 0
Node: node2/192.168.10.151
Start Time: Mon, 31 May 2021 20:36:41 +0900
Labels: <none>
Annotations: cni.projectcalico.org/podIP: 10.233.96.186/32
cni.projectcalico.org/podIPs: 10.233.96.186/32
Status: Running
IP: 10.233.96.186
IPs:
IP: 10.233.96.186
Containers:
fastapi-pod:
Container ID: docker://d85e3239722358bb056cd96624c7b2932086f5100ce68962f43bfb1d2e66d77a
Image: docker.io/herokakedashi/fastapi
Image ID: docker-pullable://herokakedashi/fastapi@sha256:bb340553ac39643f6828bfd5d018522036c982015c477f033cde5e59ec4b1109
Port: 8000/TCP
Host Port: 0/TCP
State: Running
Started: Mon, 31 May 2021 20:36:55 +0900
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-hsxf6 (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-hsxf6:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-hsxf6
Optional: false
QoS Class: BestEffort
Node-Selectors: type=node2
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 27m default-scheduler Successfully assigned default/fastapi-pod to node2
Normal Pulling 27m kubelet Pulling image "docker.io/herokakedashi/fastapi"
Normal Pulled 27m kubelet Successfully pulled image "docker.io/herokakedashi/fastapi" in 12.317886738s
Normal Created 27m kubelet Created container fastapi-pod
Normal Started 27m kubelet Started container fastapi-pod
# curl 10.233.96.186:8000
{"text":"hello!!"}
#
上記のように「{“text”:”hello!!”}」が表示された場合、「Kubernetes上で起動した自作のDockerコンテナイメージは正常に動作している」と判断できます。
以上で、「手順5:Kubernetes上で起動したDockerイメージの動作確認」は完了です。
上記の流れで、自作したDockerイメージをKubernetesで起動できました。
自作したDockerイメージをKubernetesで停止する手順
「自作したDockerイメージをKubernetesで停止する手順」に関してご説明します。
Kubernetes上で起動させた「自作したDockerのコンテナイメージ」を停止させてみましょう。
「自作したDockerイメージをKubernetesで停止する手順」に関しては、以下の記事「KubernetesでPodを削除(停止)する手順」部分をご覧ください。
以上で、Kubernetes上で起動した「自作したDockerイメージ」を停止できます。
ちなみに、「Kubernetesのアーキテクチャを体系的に学びたい」方は、以下の参考書がオススメです。
動画で学びたいという方には、以下がオススメです。
【まとめ】自作したDockerイメージをKubernetesで起動する手順
今回の記事を通して、「自作したDockerイメージをKubernetesで起動する手順」をご紹介することで、以下の悩みを解消しました。
★悩み★
・Kubernetesに自作したDockerイメージをデプロイできるのかな。
・自作したDockerイメージをKubernetesで起動する手順を知りたい。
・自作したDockerイメージをKubernetesで停止する手順を知りたい。
「自作したDockerイメージをKubernetesで起動/停止する手順は?」で悩んでいるあなたにこの記事が少しでも役に立てれば幸いです。
コメント