2017年2月9日木曜日

Google Container Engine に Dockerhub で公開しているイメージをデプロイする方法

概要

前回、Google Container Engine (gke) のクイックスタートを試しました
今回は Dockerhub で公開している独自のイメージを gke 上で動作させてみます
Cloud Shell が使えないので CentOS に gcloud, kubectl コマンドをインストールするところから紹介します
プロジェクト名は前回同様「test-gke」で進めます

環境

  • CentOS 7.3
    • Docker 1.12.6
    • gcloud 137.0.1
    • kubectl 1.4.6
  • Arukas 2017/02/08 時点

gcloud コマンドのインストール

一旦抜けて再ログインすることで gcloud コマンドが使えるようになります
gcloud コマンドのインストール方法はゲスト OS ごとに異なるので CentOS でない場合は以下を参考に自信の環境に合わせてインストールしてください
https://cloud.google.com/sdk/docs/quickstarts

gcloud コマンド初期化

アカウントの認証とリージョン等のデフォルト設定を行います

  • gcloud init
  • gcloud auth application-default login
  • gcloud config list
  • gcloud auth list

init と login のときにいろいろと設定を行います
基本的には yes/no で答えていけば OK です

また、認証コードを取得する工程がありターミナルに表示される長ったらしい URL にアクセスすると認証コードが表示されるので、それをターミナルにコピペしてください
問題なく完了したら config list と auth list で設定を確認しましょう

それぞれ以下のような感じで表示されれば OK です

Your active configuration is: [default]

[compute]
region = us-central1
zone = us-central1-b
[core]
account = yourname@gmail.com
disable_usage_reporting = False
project = test-gke-158003
Credentialed Accounts:
 - yourname@gmail.com ACTIVE
To set the active account, run:
    $ gcloud config set account `ACCOUNT`

kubectl コマンドのインストール

  • gcloud components update kubectl

コンテナクラスタの作成

必要なコマンドのインストールと設定が完了したので実際にリソースを作成していきます

  • gcloud container clusters create cluster-1

コンテナクラスタ名だけ指定して作成しています
各自のデフォルトの設定に左右されますが、特に変更していなければノードイメージが gci でサイズが 3 でマシンタイプは n1-standard-1 で作成されます
作成が完了したら以下のコマンドで確認してください

  • gcloud compute instances list
NAME                                      ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP      STATUS
gke-cluster-1-default-pool-07bdda47-272j  us-central1-b  n1-standard-1               10.128.0.4   146.148.70.63    RUNNING
gke-cluster-1-default-pool-07bdda47-r2b6  us-central1-b  n1-standard-1               10.128.0.2   104.198.233.166  RUNNING
gke-cluster-1-default-pool-07bdda47-slph  us-central1-b  n1-standard-1               10.128.0.3   104.154.26.254   RUNNING

こんな感じで 3 台作成されると思います

gcr にイメージをプッシュする

Dockerhub にあるイメージをデプロイはするのですが、直接 Dockerhub からイメージを取得することができません
一旦 Google Container Registry (gcr) にプッシュすることで使えるようにします

  • docker pull kakakikikeke/request-dumper
  • docker tag kakakikikeke/request-dumper gcr.io/test-gke-158003/request-dumper

Dockerhub からイメージを取得し、取得したイメージにリポジトリ名とプロジェクト名を付与したタグをイメージに振ります

  • gcloud docker push gcr.io/test-gke-158003/request-dumper

で gcr にイメージをプッシュします
完了すると gke のコンソール画面でも gcr にイメージがプッシュされたのが確認できると思います

コンテナを起動する

  • kubectl run request-dumper --image=gcr.io/test-gke-158003/request-dumper --port=4567

run のあとにコンテナ名を指定しあとは --image--port でイメージとコンテナ側で LISTEN するポートを指定します
これで pods と呼ばれるコンテナの種ができました
この種に expose することでサービスとして起動させます

  • kubectl expose deployment request-dumper --type="LoadBalancer"

--type="LoadBalancer" でLB にぶら下げグローバルからアクセスできるようにします
また deployment の部分は他に pod (po), service (svc), replicationcontroller (rc), deployment (deploy), replicaset (rs) が指定できます

あとは以下で状態を監視して EXTERNAL-IP が pending から IP に変わったらその IP にアクセスしてみましょう
アクセスするポートは今回の場合 4567 になります

  • kubectl get services --watch

最後に

Dockerhub で公開されているイメージを gke で動作させてみました
基本的には gcr に一旦プッシュし直さないと使えないようです

kubectl のときに認証エラーが出るときは再度認証のコマンドを実行し直してみてください

チュートリアルでやっていた yaml を使った定義もそのうち試してみたいと思います
おそらく docker-compose 的なことをやるときに使う感じになると思っています

0 件のコメント:

コメントを投稿