前回、前々回において、Kubernetesのコントロールプレーンの構築とワーカーノードを追加する手順を記載した。
- Kubernetes構築手順① (cri-dockerdを使ってコントロールプレーンを構築)
- Kubernetes構築手順② (ワーカーノードを追加)
- Kubernetes構築手順③ (マニフェストファイルを使ってDockerコンテナをデプロイ) ★本記事
- Kubernetes構築手順④ (コントロールプレーンを冗長構成にする)
本記事では、構築したKubernetes環境にマニフェストファイルを使ってDockerコンテナをデプロイする手順を記載する。
環境
以下に今回構築する各種ソフトウェアのバージョンを記載する。
- ホストOS : AlmaLinux 8.6
- Docker : 23.0.1
- cri-dockerd: 0.3.1-dev
- Kubernetes: v1.26.2
今回の構成の概要図を以下に記載する。
マニフェストファイルの準備
マニフェストファイルは、Pod用とサービスリソース用の2種類を作成する。マニフェストファイルの記載方法の説明は、過去minikubeで検証した際に説明をしているので、参考にしていただきたい。
1. Pod用マニフェストファイル
検証用のPodのコンテナイメージは、minikubeでも確認用途で使用していたkicbase/echo-server
を使用する。コントロールプレーン含め、3台のノードにPodが配置されることを確認するため、replicas: 3
を設定した。
deployment-hello.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-k8s-deployment
labels:
app: hello-k8s-deployment
spec:
replicas: 3
selector:
matchLabels:
app: hello-k8s
template:
metadata:
labels:
app: hello-k8s
spec:
containers:
- name: hello-k8s
image: kicbase/echo-server:1.0
imagePullPolicy: Always
2. サービスリソース用マニフェストファイル
サービスリソースのタイプはNodePort
を選択し、各ノードのIPアドレスにアクセスした際に、Podに接続を振り分けるよう設定する。
service-hello.yml
apiVersion: v1
kind: Service
metadata:
name: hello-k8s-service
labels:
app: hello-k8s-service
spec:
selector:
app: hello-k8s
ports:
- port: 8080
type: NodePort
Dockerコンテナをデプロイ
1. Podをデプロイ
作成したマニフェストファイルをkubectl apply
コマンドで展開する。
# kubectl apply -f deployment-hello.yml
deployment.apps/hello-k8s-deployment created
問題なければ、以下のように3台のPodが展開される。NODEの項目を確認すると、各Podは別々のノードで起動していることがわかる。
# kubectl get pod -o=wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
hello-k8s-deployment-6c69965bcb-24qkv 1/1 Running 0 12s 10.244.0.6 t1051kube <none> <none>
hello-k8s-deployment-6c69965bcb-4bp74 1/1 Running 0 12s 10.244.2.4 t1053kube <none> <none>
hello-k8s-deployment-6c69965bcb-fkbpr 1/1 Running 0 12s 10.244.1.4 t1052kube <none> <none>
2. サービスリソースをデプロイ
サービスリソースも同様にkubectl apply
コマンドで展開する。
# kubectl apply -f service-hello.yml
service/hello-k8s-service created
問題なければ、サービスリソースは以下の通り表示される。今回はPORTの項目 に記載されている31595ポートが接続用のポート番号となる。
# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-k8s-service NodePort 10.102.109.11 <none> 8080:31595/TCP 31s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 24h
3. デプロイしたPodへ接続確認
それでは実際にサービスリソース経由でPodにアクセスをしてみよう。
接続先URLは以下の通り。今回はNodePortの設定となるため、接続先は任意のノードの物理IPアドレスとなる。ポート番号は、先ほど確認した31595ポートとなる。
- http://[任意のノードの物理IPアドレス]:31595
試しにブラウザからノード#3に接続すると以下の通り表示された。
最上部にアクセス先のPodが表示されるており、hello-k8s-deployment-6c69965bcb-4bp74
となっている。このことから、ノード#2で起動しているPodであり、たとえノード#3の物理IPアドレスにアクセスしたとしても、実際にアクセスするPodは同一ノードのものとは限らず、任意のPodが選ばれていることがわかる。
以上で、Kubernetes環境にマニフェストファイルを使ってDockerコンテナをデプロイする手順は完了となる。
0 件のコメント:
コメントを投稿