Skip to content

Getting Started with Karpenter IBM Cloud Provider

This guide walks you through setting up Karpenter IBM Cloud Provider from installation to your first auto-scaled workload.

Prerequisites

Before starting, ensure you have:

Required Access

  • IBM Cloud Account with VPC Infrastructure Services access
  • Kubernetes Cluster (IKS or self-managed on IBM Cloud VPC)
  • kubectl configured for your cluster
  • Helm 3 for installation

Required Tools

# Verify tools are available
kubectl version --client
helm version
ibmcloud version

# Install IBM Cloud CLI if needed
curl -fsSL https://clis.cloud.ibm.com/install/linux | sh
ibmcloud plugin install vpc-infrastructure

IBM Cloud Setup

Step 1: Create Service ID and API Keys

For production environments, use Service IDs for better security:

# Login to IBM Cloud
ibmcloud login

# Create Service ID for Karpenter
ibmcloud iam service-id-create karpenter-provider \
  --description "Service ID for Karpenter IBM Cloud Provider"

# Get Service ID
SERVICE_ID=$(ibmcloud iam service-ids --output json | jq -r '.[] | select(.name=="karpenter-provider") | .id')

# Assign VPC Infrastructure Services role
ibmcloud iam service-policy-create $SERVICE_ID \
  --roles "VPC Infrastructure Services" \
  --service-name is

# Create API keys
ibmcloud iam service-api-key-create karpenter-general $SERVICE_ID \
  --description "General IBM Cloud API access for Karpenter"

ibmcloud iam service-api-key-create karpenter-vpc $SERVICE_ID \
  --description "VPC-specific API access for Karpenter"

Save the API keys securely - they won't be shown again!

Step 2: Gather Required Resource Information

# Set your target region
export REGION=us-south
ibmcloud target -r $REGION

# List available VPCs
ibmcloud is vpcs --output json

# Choose your VPC and list subnets
export VPC_ID="your-vpc-id"
ibmcloud is subnets --vpc $VPC_ID --output json

# List security groups in your VPC
ibmcloud is security-groups --vpc $VPC_ID --output json

# List available images
ibmcloud is images --visibility public --status available | grep ubuntu

Collect the following information: - VPC ID: vpc-12345678 (from VPC list) - Subnet ID: subnet-12345678 (choose one per zone you want to use) - Security Group ID: sg-12345678 (existing or create new) - Image ID: r006-12345678 (Ubuntu 20.04 recommended) - Region: us-south (or your preferred region) - Zone: us-south-1 (subnet's availability zone)

Installation

Step 1: Install Helm Chart

Install directly with API keys as helm values:

# Add Helm repository
helm repo add karpenter-ibm https://karpenter-ibm.sh
helm repo update

# Install with your API keys
helm install karpenter karpenter-ibm/karpenter-ibm \
  --namespace karpenter \
  --create-namespace \
  --set credentials.region="us-south" \
  --set credentials.ibm_api_key="your-general-api-key" \
  --set credentials.vpc_api_key="your-vpc-api-key"

Step 2: Verify Installation

# Check if pods are running
kubectl get pods -n karpenter

# Check controller logs for startup
kubectl logs -n karpenter deployment/karpenter -f

# Look for successful controller startup messages
# Expected: "Starting Controller" for nodepool, nodeclaim, nodeclass controllers

Expected Output:

Starting Controller {"controller": "nodepool", "controllerGroup": "karpenter.sh"}
Starting Controller {"controller": "nodeclaim", "controllerGroup": "karpenter.sh"}
Starting Controller {"controller": "nodeclass.hash", "controllerGroup": "karpenter.ibm.sh"}
Starting Controller {"controller": "pricing", "controllerGroup": "karpenter.ibm.sh"}

Step 3: Create Your First NodeClass

Choose the configuration that matches your environment: