2023年3月25日土曜日

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 件のコメント:

コメントを投稿

人気の投稿