Kubernetes(k8s)チュートリアルを試してみる-アプリのデプロイ

公開されているイメージをk8s上に展開してみる。




  1. クラスタの作成
  2. アプリのデプロイ
  3. 仕組みについて知る
  4. アプリを公開する
  5. アプリのスケール
  6. アプリの更新



アプリのデプロイ


https://kubernetes.io/ja/docs/tutorials/kubernetes-basics/deploy-app/

アプリの配置

gcr.io/google-samples/kubernetes-bootcamp からイメージを取得してきて配置する。

以下が実際の公開コンテナレジストリになる。
https://console.cloud.google.com/gcr/images/google-samples/GLOBAL/kubernetes-bootcamp

kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080

ちなみに現時点で上記コマンドは非推奨になっていて通常はdeloyment.ymlを使用する。


デプロイメントの確認


kubectl get deployments

MacBook-Pro:xxxx xxxx$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-nodejs-deployment 3 3 3 0 63d
kubernetes-bootcamp 1 1 1 1 3m

kubernetes-bootcamp が表示されていたら成功。



デプロイしたアプリ情報の確認


内部的には稼働しているがまだアプリそのものを参照することはできない。
プロキシを作成することで内部にアクセスできるようになる。

プロキシ起動


kubectl proxy

http://127.0.0.1:8001/ にアクセスするとAPIが一覧で確認できる。
例えば http://127.0.0.1:8001/version にアクセスするとバージョン情報が取得できる。
あるいはcurl コマンドでもいい。
curl http://127.0.0.1:8001/healthz/ping

Pod名を取得する


MacBook-Pro:xxxx xxxx$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-nodejs-deployment-645fb786c5-4fch2 0/1 ImagePullBackOff 0 63d
hello-nodejs-deployment-645fb786c5-79f49 0/1 ImagePullBackOff 0 63d
hello-nodejs-deployment-645fb786c5-znmz6 0/1 ImagePullBackOff 0 63d
kubernetes-bootcamp-5c69669756-zg8z6 1/1 Running 0 20m

kubernetes-bootcamp-5c69669756-zg8z6
がPod名になる。


proxy経由でアプリにアクセス


curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/
MacBook-Pro:xxxx xxxx$ curl http://localhost:8001/api/v1/namespaces/default/pods/kubernetes-bootcamp-5c69669756-zg8z6/proxy/
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5c69669756-zg8z6 | v=1

Hello Kubernetes bootcamp! | Running on: ポッド名 | v=1
を表示するアプリケーションのようだ。
試しにPod名をわざと間違えてみる。

MacBook-Pro:xxxx xxxx$ curl http://localhost:8001/api/v1/namespaces/default/pods/kubernetes-bootcamp-5c69669756-zg86/proxy/
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {
    
  },
  "status": "Failure",
  "message": "pods \"kubernetes-bootcamp-5c69669756-zg86\" not found",
  "reason": "NotFound",
  "details": {
    "name": "kubernetes-bootcamp-5c69669756-zg86",
    "kind": "pods"
  },
  "code": 404


実際にWebアプリとして公開する場合はサービスとして公開する。
次回はここまでで出てきたk8s固有の概念、用語について説明する。

2019年4月4日木曜日