Podについて

kubernetes

ハンズオンを試される場合

もしもハンズオンを試される場合は以下のリンクに必要なセッティングについてまとめましたので、必要項目のインストールをしてください。

kubernetesセッティング

minikube start

セッティングを終えたら、上記のコマンドを実行することで、localマシン上にシングルノードクラスターを形成し、kubernetesの練習をすることができます。

実際にはAWSのEKSなどを使い、複数ワーカーノードを操ることになります。

全体マップ

Podは全体マップ下部にある、8個に冗長化されている部分にあたります。

Podとは

Dockerコンテナの集合体。クジラの小規模な群れを意味するらしく、Dockerのイメージキャラクターがクジラなのでそれに因んでいるのだろうか?
管理上の基本単位であり、同じIP、同じVolumeファイルシステムを共有し、仮想ホストのような働きをします。

helloworldPodのYaml作成コマンド

kubectl run \
--restart Never helloworld \
--image gcr.io/google-samples/hello-app:1.0 \
--port 8080 \
--dry-run \
-o yaml > pod_helloworld.yaml

このコマンドはkubernetesリソースであるPodを作成するための設計書であるyamlファイルを生成するためのコマンドです。

--restart NeverというのがPodを作成するための指示です。

--restart=Always // Deploymentが作成される
--restart=OnFailure // Jobがが作成される
--restart=Never // 通常のpodが作成される

--imageでDockerHubからイメージを取得しPod内にコンテナを形成し、port8080でpod外に公開しています。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: helloworld
  name: helloworld
spec:
  containers:
  - image: gcr.io/google-samples/hello-app:1.0
    name: helloworld
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}

こちらが実際に形成されるyamlファイル。

そしてこの内容に納得したら以下のコマンドでpodの作成を指示します。

kubectl apply -f pod_helloworld.yaml

作成したPodは以下のコマンドで確認できます。

kubectl get pod

NAME                           READY   STATUS    RESTARTS   AGE
pod/helloworld                 1/1     Running   0          10s

これが実際に作成されたPodです。

helloworldという名前のPodが10秒前に作成されていることがわかります。

curl起動コマンド

それではhelloworld podに対して接続テストをしてみましょう。

以下のコマンドでcurlコンテナPodを作成し、cluster内部からの接続テストを行います。

kubectl run \
--restart Never \
--image curlimages/curl:7.68.0 \
-it --rm curl sh

--rm はプロセス終了と共にコンテナを破棄。

If you don't see a command prompt, try pressing enter.
/ $

curlコンテナが立ち上がるとtty接続が確立され、入力待ちの状態になります。

ここでHelloworldのIPアドレスを知りたいので以下のコマンドでIPアドレスを調べます。

kubectl get all -o wide

NAME                           READY   STATUS    RESTARTS   AGE     IP
pod/curl                       1/1     Running   0          10m     192.168.43.169
pod/helloworld                 1/1     Running   0          15m     192.168.63.74

IPアドレスがわかったところで先程のcurlのtty接続の入力待ちに以下のコマンドを入力。

If you don't see a command prompt, try pressing enter.
/ $ curl 192.168.63.74:8080

すると以下のレスポンスが帰ってくるはずです。

Hello, world!
Version: 1.0.0
Hostname: helloworld

これでcluster内部のpod同士の通信を確認することができました。

まとめ

ここで行ったことはkubernetesを操るために最も基本となる大切な操作になります。

ただし、この部分に関しては頭で理屈をこねるよりも、何度も試して目を慣らし手を慣らしして学習することをオススメします。

また、この段階で行っていることが全くチンプンカンプンということであれば、それはDockerの学習が足りてないと推定できます。

kubernetesのコマンドはDockerのそれと非常に類似しています。

Dockerの学習が足りない場合は、薄めの本を一冊選んで読んでみることをオススメ致します。

今回はhelloworldPodとcurlPodを作成し、Cluster内部の通信を確認しましたが、まだこの段階ではCluster外部にこれらのPodは公開されていません。

次回はこれらのPodをcluster外部に公開するためのServiceというリソースについてまとめていこうと思います。

タイトルとURLをコピーしました