LoginSignup
0
1

GKEとはどういうものか使ってみた

Posted at

GKEの使いかたがわからないので、
GKEを使ってwebアプリケーションサーバーを立ててみました!
ついでに、k8sの使い方も忘れたので復習でメモたくさん書いてます。

手順

  1. GCPコンソールにログインをし、Kubernetes Engine APIを「有効にする」
  2. CloudShellを起動する。
  3. gcloudコマンドのプロジェクトを設定する
$ gcloud config set project {PROJECT ID}
  1. clusterを作成する
$ gcloud container clusters create-auto {CLUSTER NAME} --location=us-central1

今回はCLUSTER NAMEを「test-web-server」にしたので、下記のようにclusterが作成されていることを確認できました。
スクリーンショット 2023-07-14 10.20.21.png
5. clusterと外部からやり取りが行えるように、資格情報を取得します。

$ gcloud container clusters get-credentials {CLUSTER NAME} --location us-central1

上記のコマンドを打つと、デフォルトでkubectlコマンドのconfigに資格情報が保存されます。
下記のコマンドを打って確認することができます。

$ cat $HOME/.kube/config
apiVersion: v1
clusters: # 接続可能なクラスタの一覧
- cluster:
    certificate-authority-data: {CAデータ}
    server: {クラスタサーバーUR}
  name: {クラスタ名}
contexts: # 利用可能なcontextの一覧
- context:
    cluster: {クラスタ名}
    user: {ユーザー名}
  name: {クラスタ名}
current-context: {ファイル位置} # 接続時に利用されるcontext
kind: Config
preferences: {}
users: # クラスタに接続可能なユーザー一覧
- name: gke_test-gcp-389922_us-central1_test-web-server # ユーザー名
  user:
    exec: # 接続の際に実行するコマンドの設定。
      apiVersion: client.authentication.k8s.io/v1beta1
      command: gke-gcloud-auth-plugin
      installHint: Install gke-gcloud-auth-plugin for use with kubectl by following
        https://cloud.google.com/blog/products/containers-kubernetes/kubectl-auth-changes-in-gke # コマンドが実行される際に表示されるメッセージ。オプション。
      provideClusterInfo: true # 大きなCAデータが含まれる可能性があるクラスター情報の場合、exec実行をKUBERENETES_EXEC_INFO環境変数の一部として設定するか否か。

kubectlとは:k8sクラスタのAPIサーバーと通信するためのコマンドラインツール。
6. アプリをデプロイします。
Dockerのイメージ(Dockerコンテナパッケージングされたアプリケーションのイメージ)をデプロイできます。今回は、googleが提供しているサンプルアプリのイメージをデプロイしました。

$ kubectl create deployment {WORKLOAD NAME} --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

WORKLOAD NAMEを「test-web-app」としたので、下記のようにコンソールで作成されたのを確認できました。
スクリーンショット 2023-07-14 11.10.44.png
※K8sのDeploymentとは...?
Deploymentを行うと、Kubernetesが指定のアプリケーションのインスタンスを作成し、更新する方法を指示できます。流れは以下の通りです。
1: ノードで実行したい、コンテナパッケージングされたアプリのイメージと、レプリカの数を指定してDeploymentを行います。
2:Deployment後、KubernetesマスターはDeploymentで指定されていたアプリケーションインスタンスを作成し、クラスタ内の個々のノードで実行するように設定します。
3:アプリケーションインスタンスが作成されると、Kuberbetes Deoloymentコントローラは、それらのインスタンスを継続的に監視します。インスタンスをホストしているノードが停止、削除された場合、Deploymentコントローラはそのインスタンスをクラスタ内の別のノード上のインスタンスと置き換えます。

※ GKEのワークロードというのは?
Kubernetesシステムを使用して、Kuberbetesコントローラオブジェクト(上記のDeploymentで行われる一環のこと)を作成して、管理できます。Kubernatesではコントローラと言われている部分。

  1. Serviceを作成し、アプリケーションを外部に公開する
$ kubectl expose deployment {WORKLOAD NAME} --type LoadBalancer --port 80 --target-port 8080

LoadBalancerのComputeEngineを立てて、インターネット公開用ポートを80に設定。アプリケーションのポート8080にルーティングするように設定してServiceを作成することで、アプリケーションを外部トラフィックへ公開できます。
下記のように、コンソールでサービス公開が設定されていることが確認できます。
スクリーンショット 2023-07-14 11.48.23.png
8. 実行中のPodを検査する

$ kubectl get pods
NAME                            READY   STATUS    RESTARTS   AGE
{POD NAME}   1/1     Running   0          60m

動いていることが確認できましたが、
Podとはなんでしょうか?
※Podとは...?
Podは、1つまたは複数のアプリケーションコンテナを内包するストレージ、リソース、一つのIPアドレスを共有する空間。Pod内のアプリケーション同士は「localhost」で通信ができるというのがイメージつきやすい。ストレージは共有ボリュームをPod内のコンテナ同士で共有できる。
9. 外部から動作確認を行う
Serviceのエンドポイントを叩くと、公開されていることが確認できます。
スクリーンショット 2023-07-14 11.56.26.png

できました。

イメージでまとめるとこんな感じ?

スクリーンショット 2023-07-14 15.00.42.png

次に気になること

わからないことがまだまだあるので、次は以下を調べたいと思います。

  • どうやって、Pod内に複数コンテナデプロイできるか
  • Node内にどうやって複数コンテナデプロイできるか
  • Cluster内に複数Nodeを作成する方法。複数Nodeを作成する利点とは?

とりあえず全体像とユースケースは少し掴めてきました。

0
1
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
1