0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

チュートリアル | Kubernetes Engine | Google Cloud コンテナ化されたウェブ アプリケーションのデプロイを実行した際の作業ログ

Posted at

チュートリアル | Kubernetes Engine | Google Cloud
コンテナ化されたウェブ アプリケーションのデプロイを実行した際の作業ログ

gcloud コマンドライン ツールのデフォルトを設定する

$ gcloud config set project sunny-studio-241400
Updated property [core/project].
To take a quick anonymous survey, run:
  $ gcloud alpha survey
$ gcloud config set compute/zone us-central1-b
Updated property [compute/zone].

ステップ 1: コンテナ イメージを作成する

hello-app ソースコードをダウンロード

$ git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
Cloning into 'kubernetes-engine-samples'...
remote: Enumerating objects: 510, done.
remote: Total 510 (delta 0), reused 0 (delta 0), pack-reused 510
Receiving objects: 100% (510/510), 396.14 KiB | 328.00 KiB/s, done.
Resolving deltas: 100% (231/231), done.

gcloud 上の事前に設定されたプロジェクト ID を取得し、シェルの PROJECT_ID 環境変数を設定

$ export PROJECT_ID="$(gcloud con
fig get-value project -q)"
Your active configuration is: [cloudshell-31490]

アプリケーションのコンテナ イメージを作成

$ docker build -t gcr.io/${PROJECT_ID}/hello-app:v1 .
Sending build context to Docker daemon  9.728kB
Step 1/7 : FROM golang:1.8-alpine
1.8-alpine: Pulling from library/golang
550fe1bea624: Pull complete
cbc8da23026a: Pull complete
9b35aaa06d7a: Pull complete
46ca6ce0ffd1: Pull complete
7a270aebe80a: Pull complete
8695117c367e: Pull complete
Digest: sha256:693568f2ab0dae1e19f44b41628d2aea148fac65974cfd18f83cb9863ab1a177
Status: Downloaded newer image for golang:1.8-alpine
 ---> 4cb86d3661bf
Step 2/7 : ADD . /go/src/hello-app
 ---> f25fb1b86836
Step 3/7 : RUN go install hello-app
 ---> Running in 539da6e6d4e9
Removing intermediate container 539da6e6d4e9
 ---> 8d11a4e9e759
Step 4/7 : FROM alpine:latest
latest: Pulling from library/alpine
e7c96db7181b: Pull complete
Digest: sha256:769fddc7cc2f0a1c35abb2f91432e8beecf83916c421420e6a6da9f8975464b6
Status: Downloaded newer image for alpine:latest
 ---> 055936d39205
Step 5/7 : COPY --from=0 /go/bin/hello-app .
 ---> 36058ccd665b
Step 6/7 : ENV PORT 8080
 ---> Running in 060bdc2c7fb6
Removing intermediate container 060bdc2c7fb6
 ---> edb140b715f2
Step 7/7 : CMD ["./hello-app"]
 ---> Running in 112d03ed9f94
Removing intermediate container 112d03ed9f94
 ---> ffc560d5fbad
Successfully built ffc560d5fbad
Successfully tagged gcr.io/sunny-studio-241400/hello-app:v1

ビルドが成功したことを確認

$ docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
gcr.io/sunny-studio-241400/hello-app   v1                  ffc560d5fbad        3 minutes ago       11.4MB
<none>                                 <none>              8d11a4e9e759        3 minutes ago       263MB
alpine                                 latest              055936d39205        11 days ago         5.53MB
golang                                 1.8-alpine          4cb86d3661bf        15 months ago       257MB

ステップ 2: コンテナ イメージをアップロードする

コンテナ イメージを Container Registry にアップロード

$ gcloud docker -- push gcr.io/${PROJECT_ID}/hello-app:v1
WARNING: `gcloud docker` will not be supported for Docker client versions above 18.03.
As an alternative, use `gcloud auth configure-docker` to configure `docker` to
use `gcloud` as a credential helper, then use `docker` as you would for non-GCR
registries, e.g. `docker pull gcr.io/project-id/my-image`. Add
`--verbosity=error` to silence this warning: `gcloud docker
--verbosity=error -- pull gcr.io/project-id/my-image`.
See: https://cloud.google.com/container-registry/docs/support/deprecation-notices#gcloud-docker
The push refers to repository [gcr.io/sunny-studio-241400/hello-app]
3870cf33db85: Preparing
f1b5933fe4b5: Preparing
denied: Token exchange failed for project 'sunny-studio-241400'. Please enable Google Container Registry API in Cloud C
onsole at https://console.cloud.google.com/apis/api/containerregistry.googleapis.com/overview?project=sunny-studio-2414
00 before performing this operation.

ステップ 3: コンテナをローカルに実行する(オプション)

$ docker run --rm -p 8080:8080 gcr.io/${PROJECT_ID}/hello-app:v1
2019/05/22 00:20:10 Server listening on port 8080
2019/05/22 00:21:09 Serving request: /
2019/05/22 00:21:10 Serving request: /favicon.ico

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

hello-cluster という名前の 3 ノードクラスタを作成

$ gcloud container clusters create hello-cluster --num-nodes=3
WARNING: In June 2019, node auto-upgrade will be enabled by default for newly created clusters and node pools. To disable it, use the `--no-enable-autoupgrade` flag.
WARNING: Starting in 1.12, new clusters will have basic authentication disabled by default. Basic authentication can be enabled (or disabled) manually using the `--[no-]enable-basic-auth` flag.
WARNING: Starting in 1.12, new clusters will not have a client certificate issued. You can manually enable (or disable) the issuance of the client certificate using the `--[no-]issue-client-certificate` flag.
WARNING: Currently VPC-native is not the default mode during cluster creation. In the future, this will become the default mode and can be disabled using `--no-enable-ip-alias` flag. Use `--[no-]enable-ip-alias` flag to suppress this warning.
WARNING: Starting in 1.12, default node pools in new clusters will have their legacy Compute Engine instance metadata endpoints disabled by default. To create a cluster with legacy instance metadata endpoints disabled in the default node pool, run `clusters create` with the flag `--metadata disable-legacy-endpoints=true`.
WARNING: Your Pod address range (`--cluster-ipv4-cidr`) can accommodate at most 1008 node(s).
This will enable the autorepair feature for nodes. Please see https://cloud.google.com/kubernetes-engine/docs/node-auto-repair for more information on node autorepairs.
ERROR: (gcloud.container.clusters.create) ResponseError: code=403, message=Kubernetes Engine API is not enabled for this project. Please ensure it is enabled in Google Cloud Console and try again: visit https://console.cloud.google.com/apis/api/container.googleapis.com/overview?project=sunny-studio-241400 to do so.

APIを有効化する
https://console.cloud.google.com/apis/api/container.googleapis.com/overview?project=sunny-studio-241400
にアクセスし有効化

再度実施して成功

$ gcloud container clusters create hello-cluster --num-nodes=3
WARNING: In June 2019, node auto-upgrade will be enabled by default for newly created clusters and node pools. To disab
le it, use the `--no-enable-autoupgrade` flag.
WARNING: Starting in 1.12, new clusters will have basic authentication disabled by default. Basic authentication can be
 enabled (or disabled) manually using the `--[no-]enable-basic-auth` flag.
WARNING: Starting in 1.12, new clusters will not have a client certificate issued. You can manually enable (or disable)
 the issuance of the client certificate using the `--[no-]issue-client-certificate` flag.
WARNING: Currently VPC-native is not the default mode during cluster creation. In the future, this will become the defa
ult mode and can be disabled using `--no-enable-ip-alias` flag. Use `--[no-]enable-ip-alias` flag to suppress this warn
ing.
WARNING: Starting in 1.12, default node pools in new clusters will have their legacy Compute Engine instance metadata e
ndpoints disabled by default. To create a cluster with legacy instance metadata endpoints disabled in the default node 
pool, run `clusters create` with the flag `--metadata disable-legacy-endpoints=true`.
WARNING: Your Pod address range (`--cluster-ipv4-cidr`) can accommodate at most 1008 node(s).
This will enable the autorepair feature for nodes. Please see https://cloud.google.com/kubernetes-engine/docs/node-auto
-repair for more information on node autorepairs.
Creating cluster hello-cluster in us-central1-b... Cluster is being health-checked (master is healthy)...done.
Created [https://container.googleapis.com/v1/projects/sunny-studio-241400/zones/us-central1-b/clusters/hello-cluster].
To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/us-central
1-b/hello-cluster?project=sunny-studio-241400
kubeconfig entry generated for hello-cluster.
NAME           LOCATION       MASTER_VERSION  MASTER_IP      MACHINE_TYPE   NODE_VERSION   NUM_NODES  STATUS
hello-cluster  us-central1-b  1.12.7-gke.10   34.66.115.238  n1-standard-1  1.12.7-gke.10  3          RUNNING

クラスタの 3 つのワーカーVM インスタンスを確認

$ gcloud compute instances list
NAME                                          ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS
gke-hello-cluster-default-pool-be318044-4770  us-central1-b  n1-standard-1               10.128.0.2   35.188.191.212  RUNNING
gke-hello-cluster-default-pool-be318044-f4ds  us-central1-b  n1-standard-1               10.128.0.3   35.184.203.168  RUNNING
gke-hello-cluster-default-pool-be318044-swlx  us-central1-b  n1-standard-1               10.128.0.4   35.188.154.208  RUNNING

クラスタ認証情報を取得

$ gcloud container clusters get-credentials hello-cluster
Fetching cluster endpoint and auth data.
kubeconfig entry generated for hello-cluster.

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

コマンドを実行して、アプリケーションをデプロイし、ポート 8080 でリッスン

$ kubectl run hello-web --image=gcr.io/${PROJECT_ID}/hello-app:v1 --port 8080
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl crea
te instead.
deployment.apps/hello-web created

Deployment によって作成されたポッドを表示するには、次のコマンドを実行

$ kubectl get pods
NAME                         READY   STATUS             RESTARTS   AGE
hello-web-758bd5b7c4-dtzl4   0/1     ImagePullBackOff   0          80s

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

$ kubectl expose deployment hello-web --type=LoadBalancer --port 80 --target-port 8080
service/hello-web exposed

IP確認

$ kubectl get service
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
hello-web    LoadBalancer   10.11.248.250   35.224.113.83   80:30871/TCP   98s
kubernetes   ClusterIP      10.11.240.1     <none>          443/TCP        13m

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

デプロイ リソースにレプリカを追加

デプロイに 2 つのレプリカを追加するには(合計 3 つ)、次のコマンドを実行します。

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

次のコマンドを実行して、クラスタで実行されている新しいレプリカを確認できます。

$ kubectl get deployment hello-web
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-web   3         3         3            0           27h
$ kubectl get pods
NAME                         READY   STATUS             RESTARTS   AGE
hello-web-758bd5b7c4-5mg55   0/1     ErrImagePull       0          27h
hello-web-758bd5b7c4-dtzl4   0/1     ImagePullBackOff   0          27h
hello-web-758bd5b7c4-f7w9q   0/1     ImagePullBackOff   0          27h

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

同じソースコードをビルドして、v2 としてタグ付けすることで、アプリケーションの v2 バージョン用のイメージを作成できます

$ docker build -t gcr.io/${PROJECT_ID}/hello-app:v2 .
Sending build context to Docker daemon  13.82kB
Step 1/7 : FROM golang:1.8-alpine
1.8-alpine: Pulling from library/golang
550fe1bea624: Pull complete
cbc8da23026a: Pull complete
9b35aaa06d7a: Pull complete
46ca6ce0ffd1: Pull complete
7a270aebe80a: Pull complete
8695117c367e: Pull complete
Digest: sha256:693568f2ab0dae1e19f44b41628d2aea148fac65974cfd18f83cb9863ab1a177
Status: Downloaded newer image for golang:1.8-alpine
 ---> 4cb86d3661bf
Step 2/7 : ADD . /go/src/hello-app
 ---> 453a92e02431
Step 3/7 : RUN go install hello-app
 ---> Running in 52531a87e4db
Removing intermediate container 52531a87e4db
 ---> 8b60d7afac56
Step 4/7 : FROM alpine:latest
latest: Pulling from library/alpine
e7c96db7181b: Pull complete
Digest: sha256:bf1684a6e3676389ec861c602e97f27b03f14178e5bc3f70dce198f9f160cce9
Status: Downloaded newer image for alpine:latest
 ---> 055936d39205
Step 5/7 : COPY --from=0 /go/bin/hello-app .
 ---> d67f2047a04d
Step 6/7 : ENV PORT 8080
 ---> Running in 78bccff4e1e1
Removing intermediate container 78bccff4e1e1
 ---> 799e66c45073
Step 7/7 : CMD ["./hello-app"]
 ---> Running in c63fbb095b86
Removing intermediate container c63fbb095b86
 ---> b0620237036e
Successfully built b0620237036e
Successfully tagged gcr.io/sunny-studio-241400/hello-app:v2

イメージを Google Container Registry に push します。

$ gcloud docker -- push
 gcr.io/${PROJECT_ID}/hello-app:v2
WARNING: `gcloud docker` will not be supported for Docker client versions above 18.03.
As an alternative, use `gcloud auth configure-docker` to configure `docker` to
use `gcloud` as a credential helper, then use `docker` as you would for non-GCR
registries, e.g. `docker pull gcr.io/project-id/my-image`. Add
`--verbosity=error` to silence this warning: `gcloud docker
--verbosity=error -- pull gcr.io/project-id/my-image`.
See: https://cloud.google.com/container-registry/docs/support/deprecation-notices#gcloud-docker
The push refers to repository [gcr.io/sunny-studio-241400/hello-app]
657257387357: Pushed
f1b5933fe4b5: Layer already exists
v2: digest: sha256:978d664865501f17b19aece05c21e91a41919dc80d7f58f2465e2b9e6f4ae487 size: 739
To take a quick anonymous survey, run:
  $ gcloud alpha survey

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

$ kubectl set image dep
loyment/hello-web hello-web=gcr.io/${PROJECT_ID}/hello-app:v2
deployment.extensions/hello-web image updated

http://[EXTERNAL_IP] でアプリケーションに再度アクセスし、変更が有効になっていることを確認

クリーンアップ

サービスを削除する

$ kubectl delete servic
e hello-web
service "hello-web" deleted

hello-web サービス用にプロビジョニングされたロードバランサが削除されるのを待つ

$ gcloud compute forwar
ding-rules list
Listed 0 items.

コンテナ クラスタを削除する

$ gcloud container clus
ters delete hello-cluster
The following clusters will be deleted.
 - [hello-cluster] in [us-central1-b]
Do you want to continue (Y/n)?  y
Deleting cluster hello-cluster...done.
Deleted [https://container.googleapis.com/v1/projects/sunny-studio-241400/zones/us-central1-b/clusters/hello-cluster].
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?