[Qwiklabs]KubernetesクラスタへのDockerイメージのビルドとデプロイ

スポンサーリンク
GCP
当サイトではアフィリエイト広告を利用しています

こんにちは、こえじまです。

GCPのProfessional Cloud Architect受験に向け、Qwiklabsのハンズオンを勉強中です。

今回はKubernetesクラスタへのDockerイメージのビルドとデプロイ(GSP304)の解説をします。

スポンサーリンク

シナリオ(抜粋)

サンプルアプリケーションをGoogle Cloud PlatformのKubernetesコンテナにデプロイできるかどうかを確認する必要があります。

開発チームが用意してくれたのはDockerfileとその関連コンテキストを備えたecho-webと呼ばれるシンプルなGoアプリケーションで、Dockerイメージをビルドすればすぐにデプロイできます。

GCSに保存されたサンプルアプリケーションをビルドし、Google Container Registryにpushしたうえでデプロイします。

注意しないといけないのは、以下の4点です。

  • ゾーンはus-central1-aを用いること
  • クラスタ名はecho-clusterにすること
  • アプリケーション名はecho-appにすること
  • Deployment名はecho-webにすること

ではやっていきましょう。

Task1. タグ付きDockerイメージをビルドする

まず、Storageバケットにecho-web.tar.gzがあることを確認しましょう。

ナビゲーションメニューのStorage > Browserをクリック。

バケットの確認

プロジェクト名と全く同じバケットがあるので、そのバケットをクリックすると、echo-web.tar.gzがあるのが分かります。

echo-web.tar.gzを確認

Cloud Shellを開き、以下のようにコマンドを入力してDockerイメージをビルドします。

# PROJECT名を変数に登録
export PROJECT=$(gcloud info --format='value(config.project)')

# GCSからecho-web.tar.gzをコピー
gsutil cp gs://${PROJECT}/echo-web.tar.gz .

# echo-web.tar.gzを解凍
tar -xvzf echo-web.tar.gz

# -tオプションでタグを付けてビルド
docker build -t echo-app:v1 .

[aside]ワンポイント
tarのオプションは以下の通り。
-x ファイルを解凍
-v 詳細を標準出力に表示
-z gzipを対象とする
-f ファイルを指定
[/aside]

[aside]ワンポイント
docker buildはDockerfileがあるディレクトリを指定して実行する必要があります。
今回は末尾の.(ドット)で指定しています。
[/aside]

Task2. イメージをGoogle Container Registryにpushする

引き続きCloud Shellでコマンドを実行していきます。

# Dockerイメージにタグを付ける
docker tag echo-app:v1 gcr.io/$PROJECT/echo-app:v1

# タグを付けたDockerイメージをGCRにpush
docker push gcr.io/$PROJECT/echo-app:v1

参考:イメージのタグ付け、送信、取得 — Docker-docs-ja 1.12.RC ドキュメント

ナビゲーションメニューのContainer Repository > Imagesにpushしたイメージがあることを確認しておきましょう。

GCRにpushされている

Task3. Kubernetesクラスタを作成する

GUIだと何度か画面を遷移して設定漏れが起きそうなのでCloud Shellでサクッと作ってしまいます。

# クラスタの作成
gcloud container clusters create echo-cluster --num-nodes=2 --machine-type=n1-standard-2 --zone=us-central1-a

参考:gcloud container clusters create | Cloud SDK Documentation

GUIの場合は、ナビゲーションメニューのKubernetes Engine > Clustersからをクリックした後、左側のメニューでパラメータを調整しなければいけないことにご注意ください。

Task4. アプリケーションをKubernetesクラスタにデプロイする

GUIでやる場合

ナビゲーションメニューのKubernetes Engine > Workloadsをクリック。

画面上部のDEPLOYをクリックして、デプロイ画面に遷移します。

Containerの設定

コンテナイメージはGCRにpushしたDockerイメージを用います。

Existing container imageのimage pathでは、右側のSELECTをクリックし、下図のようにGCRにpushしたecho-appを選択して、CONTINUEをクリック。

echo-appを選択

設定が終わるとこんな感じです。

Containerの設定画面

CONTINUEをクリック。

Configurationの設定

デプロイするアプリケーションの設定をします。

  • Applicatin name: echo-app
  • Namespace: default(変更なし)
  • Labelは勝手に入ります
  • Cluster > Kubenetes Cluster: echo-cluster (us-central1-a)
Configurationの設定画面

[aside]ワンポイント
上図のようにクラスタの部分が赤枠で囲われているとクラスタのデプロイが完了していないので、DEPLOYボタンを押せません。
一回他の画面に移り、ちょっと待ってから再度設定してみてください。
[/aside]

DEPLOYをクリックしてデプロイが完了するまで少し待ちます。

Exposeの設定

完了したらecho-appの画面が表示されていると思います。されていなければWorkloadsに表示されるsample-appをクリックしましょう。

serviceを作るため、画面右のほうのExposeボタンをクリック。

Exposeの選択

以下を入力し、Exposeをクリック。

  • Port: 80
  • Target port: 8000
  • Protocol: TCP
  • Service type: Load balancer
  • Service name: echo-web
Exposeの設定

作成中の画面が表示されるので、完了するまで待ちます。

Service作成中

Exposeが完了したら、echo-web画面が表示されるので、External endpointsのIPを確認します。

External IPを確認

[aside]ワンポイント
echo-webはecho-appのDeployment detials画面の下部にある、Exposing servicesで、echo-webをクリックしても確認できます。
[/aside]

起動確認のため、そのグローバルIPにアクセスしてみましょう。(クリックしてはダメなのでhttp://External IP:80と入力しましょう)

下のような画面が表示されればOKです。

echo-appの画面

Cloud Shellでやる場合

# Cloud Shell以外でクラスタを作った場合は扱うクラスタを指定
gcloud container clusters get-credentials echo-cluster --zone=us-central1-a

# echo-appをクラスタにデプロイ
kubectl create deployment echo-app --image=gcr.io/${PROJECT}/echo-app:v1

# echo-webという名前で外部に公開
kubectl expose deployment echo-app --name echo-web --type LoadBalancer --port 80 --target-port 8000

# External IPを確認
kubectl get services

[aside]余談
gcloudコマンドではオプションの後を=(イコール)でつなぐのに対し、kubectlだとスペースでつなぐんですね。
[/aside]

起動確認のためecho-webのExternal IPにアクセスしてみましょう。

echo-appの画面

これで全タスク完了です。

完了!

お疲れさまでした!

このラボが含まれる、Cloud Architecture: Design, Implement, and Manageのクエスト解説は次の記事でまとめています。

良かったらそちらもご覧ください。

[kanren2 postid=”2317″]

コメント

  1. 匿名 より:

    とても参考になりました。
    ありがとうございます。

    servicesのスペルが誤っておりましたので、ご連絡いたします。

    # External IPを確認
    kubectl get servises

    • こえじま より:

      匿名さん
      コメントありがとうございます。
      参考になったとのこと、大変嬉しいです。

      ご指摘のservicesについては大変失礼いたしました。
      修正いたしました。

  2. まえじま より:

    とても参考になる記事をありがとうございます。
    質問をお願いいたします。

    Task1. タグ付きDockerイメージをビルドする
    # -tオプションでタグを付けてビルド
    docker build -t echo-app:v1 .

    ↑の部分を実行すると↓のエラーコードがでてその先へすすめません。

    unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/student_01_1b8d26109072/Dockerfile: no such file or directory

    改善方法を教えていただけると幸いです。
    よろしくお願いいたします。

    • こえじま より:

      まえじまさん

      no such file or directoryと表示されていることから、Dockerfileがホームディレクトリ(~/)に存在しないのかと思われます。
      tarコマンドでの解凍はエラー無く出来ておりますでしょうか?
      tar実行後、ls ~/にてDockerfileが確認できないようでしたらecho-web.tar.gzに不備がある可能性があります。
      その場合はqwiklabs側にお問い合わせいただいた方が良いかと思います。

      当方の環境が消されており再現できないのが大変申し訳ないのですが、ご参考になりましたら幸いです。

  3. 匿名 より:

    こえじま様

    お返事ありがとうございます。
    記事のおかげで解凍まではエラーなく進んでおります。

    ご提案いただいた内容を実行してみます。
    それでもできないようでしたら問い合わせてみます。

    よろしくお願いいたします。

タイトルとURLをコピーしました