kubernetesチュートリアルをやってみる 第三回:アプリ探索

LINEで送る
Pocket

はじめに

kubernetes_logo

前回の記事では、「kubernetesチュートリアルをやってみる 第二回:アプリデプロイ」について書いて行きましたが、今回はアプリの探索について書いて行きたいと思います。

 

チュートリアルの内容

  1. kubernetesクラスタを作成する
  2. アプリケーションをクラスタにデプロイする
  3. ★アプリケーションを探索する
  4. アプリケーションを公開
  5. アプリケーションをスケールアップする
  6. アプリケーションを更新する

今回は、上記の内の★印部分を実施します。

環境

OS:CentOS Linux release 7.5.1804 (Core)
Kernel:3.10.0-862.2.3.el7.x86_64
minikube:v0.32.0

実施内容

今回は、kubernetesのPodとノードの概要を確認します。
また、minikubeを使用し、kuberntes公式のチュートリアルに従って、kubernetesクラスタにデプロイしたアプリケーションの詳細情報を確認したり、Pod内でコマンドを実行するところまでを実施したい思います。

kubernetesのPodの概要

 

kubernetes_03_pods

 

  • kubernetesはアプリケーションをホストするために、コンテナを持つPodを作成する
  • kubernetesはdeploymentを作成すると、その中にPodを作成する
    1. ボリューム(ストレージ)
    2. IPアドレス
    3. コンテナイメージのバージョンや使用するポートなど、各コンテナを実行するための情報
  • 各Podは、配置されたノードに関連付けされる(スケジューリング)
  • ノードに障害が発生した場合は、別のノードにスケジューリングされる

 

kubernetesのノードの概要

 

kubernetes_03_nodes

 

  • Podは、ノード上で動作する
  • ノードは、複数のPodを動作させる事が出来る
  • マスターは、ノードのリソース状況を監視し、Podをどのノードに配置するかを調整する(スケジューリング)
  • Kubeletと言う、マスターとノード間の通信を担当するプロセスがいる
  • コンテナを管理するプロセスも必要(dockerやrkt等)

 

手順

Podの確認

# kubectl get pod
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-598f57b95c-dr4z6 1/1 Running 1 7h20m
#

STATUSがRunningとなっているものが、起動しているPodとなります。

Podの詳細情報を確認

# kubectl describe pods
Name: kubernetes-bootcamp-598f57b95c-dr4z6
Namespace: default
Priority: 0
PriorityClassName:
Node: minikube/192.168.122.101
Start Time: Sun, 20 Jan 2019 13:48:14 +0900
Labels: pod-template-hash=598f57b95c
run=kubernetes-bootcamp
Annotations:
Status: Running
IP: 172.17.0.3
Controlled By: ReplicaSet/kubernetes-bootcamp-598f57b95c
Containers:
kubernetes-bootcamp:
Container ID: docker://3ad20156e08ba77d8db47da6b22a0f6da914ee6cca672d30657c73604206fb3b
Image: gcr.io/google-samples/kubernetes-bootcamp:v1
Image ID: docker-pullable://gcr.io/google-samples/kubernetes-bootcamp@sha256:0d6b8ee63bb57c5f5b6156f446b3bc3b3c143d233037f3a2f00e279c8fcc64af
Port: 8080/TCP
Host Port: 0/TCP
State: Running
Started: Sun, 20 Jan 2019 21:08:06 +0900
Last State: Terminated
Reason: Error
Exit Code: 137
Started: Sun, 20 Jan 2019 13:49:27 +0900
Finished: Sun, 20 Jan 2019 16:01:03 +0900
Ready: True
Restart Count: 1
Environment:
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-crgql (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-crgql:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-crgql
Optional: false
QoS Class: BestEffort
Node-Selectors:
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SandboxChanged 4m12s kubelet, minikube Pod sandbox changed, it will be killed and re-created.
Normal Pulled 4m7s kubelet, minikube Container image "gcr.io/google-samples/kubernetes-bootcamp:v1" already present on machine
Normal Created 4m6s kubelet, minikube Created container
Normal Started 4m4s kubelet, minikube Started container
#

使用しているIPアドレスやポート、起動するまでに発生したイベント情報などが確認出来ます。

Podの出力ログ確認

# export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
#
# echo Name of the Pod: $POD_NAME
Name of the Pod: kubernetes-bootcamp-598f57b95c-dr4z6
#
# kubectl logs $POD_NAME
Kubernetes Bootcamp App Started At: 2019-01-20T12:08:11.155Z | Running On: kubernetes-bootcamp-598f57b95c-dr4z6

#

Pod名を環境変数$POD_NAMEに格納し、このPodのログを確認しています。
Podは、STDOUTに送信するものはすべてログとして出力します。

コンテナでコマンドを実行する

# kubectl exec $POD_NAME env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=kubernetes-bootcamp-598f57b95c-dr4z6
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
NPM_CONFIG_LOGLEVEL=info
NODE_VERSION=6.3.1
HOME=/root
#

ノード上からコンテナ内で env コマンドを実行し、コンテナ内の環境変数を確認しています。

コンテナ内のbashセッションを開始

# kubectl exec -ti $POD_NAME bash
root@kubernetes-bootcamp-598f57b95c-dr4z6:/#

こうする事で、コンテナ上のターミナルを開く事ができます。

コンテナ内でのソースファイル確認

root@kubernetes-bootcamp-598f57b95c-dr4z6:/# ls server.js
server.js
root@kubernetes-bootcamp-598f57b95c-dr4z6:/#
root@kubernetes-bootcamp-598f57b95c-dr4z6:/# cat server.js
var http = require('http');
var requests=0;
var podname= process.env.HOSTNAME;
var startTime;
var host;
var handleRequest = function(request, response) {
response.setHeader('Content-Type', 'text/plain');
response.writeHead(200);
response.write("Hello Kubernetes bootcamp! | Running on: ");
response.write(host);
response.end(" | v=1\n");
console.log("Running On:" ,host, "| Total Requests:", ++requests,"| App Uptime:", (new Date() - startTime)/1000 , "seconds", "| Log Time:",new Date());
}
var www = http.createServer(handleRequest);
www.listen(8080,function () {
startTime = new Date();;
host = process.env.HOSTNAME;
console.log ("Kubernetes Bootcamp App Started At:",startTime, "| Running On: " ,host, "\n" );
});
root@kubernetes-bootcamp-598f57b95c-dr4z6:/#

コンテナ内でのアプリケーション動作確認

root@kubernetes-bootcamp-598f57b95c-dr4z6:/# curl localhost:8080
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-598f57b95c-dr4z6 | v=1
root@kubernetes-bootcamp-598f57b95c-dr4z6:/#

ノード上からcurl でアプリケーションの動作確認を実行したものと同じ結果が得られました。

コンテナ接続を閉じる

root@kubernetes-bootcamp-598f57b95c-dr4z6:/# exit
exit
#

exitでコンテナへの接続を閉じ、ノードへ戻ります。

 

まとめ

今回使用したコマンドは以下となります。

  • kubectl get : リソースの一覧表示
  • kubectl describe : リソースの詳細情報を表示
  • kubectl logs : コンテナのログを表示
  • kubectl exec : Pod内のコンテナに対してコマンドを実行する

上記のコマンドがkubernetesのアプリケーション状態を確認するための、基本的なコマンドとなります。

次回は、アプリケーションの公開について書いて行きたいと思います。

参考サイト

Learn Kubernetes Basics

 

LINEで送る
Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

1 × 5 =