Skip to Content

Kubernetes 公式チュートリアルの補足

公式チュートリアル

コンテナ化されたウェブ アプリケーションのデプロイ

概要

1つめのチュートリアルのを試した際の記録
パラメータいじった結果や、補足、チュートリアルに載っていない実行結果を残す


ステップ 4: コンテナ クラスタを作成する

3ノードクラスタを組んでいるけど、2ノード(2個の仮想マシンインスタンス)にしてみた。

> gcloud container clusters create hello-cluster --num-nodes=2

確認コマンド

> gcloud compute instances list
NAME                                          ZONE               MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
gke-hello-cluster-default-pool-511b5600-5064  asia-northeast1-a  n1-standard-1               10.146.0.2   35.243.121.74  RUNNING
gke-hello-cluster-default-pool-511b5600-pnq3  asia-northeast1-a  n1-standard-1               10.146.0.3   34.85.81.14    RUNNING

ステップ 5: アプリケーションをデプロイする

チュートリアルに実行結果が載っていないのでメモ
メッセージが長かったので失敗したのかと思った

> kubectl run hello-web --image=asia.gcr.io/gke-study-999999/hello-app: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/hello-web created

ステップ 6: アプリケーションをインターネットに公開する

Hello, world! と表示され世界に公開されている

ステップ 7: アプリケーションをスケールアップする

コンテナの凄いところはここだなと実感した、スケールアップするのがなまら早い!

コンテナ1個だったところから、3個にスケールアップマンド実行

> kubectl scale deployment hello-web --replicas=3
deployment.extensions/hello-web scaled

スケールアップコマンド打った直後にpod内のコンテナ確認

> kubectl get pods
NAME                         READY   STATUS    RESTARTS   AGE
hello-web-65848d764f-hv6hk   1/1     Running   0          6s # 今増えた!!
hello-web-65848d764f-p6b7d   1/1     Running   0          6s # 〃
hello-web-65848d764f-pn92n   1/1     Running   0          18m # 最初からの

ステップ 8: アプリの新しいバージョンをデプロイする

(または、イメージを作成する前に “Hello, World!” という文字列を
“Hello, Kubernetes Engine!” に変更できます)。

チュートリアルでは説明だけで終わっているので実際に変更してみた。

// hello responds to the request with a plain-text "Hello, world" message.
func hello(w http.ResponseWriter, r *http.Request) {
    log.Printf("Serving request: %s", r.URL.Path)
    host, _ := os.Hostname()
    // World! -> Kubernetes! に変更
    fmt.Fprintf(w, "Hell, Kubernetes!\n")
    fmt.Fprintf(w, "Version: 1.0.0\n")
    fmt.Fprintf(w, "Hostname: %s\n", host)
}

次に、イメージ更新で既存のデプロイにローリング更新を適用します。

適用するコマンドを実行

kubectl set image deployment/hello-web hello-web=asia.gcr.io/gke-study-999999/hello-app:v2

確認するコマンド
気づいたら時には新しいコンテナに全部入れ替わっていた、早い!!
NAMEが前と違う

> kubectl get pods
NAME                         READY   STATUS    RESTARTS   AGE
hello-web-78578f7f46-8krbz   1/1     Running   0          98s
hello-web-78578f7f46-cbglg   1/1     Running   0          94s
hello-web-78578f7f46-nm4gk   1/1     Running   0          95s

ブラウザを更新すると、Hello, Kubernetes! に変更されていた
もちろんホスト名も変わっている

クリーンアップ

次のコマンドの出力を監視して、ロードバランサが削除されるまで待ちます。

この表示がでればOK

> gcloud compute forwarding-rules list
Listed 0 items.

自由研究

チュートリアルのクラスタ作成のコマンド

> gcloud container clusters create hello-cluster --num-nodes=2

その結果、作られたクラスタをダッシュボードから確認

gcloud container clusters createのドキュメントを確認して、オプションをつけてみる

  • ノードのバージョンのオプション指定
    最新を使ってみる

    --cluster-version "latest"
    
  • ノードイメージのオプション指定
    デフォルトのCOS(Container-Optimized OS)が適切な感じがする
    明示的に指定してみる
    ノードイメージのドキュメント

    --image-type "COS"
    
  • マシンタイプのオプション指定
    デフォルトがn1-standard-1だったので、 ランクを下げてみる

    --machine-type "g1-small"
    
  • ブートディスクのオプション指定
    デフォルトがpd-standardで、pd-ssdも指定できる
    SSDに変更してみる

    --disk-type "pd-ssd"
    
  • ノードあたりのブートディスクサイズのオプション指定
    ノードの仮想マシンの起動ディスクのデフォルト容量が100GB
    50GBにしてみる

    --disk-size "50"
    

    メモ

    ノードバージョン、ノードイメージの使える値の確認コマンド

> gcloud container get-server-config
Fetching server config for asia-northeast1-a
defaultClusterVersion: 1.12.8-gke.6
defaultImageType: COS
validImageTypes:
- COS
- UBUNTU
- COS_CONTAINERD  # COSのベータ版
validMasterVersions:
- 1.13.6-gke.6 # latestがこれにあたる
- 1.13.6-gke.5
略

マシーンタイプの確認コマンド

> gcloud compute machine-types list --filter="zone:( asia-northeast1-a )"
NAME             ZONE               CPUS  MEMORY_GB  DEPRECATED
f1-micro         asia-northeast1-a  1     0.60
g1-small         asia-northeast1-a  1     1.70
n1-highcpu-16    asia-northeast1-a  16    14.40
n1-highcpu-2     asia-northeast1-a  2     1.80
n1-highcpu-32    asia-northeast1-a  32    28.80
n1-highcpu-4     asia-northeast1-a  4     3.60
n1-highcpu-64    asia-northeast1-a  64    57.60
n1-highcpu-8     asia-northeast1-a  8     7.20
n1-highmem-96    asia-northeast1-a  96    624.00
略
n1-standard-1    asia-northeast1-a  1     3.75
n1-standard-16   asia-northeast1-a  16    60.00
n1-standard-2    asia-northeast1-a  2     7.50
n1-standard-32   asia-northeast1-a  32    120.00
n1-standard-4    asia-northeast1-a  4     15.00
n1-standard-64   asia-northeast1-a  64    240.00
n1-standard-8    asia-northeast1-a  8     30.00
n1-standard-96   asia-northeast1-a  96    360.00
n1-ultramem-160  asia-northeast1-a  160   3844.00
n1-ultramem-40   asia-northeast1-a  40    961.00
n1-ultramem-80   asia-northeast1-a  80    1922.00

オプション付けてクラスタ作成

> gcloud container clusters create custom-cluster --cluster-version "latest" --image-type "COS" --machine-type "g1-small" --disk-type "pd-ssd" --disk-size "50" --num-nodes=2

無事、完成した。クリーンアップする。
クラスタしか作成していないので下記のコマンドで一発削除

> gcloud container clusters delete custom-cluster

感想

GCRの使い方も含めて勉強になるチュートリアル。
前回やったハンズオンよりコンテナが動く基盤の部分が理解しやすかった。
ただ、クラスタのオプションに関しては前回のハンズオンがとても役に立ちました。
クラスタ作成はオプション試して意味を調べた分、クラスタ部分の理解が深まった。