ハンズオンを試される場合
もしもハンズオンを試される場合は以下のリンクに必要なセッティングについてまとめましたので、必要項目のインストールをしてください。
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というリソースについてまとめていこうと思います。