Google Cloud Kubernetesの公式チュートリアルをやってみた

Google Cloud Kubernetesのチュートリアルが、Kubernetesを試すのに良さそうなのでやってみました!
2023.09.11

みなさん、こんにちは!

クルトンです。

今回は、Google Cloudの試験でもよく出てくるGoogle Cloud Kubernetes(以下、GKEと呼称)のチュートリアルをやってみました。

このチュートリアルでは、GKE上にサンプルで既に用意されているコンテナイメージを使って、Webからアクセスできるサイトの公開までを行ないます。

前提

Google Cloudのプロジェクトが作られている状態で開始します。

また、Google Cloud Kubernetesを使うため、APIを有効化しておいてください。 (自分は有効を忘れて実行しましたが、その場合でも回避方法を書いていますのでご参考にしてください。)

Cloud Shellを使用します。

やってみた

最初にCloud Shellを起動します。

次のコマンドでGKEのClusterを用意します。

gcloud container clusters create-auto hello-cluster --location=us-central1

自分の環境では、次のエラーが出ました。

ERROR: (gcloud.container.clusters.create-auto) You do not currently have an active account selected.

どうやら環境の設定が出来ていなかったようです。次のコマンドで設定をします。

gcloud auth login

コマンドを叩くと、Cloud Shell上で、続行するかどうかを聞かれるので "Y" を入力してエンターをします。 その後、同じくCloud Shell上でURLが表示されますのでクリックし、認可コードをコピーします。(認可コードの取得には次の画像のような画面が出ますので、そちらでコピーします。)

fig1

認可コードを取得後に、Cloud Shell上へ貼り付けてください。これで認可が完了です。

ちなみに、上記画面の認可の流れですが、次のコマンドを最初に叩けば良かったようです。(チュートリアルにも書いていましたが、見逃していました。)

gcloud config set project PROJECT_ID

認可終わった後に、改めて次のコマンドを実行します。

gcloud container clusters create-auto hello-cluster --location=us-central1

この段階でも次のエラーが出る方がいるかもしれません。

ERROR: (gcloud.container.clusters.create-auto) ResponseError: code=400, message=Failed precondition when calling the ServiceConsumerManager: tenantmanager::[数値の文字列]: Consumer [数値の文字列] should enable service:container.googleapis.com before generating a service account.
com.google.api.tenant.error.TenantManagerException: Consumer [数値の文字列] should enable service:container.googleapis.com before generating a service account.

このエラーは要するに、Kubernetes Engine APIが有効化されていないよ!というものなので、有効化してから再実行しましょう。

実行が始まると、次のような内容がCloud Shell上で現れます。Cluster作成で何分か待ちます。

Note: The Pod address range limits the maximum size of the cluster. Please refer to https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr to learn how to optimize IP address allocation.
Creating cluster hello-cluster in us-central1... Cluster is being [何か動作(createdやdeployedなど)]...working...

実行が完了すると、Cloud Shell上に次の内容が展開されます。

kubeconfig entry generated for hello-cluster.
NAME: hello-cluster
LOCATION: [コマンドのlocationオプションで指定したもの。今回はus-central1]
MASTER_VERSION: [バージョン情報]
MASTER_IP: [IPアドレス]
MACHINE_TYPE: [使っているマシンタイプ]
NODE_VERSION: [バージョン情報]
NUM_NODES: [ノード数]
STATUS: RUNNING

次にDeployment(Pod数管理のオブジェクト)を作成します。次のコマンドを叩いてください。

kubectl create deployment hello-server --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

Cloud Shell上に、deployment.apps/hello-server createdが実行結果の最後に表示されたらOKです。

Deploymentが作成されましたら、次のコマンドを叩いて、アプリケーションにアクセスできるようにします。

kubectl expose deployment hello-server \
    --type LoadBalancer \
    --port 80 \
    --target-port 8080

コマンドを叩いてすぐに、 service/hello-server exposed とCloud Shell上に表示されます。

それでは公開したアプリケーションにアクセスしてみましょう。次のコマンドを叩きます。

kubectl get service hello-server

叩くと、 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEの6つが表示されます。EXTERNAL-IPに書かれているIPアドレスをコピーして、`http://EXTERNAL-IP`をアドレスバーに入力してページを表示してみてください。(httpsではなく、httpです。)

fig2

以上で、コンテナ化されたウェブアプリケーションにアクセスできました。

クリーンアップ

今後も使い続ける場合は除いて、今回作成したリソースを今後課金されないように削除しておきます。

次のコマンドを叩いてください。

kubectl delete service hello-server

削除が完了すると、service "hello-server" deletedとCloud Shell上で表示されます。

では最後に、Clusterの削除をして終わりです。次のコマンドを叩いてください。

gcloud container clusters delete hello-cluster --location us-central1

Do you want to continue (Y/n)?と聞かれるので、 "Y" を押してEnterです。 作成時と同様に何分かこのタイミングで待ちます。

Cloud Shell上でDeleting cluster hello-cluster...done.などと表示されれば削除完了です。

kubectl get podskubectl get service hello-serverなどのコマンドを叩いた時に、hello-cluster関係のものが出てこない事がわかります。

終わりに

今回はGKEのチュートリアルをやってみました。 Kubernetesを自分で最初から理解して実行するには、専門知識が多く必要となるサービスではありますが、GKEであれば簡単に実行できました。

チュートリアルでやったコマンドを叩いていけば、自分が実行したいアプリケーションをコンテナ化してArtifact Registryに登録さえすれば簡単に実行できそうですね!(もちろん、本番環境で運用するとなった場合は、セキュリティやネットワークを考慮して他にも必要そうな作業はございます。)

今回はここまで。

それでは、また!