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?

Google Cloud で始める Kubernetes 入門

Posted at

はじめに

この記事は、クラウドネイティブなアプリケーション運用を検討している方、特に Google Cloud を初めて触る方を対象としています。現代のコンテナオーケストレーションの標準である Kubernetes (K8s) を、Google Cloud のフルマネージドサービスである GKE を使って、最も効率的かつ手軽に始める方法を紹介します。

Kubernetes (K8s) の基本と参考文献

Kubernetes は、コンテナ化されたワークロードとサービスを管理するための、ポータブルで拡張可能なオープンソースプラットフォームです。コンテナのデプロイ、スケーリング、管理を自動化し、アプリケーションの信頼性を向上させます。
K8s の詳細な仕組みや概念(Pod, Node, Deployment, Serviceなど)については、以下の公式ドキュメントや信頼できる情報源をご参照ください。

  • hogehoge

Google Cloud で Kubernetes を使う選択肢

Google Cloud には、コンテナを実行するためのサービスがいくつかありますが、Kubernetes のフルパワーを活用したい場合は GKE (Google Kubernetes Engine) が最良の選択肢となります。

GKE を選ぶ理由

GKE は、Kubernetes の生みの親である Google が提供するフルマネージドなサービスです。

  • 管理の負担軽減: K8s クラスターのコントロールプレーン(マスターノード群)の運用、パッチ適用、アップグレードをすべて Google が自動で行います。ユーザーはノード(Worker)とアプリケーションの管理に集中できます。
  • 自動スケーリング: GCP のインフラと統合されており、クラスターオートスケーラーがノード(VM)の数を自動で増減し、コスト効率が向上
  • セキュリティ: Google のセキュリティノウハウに基づき、ノードの自動修復やセキュリティパッチの自動適用など、高いレベルでクラスターを保護

GKE の採用ユースケース

  • マイクロサービスアーキテクチャの実行: 多数の独立したサービスを安定かつ効率的に連携・運用したい場合。
  • 高頻度なデプロイとロールバック: CI/CDパイプラインと連携し、ダウンタイムなしで迅速なアプリケーションの更新を行いたい場合
  • ハイブリッド/マルチクラウド戦略: Kubernetes の標準インターフェースを利用し、将来的なクラウド間のポータビリティを確保したい場合

GKE クラスターを作成し、サンプルアプリケーションをデプロイする

本項では Google Cloud Console と Cloud Shell を使用し、初めての方でも簡単にアプリケーションをデプロイする手順を説明します。

環境準備とツールの確認

  • Google Cloud プロジェクトの作成: GCP Console から新しいプロジェクトを作成し、課金を有効にします。
  • APIの有効化: Kubernetes Engine API を有効にします。
  • Cloud Shell の起動: GCP Console 上部のアイコンから Cloud Shell を起動します。これにより、gcloud (GCP管理ツール) と kubectl (K8s管理ツール) がインストールされた環境がすぐに利用できます。

GKE クラスターの作成

GKE クラスターとは、アプリケーションを実行するためのノード(VM)と、それらを管理するコントロールプレーンの集合体です。
Cloud Shell で以下のコマンドを実行し、最もシンプルな構成のクラスターを作成します。(クラスター名、ゾーンは適宜変更してください)

# API 有効化
gcloud container clusters create sample-cluste

# クラスタ作成
gcloud container clusters create sample-cluster \
    --zone us-central1-c \
    --num-nodes 1 \
    --machine-type e2-small
# --num-nodes 1:Workerノードの数を1台に指定(最小構成でコストを抑えます)
# 作成には数分かかります。完了後、以下のコマンドでクラスターへの接続情報を設定
# 認証情報を設定し、kubectlが使えるようにする
gcloud container clusters get-credentials sample-cluster --zone us-central1-c

コマンド実行後の画面
createGKECluster.png

サンプルアプリケーションのデプロイ

ここでは、外部に "Hello World" を公開するシンプルなウェブアプリケーションをデプロイします。
本記事では Cloud Shell をエディタモードで開き、そこで適当な作業ディレクトリを作成してサンプルアプリケーションを作成しています。

1. Deployment 定義 (deployment.yaml)

アプリケーションの「あるべき姿」(どのコンテナイメージを、いくつ起動するか)を定義します。
Cloud Shell のエディタで以下の内容のファイルを作成し、deployment.yaml として保存します。

deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-deployment
spec:
  replicas: 2 # 2つのPod(コンテナ群)を起動する
  selector:
    matchLabels:
      app: hello-k8s
  template:
    metadata:
      labels:
        app: hello-k8s
    spec:
      containers:
      - name: hello-container
        image: gcr.io/google-samples/hello-app:1.0 # Googleが提供するサンプルイメージ
        ports:
        - containerPort: 8080

2. Service 定義 (service.yaml)

外部からアプリケーションへアクセスできるようにするための LB を定義します。
以下の内容のファイルを作成し、service.yaml として保存します。

service.yaml
apiVersion: v1
kind: Service
metadata:
  name: hello-service
spec:
  type: LoadBalancer # 外部IPアドレスを持つロードバランサーを作成
  selector:
    app: hello-k8s # このServiceが対象とするPodのラベル
  ports:
  - protocol: TCP
    port: 80 # サービスが公開するポート
    targetPort: 8080 # コンテナがリッスンしているポート

外部公開されてしまうため、動作確認後には削除するようにしてください。
意図せぬ DDoS 攻撃等でクラウド利用料がとんでもないことになりかねません。

3. デプロイ実行と確認

作業ディレクトリ内にて kubectl apply コマンドを実行することで、これらの定義を GKE クラスター内に適用します。
Cloud Shell から kubectl コマンドを実行するために、Google Cloud Console にて、作成したクラスターの右にある 3 点リーダー > 接続、よりコマンドラインアクセスのコマンドをコピーして Cloud Shell 内で実行してください。
connectGKECluster.png

# クラスターへ接続
gcloud container clusters get-credentials sample-cluster --zone us-central1-c --project <Google Cloud Project>


# 作業ディレクトリに移動
cd <作業ディレクトリ>

# DeploymentとServiceをクラスターに適用
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

# Podの状態を確認
kubectl get pods

# Serviceの状態を確認
kubectl get services

kubectl get services の実行結果で、hello-service の EXTERNAL-IP の欄に IP アドレスが表示されるまで待ちます(数分かかる場合があります)。IP アドレスが表示されたら、ブラウザでそのアドレスにアクセスしてください。
"Hello, world!" のメッセージが表示されれば、GKE へサンプルアプリケーションのデプロイ成功です。
(どうやら Google 提供のイメージだと hostname が分かるので、負荷分散しているかどうかの確認も出来そうですね)
accessSampleApplication.png

削除する際には下記コマンドを実行して削除してください。

# DeploymentとServiceをクラスターに適用
kubectl delete -f deployment.yaml
kubectl delete -f service.yaml

# Podの状態を確認 (何も存在しないことを確認)
kubectl get pods

# Serviceの状態を確認 (Type が LoadBalancer のリソースが存在しないことを確認)
kubectl get services

まとめと次のステップ

本記事では、Google Cloud の GKE を利用し、コンテナアプリケーションを Kubernetes 上で実行する最も基本的な手順を体験しました。
GKE の次のステップとしては、以下のような発展的なトピックがあります。

  • オートスケーリング: Pod やノードの数をトラフィックに応じて自動で調整する設定
  • 永続ストレージ: データベースなど、データを保持する必要があるアプリケーションのための設定(Persistent Volume/Persistent Volume Claim)
  • Ingress: 複数のアプリケーションへのアクセスを一つのロードバランサーで管理し、URLパスなどで振り分ける方法
    ぜひ、Kubernetes の公式ドキュメントを参照しながら、GKE 上でのクラウドネイティブな開発を進めてみてください。
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?