クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

KubernetesのServiceとDNS

このレッスンのあとで: Serviceを作り、別のPodから名前で呼べる。

60分のレッスンコマンド14件Kubernetes のラボ:専用の Ubuntu VM に生徒ごとの1ノード k3s クラスター

Serviceとは何か

Service(サービス)は、入れ替わるPodの前に置く、変わらない名前と入口です。クラスタの中のほかのPodは、PodのIPアドレスでなく、Serviceの名前で呼べます。

Podは作り直されるたびに、IPアドレスが変わります。注文アプリが厨房アプリを呼ぶのに、毎回変わる住所は使えません。

このレッスンのゴール

メモ

Serviceを作り、別のPodから名前で呼べる。

重要な言葉

ことばいみれい
ServicePodの前に置く、変わらない名前と入口
セレクタServiceが送り先のPodを選ぶ、ラベルの条件app=kitchen
ClusterIPServiceに付く、クラスタの中だけの住所
クラスタDNSServiceの名前を住所に直す、クラスタの電話帳
targetPortPodの中で、アプリが待っているポート8080
EndpointSliceServiceが今送っている、Podの住所の一覧

学生が入力するセルは、このプレビューでは空白です。

Serviceはラベルで送り先を選ぶ

Serviceには、ポート番号とセレクタを書きます。セレクタは、ラベルの条件です。条件に合うPodが、送り先になります。

Podが増えても減っても、Serviceは条件に合うPodを選び直します。名前と入口は、そのまま変わりません。

名前空間を作る

コマンド
kubectl create namespace cafe

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

厨房アプリを2つ動かす

コマンド
kubectl create deployment kitchen --image=busybox:1.37.0 --replicas=2 -n cafe -- sh -c 'mkdir -p /www; echo hello from kitchen > /www/index.html; httpd -f -p 8080 -h /www'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

全部動くまで待つ

コマンド
kubectl rollout status deployment/kitchen -n cafe

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

Serviceを作る

コマンド
kubectl expose deployment kitchen --port=80 --target-port=8080 -n cafe

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

Serviceを読む

コマンド
kubectl get service kitchen -n cafe

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

セレクタだけを読む

コマンド
kubectl get service kitchen -n cafe -o jsonpath='{.spec.selector}'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

送り先の一覧

コマンド
kubectl get endpointslices -n cafe

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

クラスタDNSが名前を住所に直す

クラスタの中には、DNSがあります。Serviceの名前を、ClusterIPに直す電話帳です。

同じ名前空間なら kitchen で届きます。別の名前空間からは kitchen.cafe のように、名前空間まで書きます。全部書くと kitchen.cafe.svc.cluster.local です。

Serviceの名前の書き方

書き方どこから届くか例
kitchen同じ名前空間のPodからcafe の中から
kitchen.cafeどの名前空間のPodからもdefault の中から
kitchen.cafe.svc.cluster.localどこからも。全部を書いた名前どの名前空間でも

学生が入力するセルは、このプレビューでは空白です。

試すPodを1つ作って呼ぶ

kubectl run に --rm -i --restart=Never を付けると、試すPodを1つ動かして、終わると消えます。始めに、記録についての案内が2行出ることがあります。

wget -qO- は、ページの中身をそのまま表示します。厨房アプリは、hello from kitchen と答えます。

短い名前で呼ぶ

コマンド
kubectl run probe -n cafe --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- http://kitchen

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

全部書いた名前で呼ぶ

コマンド
kubectl run probe -n cafe --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- http://kitchen.cafe.svc.cluster.local

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

別の名前空間から呼ぶ

コマンド
kubectl run probe -n default --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- http://kitchen.cafe

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

別の名前空間から短い名前

コマンド
kubectl run probe -n default --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- http://kitchen

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

Serviceを作ったので、Podに届くと思いがちです。セレクタに合うPodが1つもなければ、Serviceはあっても送り先がありません。作ったあとは、必ずEndpointSliceに住所が並んでいるかを見ます。

送り先のないServiceを作る

コマンド
kubectl create service clusterip lost --tcp=80:8080 -n cafe

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

送り先の一覧をもう一度

コマンド
kubectl get endpointslices -n cafe

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

名前空間を片づける

コマンド
kubectl delete namespace cafe

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

このラボとソースについて: Kubernetes のラボ:専用の Ubuntu VM に生徒ごとの1ノード k3s クラスター

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。