Publish Date

Google Cloudでのカーペンターのデプロイ方法

Details Image

カーペンターGCPプロバイダーがプレビュー版で利用可能になり、Google Cloud Platform(GCP)上のKubernetesワークロードのインテリジェントなオートスケーリングが可能になりました。CloudPilot AIチームとコミュニティの協力により開発されたこのリリースは、カーペンターのマルチクラウド機能を拡張します。

⚠️ これはプレビューリリースであり、本番環境での使用はまだ推奨されていませんが、テストや実験には完全に機能します。

このチュートリアルでは、Helmチャートを使用してGCPプロバイダーをデプロイし、環境を構成し、ワークロードに基づいてGCPインスタンスを動的に起動するようにカーペンターをセットアップする方法を学びます。

前提条件

始める前に、以下が設定されていることを確認してください:

  • カーペンターコントローラーがすでにインストールされている稼働中のGKEクラスター(カーペンターインストールガイドを参照)。
  • GKEクラスターにアクセスするように構成されたkubectl。
  • helm(v3+)がインストールされていること。
  • カーペンターCRDがすでにクラスターにインストールされていること。
  • GCP権限:カーペンターコントローラーとGCPプロバイダーは、インスタンス、サブネット、ディスクを作成するためのアクセス権が必要です。

GCP認証情報の準備

必要なAPIの有効化

カーペンターがコンピュートとKubernetesリソースを管理するために必要なGoogle Cloud APIを有効にします:

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

サービスアカウントの作成と鍵のダウンロード

以下の役割を持つGCPサービスアカウントを作成します:

  • Compute Admin
  • Kubernetes Engine Admin
  • Monitoring Admin
  • Service Account User

これらの権限により、KarpenterはGCEインスタンスの管理、GKEメタデータへのアクセス、モニタリングメトリクスの報告が可能になります。

サービスアカウントを作成した後、JSONキーファイルを生成し、安全な場所に保存してください。このキーはKarpenterをGCP APIで認証するために使用されます。

google-cloud-service-account

google-cloud-account-keys

クラスターシークレットの作成

GCPサービスアカウント認証情報を保存するためのKubernetesシークレットを作成します:

apiVersion: v1
kind: Secret
metadata:
  name: karpenter-gcp-credentials
  namespace: karpenter-system
type: Opaque
stringData:
  key.json: |
    {
      "type": "service_account",
      "project_id": "<your-project-id>",
      "private_key_id": "<your-private-key-id>",
      "private_key": "<your-private-key>",
      "client_email": "<your-client-email>",
      "client_id": "<your-client-id>",
      "auth_uri": "https://accounts.google.com/o/oauth2/auth",
      "token_uri": "https://oauth2.googleapis.com/token",
      "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
      "client_x509_cert_url": "<your-client-x509-cert-url>",
      "universe_domain": "googleapis.com"
    }

上記をkarpenter-gcp-credentials.yamlとして保存し、クラスターに適用します:

kubectl create ns karpenter-system
kubectl apply -f karpenter-gcp-credentials.yaml

チャートのインストール

チャートをインストールする前に必要な環境変数を設定します:

export PROJECT_ID=<your-google-project-id>
export CLUSTER_NAME=<gke-cluster-name>
export REGION=<gke-region-name>
# Optional: Set the GCP service account email if you want to use a custom service account for the default node pool templates
export DEFAULT_NODEPOOL_SERVICE_ACCOUNT=<your-custom-service-account-email>

次に、このリポジトリをクローンし、以下のコマンドでチャートをインストールします:

helm upgrade karpenter charts/karpenter --install \
  --namespace karpenter-system --create-namespace \
  --set "controller.settings.projectID=${PROJECT_ID}" \
  --set "controller.settings.region=${REGION}" \
  --set "controller.settings.clusterName=${CLUSTER_NAME}" \
  --wait

ノード作成のテスト

1. NodeClassとNodePoolの作成

以下のマニフェストを適用して、KarpenterがGCP上でノードをプロビジョニングする方法を定義します。前のステップで作成したサービスアカウントのメールアドレスで<service_account_email_created_before>を置き換えてください。

cat > nodeclass.yaml <<EOF
apiVersion: karpenter.k8s.gcp/v1alpha1
kind: GCENodeClass
metadata:
  name: default-example
spec:
  serviceAccount: "<service_account_email_created_before>"
  imageSelectorTerms:
    - alias: ContainerOptimizedOS@latest
  tags:
    env: dev
EOF

kubectl apply -f nodeclass.yaml

cat > nodepool.yaml <<EOF
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: default-nodepool
spec:
  weight: 10
  template:
    spec:
      nodeClassRef:
        name: default-example
        kind: GCENodeClass
        group: karpenter.k8s.gcp
      requirements:
        - key: "karpenter.sh/capacity-type"
          operator: In
          values: ["on-demand", "spot"]
        - key: "karpenter.k8s.gcp/instance-family"
          operator: In
          values: ["n4-standard", "n2-standard", "e2"]
        - key: "kubernetes.io/arch"
          operator: In
          values: ["amd64"]
        - key: "topology.kubernetes.io/zone"
          operator: In
          values: ["us-central1-c", "us-central1-a", "us-central1-f", "us-central1-b"]
EOF

kubectl apply -f nodepool.yaml

2. ワークロードの作成

Karpenterが新しいノードをプロビジョニングするようトリガーするための簡単なワークロードをデプロイします:

cat > deployment.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: inflate
spec:
  replicas: 1
  selector:
    matchLabels:
      app: inflate
  template:
    metadata:
      labels:
        app: inflate
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: karpenter.sh/capacity-type
                    operator: Exists
      securityContext:
        runAsUser: 1000
        runAsGroup: 3000
        fsGroup: 2000
      containers:
      - image: public.ecr.aws/eks-distro/kubernetes/pause:3.2
        name: inflate
        resources:
          requests:
            cpu: 250m
            memory: 250Mi
        securityContext:
          allowPrivilegeEscalation: false
EOF

kubectl apply -f deployment.yaml

ワークロードが作成されたら、Karpenterがノードを正常にプロビジョニングしたかどうかを確認します:

$ kubectl get node
NAME                                       STATUS   ROLES    AGE     VERSION
gke-cluster-1-test-default-1c921401-kzbh   Ready    <none>   17d     v1.32.4-gke.1415000
gke-cluster-1-test-default-84243800-v30f   Ready    <none>   17d     v1.32.4-gke.1415000
gke-cluster-1-test-default-b4608681-5zq5   Ready    <none>   17d     v1.32.4-gke.1415000
karpenter-default-nodepool-sp86k           Ready    <none>   18s     v1.32.4-gke.1415000

$ kubectl get nodeclaim
NAME                     TYPE       CAPACITY   ZONE            NODE                               READY   AGE
default-nodepool-sp86k   e2-small   spot       us-central1-a   karpenter-default-nodepool-sp86k   True    46s

Karpenterによって作成されたノードには通常、karpenter.sh/provisioner-nameラベルがあり、NodeClassNodePoolで定義されたテイントやラベルが含まれる場合があります。

コミュニティに参加する

質問、フィードバック、または開発の進捗を追いたいですか?

👉 Slackチャンネルに参加する

👉 またはDiscordに参加して、他の貢献者やユーザーと交流する

あなたのフィードバックは、Karpenterによるマルチクラウドオートスケーリングの未来を形作るのに役立ちます!

クラウドでのスマートな節約、
数分で無料で始める

30分のデモで、CloudPilot AIがクラウドコストを削減しながら効率性を高める方法をご紹介します。

デモを予約して今すぐ始める

Cta Image
Cta Image
Footer Logo

自動化されたクラウド節約を解放し、無駄を収益性に変えましょう。

SlackDiscordLinkedInXGithubYoutube
CloudPilot AI Inc.
580 California Street, 12th & 16th Floors
San Francisco, CA 94104

Copyright © 2025 CloudPilot AI, Inc. All Rights Reserved.