PowerShellでGKEクラスタを作成しWindowsノードを管理する方法

PowerShellを活用してGoogle Kubernetes Engine(GKE)のクラスタを作成し、Windowsノードを管理する方法について解説します。Kubernetesはコンテナオーケストレーションのための強力なプラットフォームであり、GKEはGoogle Cloud上でのKubernetes運用を容易にするマネージドサービスです。

一般的に、KubernetesクラスタのノードはLinuxベースですが、近年ではWindowsコンテナを実行するためのWindowsノードのサポートも充実しています。本記事では、PowerShellを活用してGKEクラスタを作成し、Windowsノードをセットアップする手順を詳細に説明します。

また、Windowsノードを管理するための基本的なコマンドやスクリプトの作成方法、デプロイ手順、ロギング・モニタリングの設定、自動化のベストプラクティスなどについても取り上げます。特に、PowerShellのスクリプトを活用することで、GKEクラスタの構築や管理を効率的に行えるようになります。

さらに、運用時に発生しやすいトラブルの解決策についても紹介し、GKEクラスタの安定稼働をサポートします。これにより、Windows環境でのKubernetes活用において、より実践的なスキルを身につけることができるでしょう。

目次
  1. PowerShellとGKEの基本概念
    1. PowerShellの概要
    2. Google Kubernetes Engine(GKE)の概要
    3. Windowsノードの役割
  2. GCPの準備と認証設定
    1. GCPプロジェクトの作成
    2. GKEに必要なAPIの有効化
    3. 認証情報の設定
    4. Cloud Shellの活用
    5. サービスアカウントの作成
  3. PowerShellを用いたGKEクラスタの作成手順
    1. 1. gcloud CLIの確認
    2. 2. GKEクラスタの作成
    3. 3. Windowsノードプールの追加
    4. 4. クラスタの状態確認
    5. 5. kubectlのセットアップ
    6. 6. Windowsノードでの基本操作
    7. まとめ
  4. Windowsノードプールの作成と管理
    1. 1. Windowsノードプールの作成
    2. 2. LinuxノードとWindowsノードの違い
    3. 3. Windowsノードの管理
    4. 4. Windowsノードの削除
    5. 5. Windowsノードのトラブルシューティング
    6. まとめ
  5. PowerShellによるGKEクラスタへのデプロイ方法
    1. 1. Windowsコンテナの作成
    2. 2. Windowsコンテナのデプロイ
    3. 3. Windowsノード上でのコンテナ動作確認
    4. 4. Windowsコンテナのサービス化
    5. 5. デプロイのトラブルシューティング
    6. まとめ
  6. ロギングとモニタリングの設定
    1. 1. Cloud Loggingの有効化
    2. 2. ログの確認方法
    3. 3. Cloud Monitoringの設定
    4. 4. モニタリングデータの確認
    5. 5. アラートの設定
    6. 6. ロギングとモニタリングのトラブルシューティング
    7. まとめ
  7. PowerShellスクリプトの自動化と管理のベストプラクティス
    1. 1. PowerShellを活用したGKEクラスタ管理の自動化
    2. 2. スケール管理の自動化
    3. 3. PowerShellによるデプロイ管理の自動化
    4. 4. ロギングとエラーハンドリングの組み込み
    5. 5. CI/CDパイプラインとの統合
    6. 6. PowerShellスクリプトのベストプラクティス
    7. まとめ
  8. トラブルシューティングとよくある問題
    1. 1. GKEクラスタの作成に失敗する
    2. 2. Windowsノードが `NotReady` の状態になる
    3. 3. Windowsコンテナのデプロイが失敗する
    4. 4. GKEクラスタへの接続ができない
    5. 5. ロギング・モニタリングデータが取得できない
    6. 6. Windowsノードのパフォーマンスが低い
    7. まとめ
  9. まとめ

PowerShellとGKEの基本概念


PowerShellとGoogle Kubernetes Engine(GKE)を活用するためには、それぞれの基本概念を理解しておくことが重要です。本章では、PowerShellの特徴、GKEの概要、そしてWindowsノードの役割について説明します。

PowerShellの概要


PowerShellは、Microsoftが開発した強力なコマンドラインシェルおよびスクリプト言語です。Windows環境に最適化されており、スクリプトによるタスクの自動化やシステム管理を容易にします。最近では、PowerShell Core(PowerShell 7)が登場し、LinuxやmacOSでも動作可能になり、クラウド管理の用途でも広く利用されています。

PowerShellの主な特徴:

  • オブジェクト指向のコマンド処理:標準出力がテキストではなくオブジェクトとして扱われるため、データの加工が容易。
  • シンプルなスクリプト記述:バッチファイルやシェルスクリプトよりも直感的に記述可能。
  • 豊富なモジュールサポート:Azure、GCP、AWSなどのクラウド管理モジュールが充実している。

Google Kubernetes Engine(GKE)の概要


GKEは、Google Cloud上で提供されるフルマネージドのKubernetesサービスです。Kubernetesクラスタの作成や管理が容易になり、コンテナ化されたアプリケーションの運用がスムーズに行えます。GKEを活用することで、可用性の高いアプリケーションのデプロイ、自動スケーリング、リソース管理が効率的に行えます。

GKEの主な特徴:

  • フルマネージド環境:Kubernetesのインストールや運用管理の負担が軽減される。
  • 自動スケーリング機能:トラフィックに応じたノードの追加や削減が可能。
  • 強力なセキュリティ:IAM、VPC、Cloud ArmorなどのGoogle Cloudのセキュリティ機能と統合可能。

Windowsノードの役割


Kubernetesのノードは一般的にLinuxベースですが、Windows Server 2019以降を基盤とするWindowsノードもサポートされています。これにより、.NET FrameworkアプリケーションやWindowsベースのサービスをKubernetes環境で実行できます。

Windowsノードの活用場面:

  • Windowsアプリケーションのコンテナ化(例:IIS、.NETアプリケーション)
  • 混合環境での運用(LinuxとWindowsのノードを組み合わせた運用)
  • 企業向けレガシーアプリケーションのモダナイズ

本記事では、PowerShellを活用してGKEクラスタを作成し、Windowsノードを効率的に管理する方法を詳しく解説していきます。

GCPの準備と認証設定


Google Kubernetes Engine(GKE)を利用するためには、Google Cloud Platform(GCP)のセットアップと適切な認証設定が必要です。本章では、GCPプロジェクトの作成、必要なAPIの有効化、認証情報の設定方法について解説します。

GCPプロジェクトの作成


GKEクラスタを作成するには、Google Cloudプロジェクトを準備する必要があります。以下の手順で新しいプロジェクトを作成します。

  1. Google Cloudコンソールにログインhttps://console.cloud.google.com
  2. プロジェクトの作成
  • 左上のナビゲーションメニューから「IAMと管理」→「プロジェクトの作成」を選択
  • プロジェクト名を入力し、「作成」ボタンをクリック
  1. プロジェクトのアクティベート
  • 作成したプロジェクトを選択し、今後の操作で利用可能にする

GKEに必要なAPIの有効化


GKEを利用するためには、以下のAPIを有効化する必要があります。

  • Kubernetes Engine API(GKEクラスタの管理)
  • Compute Engine API(仮想マシンの作成・管理)

以下のPowerShellコマンドを使用してAPIを有効化できます。

gcloud services enable container.googleapis.com
gcloud services enable compute.googleapis.com

または、Google Cloudコンソールの「APIとサービス」→「ライブラリ」から手動で有効化できます。

認証情報の設定


GKEクラスタを管理するためには、適切な認証設定を行う必要があります。認証にはgcloud CLIを使用し、以下の手順でセットアップします。

  1. gcloud CLIのインストール公式ページ
  2. 認証情報の取得とログイン
gcloud auth login
  1. プロジェクトの設定(作成したプロジェクトIDを使用)
gcloud config set project [YOUR_PROJECT_ID]
  1. GKE管理のためのIAMロールの割り当て
  • roles/container.admin をユーザーに付与
gcloud projects add-iam-policy-binding [YOUR_PROJECT_ID] --member="user:[YOUR_EMAIL]" --role="roles/container.admin"

Cloud Shellの活用


Google Cloud Shellを使用すると、ローカル環境の設定を省略し、すぐにGCPリソースを管理できます。Cloud Shellは、Google Cloud Consoleの右上にある「>_」アイコンから起動できます。

サービスアカウントの作成


自動化スクリプトを使用する場合は、サービスアカウントを作成し、その認証情報を使用するのが一般的です。

gcloud iam service-accounts create gke-admin --display-name "GKE Admin"
gcloud projects add-iam-policy-binding [YOUR_PROJECT_ID] --member="serviceAccount:gke-admin@[YOUR_PROJECT_ID].iam.gserviceaccount.com" --role="roles/container.admin"

これで、GKEクラスタを作成する準備が整いました。次章では、PowerShellを使用してGKEクラスタを作成する方法を詳しく解説します。

PowerShellを用いたGKEクラスタの作成手順


PowerShellを使用してGoogle Kubernetes Engine(GKE)クラスタを作成する方法を解説します。本章では、GKEクラスタの作成に必要な設定とコマンドを詳しく説明し、Windowsノードを含むクラスタの作成手順を紹介します。

1. gcloud CLIの確認


GKEの作成にはGoogle Cloud SDK(gcloud CLI)が必要です。以下のコマンドで、インストールされていることを確認してください。

gcloud version

未インストールの場合、Google Cloud SDKのインストールを参照してセットアップしてください。

2. GKEクラスタの作成


以下のPowerShellコマンドを使用して、GKEクラスタを作成します。

gcloud container clusters create [CLUSTER_NAME] `
    --zone us-central1-a `
    --machine-type e2-standard-4 `
    --num-nodes 1 `
    --enable-ip-alias `
    --release-channel regular `
    --network "default"

コマンドオプションの解説

  • --zone us-central1-a:クラスタのゾーンを指定(好みのリージョンを選択可能)
  • --machine-type e2-standard-4:ノードのマシンタイプを指定
  • --num-nodes 1:初期ノード数を1に設定
  • --enable-ip-alias:VPCネイティブクラスタを有効化
  • --release-channel regular:安定版のGKEリリースチャンネルを選択
  • --network "default":デフォルトVPCを使用

3. Windowsノードプールの追加


GKEクラスタが作成されたら、Windowsノードプールを追加します。

gcloud container node-pools create windows-pool `
    --cluster [CLUSTER_NAME] `
    --zone us-central1-a `
    --machine-type e2-standard-4 `
    --num-nodes 1 `
    --image-type WINDOWS_LTSC `
    --enable-autoupgrade

Windowsノードプールのオプション

  • --image-type WINDOWS_LTSC:Windows Server LTSC(長期サポート版)を使用
  • --num-nodes 1:Windowsノードを1台追加
  • --enable-autoupgrade:ノードの自動アップグレードを有効化

4. クラスタの状態確認


作成したクラスタとノードプールが正しく作成されたかを確認します。

gcloud container clusters list

また、ノードプールの情報を確認するには以下のコマンドを使用します。

gcloud container node-pools list --cluster [CLUSTER_NAME]

5. kubectlのセットアップ


GKEクラスタとやり取りするために、kubectlを設定します。

gcloud container clusters get-credentials [CLUSTER_NAME] --zone us-central1-a

正しく設定されているか確認するには、以下のコマンドを実行してください。

kubectl get nodes

出力結果にWindowsノードが表示されれば、正しくクラスタが作成されています。

6. Windowsノードでの基本操作


WindowsノードでPodを実行する場合、以下のYAMLファイルを作成し、適用します。

apiVersion: v1
kind: Pod
metadata:
  name: windows-pod
spec:
  containers:
  - name: windows-container
    image: mcr.microsoft.com/windows/servercore:ltsc2019
    command: ["powershell", "-Command", "Start-Sleep -Seconds 3600"]
  nodeSelector:
    kubernetes.io/os: windows

適用するには、以下のコマンドを実行します。

kubectl apply -f windows-pod.yaml

まとめ


本章では、PowerShellを活用してGKEクラスタを作成し、Windowsノードプールを追加する方法を解説しました。次章では、Windowsコンテナのデプロイ方法について詳しく説明します。

Windowsノードプールの作成と管理


Windowsノードプールを活用することで、WindowsベースのアプリケーションをGKE上で運用できます。本章では、Windowsノードプールの作成方法と管理手順、Linuxノードとの違い、推奨される構成について解説します。

1. Windowsノードプールの作成


GKEクラスタを作成した後に、Windowsノードプールを追加する必要があります。PowerShellを使用して以下のコマンドを実行します。

gcloud container node-pools create windows-pool `
    --cluster [CLUSTER_NAME] `
    --zone us-central1-a `
    --machine-type e2-standard-4 `
    --num-nodes 2 `
    --image-type WINDOWS_LTSC `
    --enable-autoupgrade

オプションの説明

  • --cluster [CLUSTER_NAME]:対象のクラスタ名を指定
  • --machine-type e2-standard-4:Windowsノードのマシンタイプを指定
  • --num-nodes 2:Windowsノードを2台作成
  • --image-type WINDOWS_LTSC:Windows Serverの長期サポート(LTSC)イメージを利用
  • --enable-autoupgrade:ノードの自動アップグレードを有効化

作成が完了したら、以下のコマンドでWindowsノードプールが正しく作成されているか確認します。

gcloud container node-pools list --cluster [CLUSTER_NAME]

2. LinuxノードとWindowsノードの違い


GKEではLinuxノードとWindowsノードを混在させることができますが、以下の点に注意が必要です。

項目LinuxノードWindowsノード
コンテナ実行LinuxコンテナのみWindowsコンテナのみ
Podスケジューリングkubernetes.io/os: linuxkubernetes.io/os: windows
CNI(ネットワーク)Calico, CiliumAzure-CNI, Flannel
サポートOSUbuntu, COSWindows Server LTSC, SAC

Windowsアプリケーションをデプロイする場合は、nodeSelector を使って適切なノードで実行するよう指定する必要があります。

3. Windowsノードの管理


Windowsノードの状態を確認するには、以下のコマンドを実行します。

kubectl get nodes --label-columns=kubernetes.io/os

Windowsノードのみを表示したい場合は、次のコマンドを実行します。

kubectl get nodes -l kubernetes.io/os=windows

また、ノードの詳細情報を確認するには以下のコマンドを使用します。

kubectl describe node [WINDOWS_NODE_NAME]

4. Windowsノードの削除


不要になったWindowsノードプールを削除する場合は、以下のコマンドを実行します。

gcloud container node-pools delete windows-pool --cluster [CLUSTER_NAME] --zone us-central1-a

5. Windowsノードのトラブルシューティング


Windowsノードで発生しやすい問題とその解決策を紹介します。

ノードがReadyにならない場合

以下のコマンドでノードのステータスを確認し、問題がないかチェックします。

kubectl get nodes -o wide

ノードが NotReady の場合、kubeletのログを確認します。

kubectl describe node [WINDOWS_NODE_NAME]

Windowsコンテナが起動しない場合

コンテナのログを確認し、エラー内容を特定します。

kubectl logs [POD_NAME] -c [CONTAINER_NAME]

また、Podの状態を詳細に確認するには、以下のコマンドを実行します。

kubectl describe pod [POD_NAME]

まとめ


本章では、Windowsノードプールの作成方法、Linuxノードとの違い、管理コマンド、トラブルシューティングについて解説しました。次章では、PowerShellを活用したWindowsコンテナのデプロイ方法について説明します。

PowerShellによるGKEクラスタへのデプロイ方法


Windowsノードプールを作成した後は、WindowsコンテナをGKEにデプロイする必要があります。本章では、PowerShellを活用してWindowsコンテナをデプロイする手順を解説します。

1. Windowsコンテナの作成


まず、WindowsベースのDockerコンテナを作成します。Windows Server 2019のイメージを使用し、シンプルなPowerShellスクリプトを含めたコンテナを作成します。

  1. Dockerfileを作成Dockerfile
# Windows Server 2019 ベースのコンテナイメージ
FROM mcr.microsoft.com/windows/servercore:ltsc2019

# PowerShellスクリプトを実行
CMD ["powershell", "-Command", "Write-Host 'Windows Container is running'; Start-Sleep -Seconds 3600"]
  1. コンテナイメージのビルドとタグ付け
docker build -t gcr.io/[YOUR_PROJECT_ID]/windows-container:v1 .
  1. Google Container Registry(GCR)にプッシュ
gcloud auth configure-docker
docker push gcr.io/[YOUR_PROJECT_ID]/windows-container:v1

2. Windowsコンテナのデプロイ


作成したWindowsコンテナをGKEにデプロイするため、YAMLマニフェストファイルを作成します。

  1. Windows PodのYAMLファイルを作成windows-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: windows-pod
spec:
  containers:
  - name: windows-container
    image: gcr.io/[YOUR_PROJECT_ID]/windows-container:v1
    command: ["powershell", "-Command", "Write-Host 'Windows Container running'"]
  nodeSelector:
    kubernetes.io/os: windows
  1. PowerShellでデプロイ
kubectl apply -f windows-pod.yaml
  1. デプロイの確認
kubectl get pods

3. Windowsノード上でのコンテナ動作確認


コンテナの詳細情報を確認するには、以下のコマンドを実行します。

kubectl describe pod windows-pod

ログを確認する場合は、以下を実行します。

kubectl logs windows-pod

4. Windowsコンテナのサービス化


Windowsアプリケーションを安定運用するため、KubernetesのServiceを設定します。

  1. ServiceのYAMLファイルを作成windows-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: windows-service
spec:
  type: LoadBalancer
  selector:
    app: windows-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  1. デプロイ実行
kubectl apply -f windows-service.yaml
  1. サービスの外部IPを確認
kubectl get service windows-service

5. デプロイのトラブルシューティング


Podが起動しない場合

  • Podの詳細を確認
kubectl describe pod windows-pod
  • イベントログを確認
kubectl get events --sort-by=.metadata.creationTimestamp

コンテナログの確認

  • コンテナのエラーログを取得
kubectl logs windows-pod

まとめ


本章では、PowerShellを活用してWindowsコンテナをGKEにデプロイする手順を解説しました。次章では、ロギングとモニタリングの設定方法について詳しく説明します。

ロギングとモニタリングの設定


GKEクラスタを運用するうえで、適切なロギングとモニタリングの設定は不可欠です。Google CloudのCloud LoggingCloud Monitoringを活用することで、Windowsノードやアプリケーションの状態をリアルタイムで監視できます。本章では、PowerShellを活用したロギング・モニタリングの設定方法を解説します。

1. Cloud Loggingの有効化


デフォルトでは、GKEクラスタにはCloud Loggingが有効になっていますが、明示的に有効化するには以下のコマンドを実行します。

gcloud container clusters update [CLUSTER_NAME] `
    --zone us-central1-a `
    --logging=SYSTEM,WORKLOAD

Cloud Loggingで記録される主なログ

  • kubeletログ(ノードの動作確認)
  • コンテナログ(アプリケーションの出力ログ)
  • システムログ(クラスタ全体の情報)

2. ログの確認方法


GKEのログは、Google Cloud Console または gcloud logging コマンドを使用して確認できます。

  1. 全てのログを表示
gcloud logging read "resource.type=gke_node" --limit 10
  1. 特定のPodのログを取得
kubectl logs [POD_NAME]
  1. リアルタイムでログを確認(ストリーミング)
kubectl logs -f [POD_NAME]

3. Cloud Monitoringの設定


Cloud Monitoringを活用することで、CPU使用率やメモリ使用量、Podのステータスなどを監視できます。Cloud Monitoringを有効にするには、以下のコマンドを実行します。

gcloud container clusters update [CLUSTER_NAME] `
    --zone us-central1-a `
    --monitoring=SYSTEM,WORKLOAD

4. モニタリングデータの確認


Cloud Monitoringのメトリクスを取得するには、以下のコマンドを使用します。

  1. GKEクラスタのリソース使用状況を確認
gcloud monitoring metrics list --filter="metric.type=compute.googleapis.com/instance/cpu/utilization"
  1. PodのCPU使用率を表示
kubectl top pod
  1. ノードのリソース使用状況を確認
kubectl top node

5. アラートの設定


異常が発生した際に通知を受け取るため、Cloud Monitoringのアラートポリシーを作成します。

  1. Google Cloud Consoleに移動
  • 「Monitoring」→「アラート」→「ポリシーを作成」
  1. アラート条件を設定
  • 例: CPU使用率が80%以上の場合にアラートを発生
  1. 通知チャネルの設定
  • メール通知
  • Slack通知(Webhookを使用)

6. ロギングとモニタリングのトラブルシューティング


ログが記録されない場合

  • クラスタのログ設定を確認
gcloud container clusters describe [CLUSTER_NAME] --zone us-central1-a | Select-String "loggingService"

モニタリングデータが表示されない場合

  • Stackdriverエージェントの動作確認
kubectl get pods -n kube-system | Select-String "stackdriver"

まとめ


本章では、GKEクラスタにおけるCloud LoggingとCloud Monitoringの設定手順、ログの取得・監視方法、アラートの設定、トラブルシューティングについて解説しました。次章では、PowerShellスクリプトを活用したクラスタ管理の自動化について詳しく説明します。

PowerShellスクリプトの自動化と管理のベストプラクティス


GKEクラスタとWindowsノードの管理を効率化するために、PowerShellスクリプトを活用した自動化が有効です。本章では、PowerShellスクリプトを使用したクラスタ管理の自動化手法と、運用をスムーズにするためのベストプラクティスを解説します。

1. PowerShellを活用したGKEクラスタ管理の自動化


PowerShellスクリプトを利用すると、GKEクラスタの作成、スケール管理、デプロイメントの更新などの操作を簡単に自動化できます。

GKEクラスタの作成を自動化するスクリプト

以下のスクリプトを使用すると、GKEクラスタを作成し、Windowsノードプールを追加できます。

# クラスタの作成
$projectId = "[YOUR_PROJECT_ID]"
$clusterName = "windows-cluster"
$zone = "us-central1-a"

gcloud container clusters create $clusterName `
    --project $projectId `
    --zone $zone `
    --machine-type e2-standard-4 `
    --num-nodes 1 `
    --enable-ip-alias `
    --release-channel regular `
    --network "default"

# Windowsノードプールの追加
gcloud container node-pools create "windows-pool" `
    --cluster $clusterName `
    --zone $zone `
    --machine-type e2-standard-4 `
    --num-nodes 2 `
    --image-type WINDOWS_LTSC `
    --enable-autoupgrade

このスクリプトを実行すれば、GKEクラスタとWindowsノードプールが自動的に作成されます。

2. スケール管理の自動化


GKEでは、PowerShellスクリプトを利用してノードのスケール調整が可能です。例えば、負荷が高くなったときに自動でノード数を増減させるには以下のコマンドを実行します。

ノードプールのスケールアップ

gcloud container clusters resize $clusterName `
    --node-pool "windows-pool" `
    --num-nodes 5 `
    --zone $zone

ノードプールのスケールダウン

gcloud container clusters resize $clusterName `
    --node-pool "windows-pool" `
    --num-nodes 2 `
    --zone $zone

スケールの自動化を行う場合は、自動スケーリング機能(Autoscaler) を有効にすることも推奨されます。

gcloud container node-pools update "windows-pool" `
    --cluster $clusterName `
    --enable-autoscaling `
    --min-nodes 1 `
    --max-nodes 10 `
    --zone $zone

3. PowerShellによるデプロイ管理の自動化


Windowsアプリケーションのデプロイもスクリプト化することで、簡単に実行できます。以下のスクリプトを使用すれば、新しいバージョンのコンテナをGKEクラスタにデプロイできます。

Windowsコンテナの自動デプロイ

# 変数定義
$projectId = "[YOUR_PROJECT_ID]"
$imageName = "gcr.io/$projectId/windows-container:v2"
$yamlFile = "windows-deployment.yaml"

# Dockerビルド
docker build -t $imageName .

# コンテナレジストリにプッシュ
gcloud auth configure-docker
docker push $imageName

# Kubernetesにデプロイ
kubectl apply -f $yamlFile

4. ロギングとエラーハンドリングの組み込み


スクリプトのエラーを適切に処理するために、エラーハンドリング を組み込むことが重要です。例えば、PowerShellの Try-Catch を活用すると、エラー発生時に適切なログを出力できます。

Try {
    gcloud container clusters get-credentials $clusterName --zone $zone
} Catch {
    Write-Host "クラスタ認証に失敗しました: $_"
}

また、ログをファイルに出力する場合は、以下のように記述します。

$logFile = "C:\Logs\gke_setup.log"
gcloud container clusters list | Out-File -FilePath $logFile

5. CI/CDパイプラインとの統合


PowerShellスクリプトをCI/CDパイプラインに組み込むことで、自動デプロイを実現できます。以下のようにGitHub Actionsと組み合わせると、コードの変更時に自動デプロイを実行できます。

GitHub Actions のワークフロー例 (.github/workflows/deploy.yml)

name: Deploy to GKE
on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v2

      - name: Authenticate to GCP
        uses: google-github-actions/auth@v0
        with:
          credentials_json: ${{ secrets.GCP_CREDENTIALS }}

      - name: Set up gcloud
        uses: google-github-actions/setup-gcloud@v0

      - name: Deploy to GKE
        run: |
          gcloud container clusters get-credentials windows-cluster --zone us-central1-a
          kubectl apply -f windows-deployment.yaml

6. PowerShellスクリプトのベストプラクティス


PowerShellスクリプトを安全かつ効率的に運用するためのベストプラクティスを紹介します。

  • 変数を明示的に定義する:スクリプト内で Set-Variable$env:VAR_NAME を使用して可読性を向上
  • エラーハンドリングを適切に組み込むTry-Catch 構文を活用してスクリプトの安定性を向上
  • 実行ログを残すOut-File でログを保存し、運用時のトラブルシュートを容易にする
  • 機密情報を環境変数で管理する:APIキーや認証情報は SecretsEnvironment Variables を使用
  • スケジュール実行を活用する:Windowsタスクスケジューラを使用して定期的にスクリプトを実行

まとめ


本章では、PowerShellスクリプトを活用したGKEクラスタ管理の自動化手法について説明しました。クラスタの作成、スケール管理、デプロイの自動化、エラーハンドリングの組み込み、CI/CDとの統合など、運用を効率化するためのポイントを紹介しました。次章では、トラブルシューティングとよくある問題について解説します。

トラブルシューティングとよくある問題


GKEクラスタとWindowsノードを運用する際には、さまざまな問題が発生する可能性があります。本章では、よくある問題とその対処方法を解説します。

1. GKEクラスタの作成に失敗する


GKEクラスタの作成時にエラーが発生する場合、以下のポイントを確認してください。

クラスタ作成コマンドの確認

gcloud container clusters create windows-cluster `
    --zone us-central1-a `
    --machine-type e2-standard-4 `
    --num-nodes 1 `
    --enable-ip-alias `
    --release-channel regular

エラーメッセージ例:

ERROR: (gcloud.container.clusters.create) PERMISSION_DENIED

解決策:

  • gcloud auth login で適切な認証が行われているか確認
  • gcloud config list で正しいプロジェクトが選択されているか確認
  • IAMのロールを確認し、 roles/container.admin が付与されていることを確認
gcloud projects add-iam-policy-binding [PROJECT_ID] `
    --member="user:[YOUR_EMAIL]" `
    --role="roles/container.admin"

2. Windowsノードが `NotReady` の状態になる


Windowsノードが正常に動作しない場合、以下の方法で状態を確認します。

ノードの状態を確認

kubectl get nodes -o wide

エラーメッセージ例:

NAME               STATUS     ROLES    AGE   VERSION
gke-node-1        NotReady   <none>   10m   v1.22.8

解決策:

  • ノードの詳細を確認
kubectl describe node [WINDOWS_NODE_NAME]
  • Windowsノードのログを確認
kubectl logs -n kube-system kube-proxy-[NODE_NAME]
  • Windowsノードを再起動
gcloud compute instances reset [INSTANCE_NAME] --zone us-central1-a

3. Windowsコンテナのデプロイが失敗する


Windowsコンテナのデプロイが失敗する場合、以下の手順で問題を特定します。

Podの状態を確認

kubectl get pods -o wide

エラーメッセージ例:

STATUS: CrashLoopBackOff

解決策:

  • Podの詳細を確認
kubectl describe pod [POD_NAME]
  • ログを取得
kubectl logs [POD_NAME]
  • イメージが正しくデプロイされているか確認
gcloud container images list
  • nodeSelector を正しく設定
spec:
  nodeSelector:
    kubernetes.io/os: windows

4. GKEクラスタへの接続ができない


kubectlがGKEクラスタに接続できない場合、認証情報の設定を確認します。

認証情報の取得

gcloud container clusters get-credentials windows-cluster --zone us-central1-a

エラーメッセージ例:

ERROR: (gcloud.container.clusters.get-credentials) PERMISSION_DENIED

解決策:

  • gcloud auth login で再認証
  • IAMの roles/container.developer を適切に設定
gcloud projects add-iam-policy-binding [PROJECT_ID] `
    --member="user:[YOUR_EMAIL]" `
    --role="roles/container.developer"

5. ロギング・モニタリングデータが取得できない


Cloud LoggingやCloud Monitoringがデータを取得しない場合、設定を見直します。

GKEクラスタのロギング設定を確認

gcloud container clusters describe windows-cluster --zone us-central1-a | Select-String "loggingService"

エラーメッセージ例:

loggingService: none

解決策:

  • ロギングを有効化
gcloud container clusters update windows-cluster `
    --zone us-central1-a `
    --logging=SYSTEM,WORKLOAD
  • ログの確認
gcloud logging read "resource.type=gke_node" --limit 10

6. Windowsノードのパフォーマンスが低い


WindowsノードのCPUやメモリ使用率が高い場合、リソース制限を見直します。

リソース使用状況を確認

kubectl top node
kubectl top pod

解決策:

  • Podのリソース制限を設定
resources:
  limits:
    memory: "4Gi"
    cpu: "2"
  requests:
    memory: "2Gi"
    cpu: "1"
  • ノードのスケールアップ
gcloud container clusters resize windows-cluster `
    --node-pool "windows-pool" `
    --num-nodes 5 `
    --zone us-central1-a

まとめ


本章では、GKEクラスタとWindowsノードの運用時によく発生する問題とその解決策について解説しました。トラブルが発生した際は、kubectlやgcloud CLIを使用してログを確認し、適切な対応を行うことが重要です。次章では、本記事の総まとめを行います。

まとめ


本記事では、PowerShellを活用してGoogle Kubernetes Engine(GKE)のクラスタを作成し、Windowsノードを管理する方法について解説しました。

まず、GKEとPowerShellの基本概念を整理し、クラスタの作成に必要なGCPの準備と認証設定を行いました。次に、PowerShellスクリプトを用いたGKEクラスタとWindowsノードプールの作成手順を詳しく説明しました。

その後、Windowsコンテナのデプロイ方法、ロギングとモニタリングの設定、クラスタ管理の自動化手法について解説しました。また、運用時に発生しやすい問題とその解決策も紹介し、GKEクラスタの安定した運用に向けたベストプラクティスを学びました。

PowerShellを活用することで、GKEクラスタの作成や管理が効率化され、Windowsコンテナの運用がスムーズになります。本記事の内容を活用し、GKEクラスタの管理をより効果的に行いましょう。

コメント

コメントする

目次
  1. PowerShellとGKEの基本概念
    1. PowerShellの概要
    2. Google Kubernetes Engine(GKE)の概要
    3. Windowsノードの役割
  2. GCPの準備と認証設定
    1. GCPプロジェクトの作成
    2. GKEに必要なAPIの有効化
    3. 認証情報の設定
    4. Cloud Shellの活用
    5. サービスアカウントの作成
  3. PowerShellを用いたGKEクラスタの作成手順
    1. 1. gcloud CLIの確認
    2. 2. GKEクラスタの作成
    3. 3. Windowsノードプールの追加
    4. 4. クラスタの状態確認
    5. 5. kubectlのセットアップ
    6. 6. Windowsノードでの基本操作
    7. まとめ
  4. Windowsノードプールの作成と管理
    1. 1. Windowsノードプールの作成
    2. 2. LinuxノードとWindowsノードの違い
    3. 3. Windowsノードの管理
    4. 4. Windowsノードの削除
    5. 5. Windowsノードのトラブルシューティング
    6. まとめ
  5. PowerShellによるGKEクラスタへのデプロイ方法
    1. 1. Windowsコンテナの作成
    2. 2. Windowsコンテナのデプロイ
    3. 3. Windowsノード上でのコンテナ動作確認
    4. 4. Windowsコンテナのサービス化
    5. 5. デプロイのトラブルシューティング
    6. まとめ
  6. ロギングとモニタリングの設定
    1. 1. Cloud Loggingの有効化
    2. 2. ログの確認方法
    3. 3. Cloud Monitoringの設定
    4. 4. モニタリングデータの確認
    5. 5. アラートの設定
    6. 6. ロギングとモニタリングのトラブルシューティング
    7. まとめ
  7. PowerShellスクリプトの自動化と管理のベストプラクティス
    1. 1. PowerShellを活用したGKEクラスタ管理の自動化
    2. 2. スケール管理の自動化
    3. 3. PowerShellによるデプロイ管理の自動化
    4. 4. ロギングとエラーハンドリングの組み込み
    5. 5. CI/CDパイプラインとの統合
    6. 6. PowerShellスクリプトのベストプラクティス
    7. まとめ
  8. トラブルシューティングとよくある問題
    1. 1. GKEクラスタの作成に失敗する
    2. 2. Windowsノードが `NotReady` の状態になる
    3. 3. Windowsコンテナのデプロイが失敗する
    4. 4. GKEクラスタへの接続ができない
    5. 5. ロギング・モニタリングデータが取得できない
    6. 6. Windowsノードのパフォーマンスが低い
    7. まとめ
  9. まとめ