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

 

実施内容

今回はminikubeを使用し、kuberntes公式のチュートリアルに従って、kubernetesクラスタにアプリケーションをデプロイ(配置)するところまでを実施したい思います。

 

kubernetesクラスタにアプリケーションをデプロイする概念

kubernetes_02_first_app

 

  • kubernetesクラスタ上には、コンテナ化したアプリケーションをデプロイする
  • コンテナ化したアプリケーションは、Podと言う単位で動作し、単一もしくは複数のPodをまとめてDeploymentと呼ばれるものでkubernetesは管理する
  • kubernetesマスターが、クラスタ上の各ノードのリソース状態を見て、配置可能なノードにDeploymentを配置する(スケジューリング)
  • Kubernetes Deployment Controllerは、このDeploymentを継続的に監視する
  • ノードに障害などが発生して停止するとKubernetesが検知し、別の配置可能なノードにDeploymentを再配置する(自己修復メカニズム)

 

手順

アプリケーションをデプロイする

# kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/kubernetes-bootcamp created
#

kubectl runコマンドで、新たなアプリケーションをデプロイしています。
imageで指定しているのは、コンテナ化したアプリケーションで、このチュートリアル用に用意されているNode.jsのアプリケーションです。

deploymentの作成確認

# kubectl get deployments
NAME                     DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp    1         1          1           1          3m7s
#

kubernetes-bootcampと言う名前のdeploymentが作成されました。
AVAILABLEの1が、使用可能なdeploymentが1つある事を表しています。

kubernetesプロキシの作成

kubernetesで動作するアプリケーションは、作成時はkubernetesクラスタの内部のみで通信可能な状態となります。
このアプリケーションの動作確認のため、クラスタ外のネットワークに通信出来るようにプロキシを作成します。
(別途アプリケーションを外部に公開する機能もありますが、こちらは別の回で紹介します。)

プロキシ作成のために、もう一つのターミナルを開いて以下を実行します。

# kubectl proxy
Starting to serve on 127.0.0.1:8001

プロキシの動作確認

元のターミナルに戻り、以下を実行します。

# curl http://localhost:8001/version
{
"major": "1",
"minor": "12",
"gitVersion": "v1.12.4",
"gitCommit": "f49fa022dbe63faafd0da106ef7e05a29721d3f1",
"gitTreeState": "clean",
"buildDate": "2018-12-14T06:59:37Z",
"goVersion": "go1.10.4",
"compiler": "gc",
"platform": "linux/amd64"
}#

動作するkubernetesのバージョンが表示出来た事から、プロキシの動作確認が出来ました。
動作としては、curlコマンドを使用して、kubernetes APIを通じてバージョンを問い合わせています。

Pod名の確認

アプリケーションの動作確認をするために、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
#

Pod名を取得して、これを環境変数POD_NAMEに格納しています。
これで、Podで実行しているアプリケーションにHTTPリクエストを送信出来るようになりました。

アプリケーションへ、HTTPリクエストを送信

# curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-598f57b95c-dr4z6 | v=1
#

このアプリケーションは、「Hello Kubernetes bootcamp!」と言うメッセージを表示し、動作しているPod名とアプリケーションのバージョンを表示するものとなっています。

 

プロキシの停止

プロキシを動作させてもう一つのターミナルで、「ctrl + C」を押すと、プロキシが停止します。

(以下の★印)

# kubectl proxy
Starting to serve on 127.0.0.1:8001
^C ←★
#

 

まとめ

  • kubectl run でdeploymentを作成する
  • deployment作成時は、kubernetesクラスタ内部でのみ通信可能
  • kubectl proxy で、クラスタ外部と通信可能となる
  • アプリケーションの動作確認時は、Podに対して行う

コンテナ化されたアプリケーションがあると、コマンド一つでクラスタ内にアプリケーションをデプロイできる事が確認出来ました。
次回は、デプロイしたアプリケーションを探索する操作について書いて行きたいと思います。

 

参考サイト

Learn Kubernetes Basics

 

LINEで送る
Pocket

コメントを残す

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

fourteen + six =