Aller au contenu principal
Sommaire de la formation

Workload cluster build d'image avec capi image builder

coolibra570 vues

3. Workload cluster avec kubeadm control-plane et proxmox

  • Build ubuntu vm template pour proxmox avec capi image-builder

image-builder

Kubernetes Image Builder est un projet de SIG Cluster Lifecycle, permettant de créer des images de machines virtuelles Kubernetes pour plusieurs fournisseurs d'infrastructure. Les images de machines virtuelles ainsi obtenues sont spécifiquement conçues pour être utilisées avec Cluster api.

Ce projet fourni des images dejà build qu'on peut utiliser.

  • Build ubuntu 2204 pour capi
git clone https://github.com/kubernetes-sigs/image-builder.git
cd image-builder/images/capi

# mettre à jour les variables
export PROXMOX_URL="https://10.10.10.105:8006/api2/json"
export PROXMOX_USERNAME='root@pam!root-token'
export PROXMOX_TOKEN="6b24c86d-cf71-461c-b2e6-a1362fd03c76"
export PROXMOX_NODE="proxmox-node-01"
export PROXMOX_ISO_POOL="local"
export PROXMOX_BRIDGE="vmbr0"
export PROXMOX_STORAGE_POOL="local-lvm"
export NEW_VERSION="1.32.2"
export NEW_SERIE="1.32"
export PACKER_FLAGS="--var 'kubernetes_rpm_version=$NEW_VERSION' --var 'kubernetes_semver=v$NEW_VERSION' --var 'kubernetes_series=v$NEW_SERIE' --var 'kubernetes_deb_version=$NEW_VERSION-1.1'"

 

  • Lancer le build
make build-proxmox-ubuntu-2204

 

terraform {
  required_providers {
    proxmox = {
      source = "bpg/proxmox"
      version = "0.72.0"
    }
  }
}

provider "proxmox" {
  endpoint  = "https://10.10.10.105:8006/"
  api_token = "root@pam!root-token=6b24c86d-cf71-461c-b2e6-a1362fd03c76"
  insecure  = true
  ssh {
    agent    = true
    username = "root"
  }
}

 

    • Le fichier vm.tf
resource "proxmox_virtual_environment_file" "user_data_cloud_config" {
  content_type = "snippets"
  datastore_id = "local"
  node_name    = "proxmox-node-01"
  
  source_raw {
    data = <<-EOF
    #cloud-config  
    users:
      - default
      - name: admin-usr
        groups:
          - sudo
        shell: /bin/bash
        ssh_authorized_keys:
          - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGNoeYxPOFEG9H70hmxRF66WL4MMVQ5XbQVNsXLsAdpo coul@home-lab
        sudo: ALL=(ALL) NOPASSWD:ALL
    runcmd:
        - apt update
        - apt install -y qemu-guest-agent net-tools
        - systemctl enable qemu-guest-agent
        - systemctl start qemu-guest-agent
        - echo "done" > /tmp/cloud-config.done
    EOF

    file_name = "user-data-cloud-config.yaml"
  }
}

resource "proxmox_virtual_environment_vm" "ubuntu_vm" {
  name        = "vm-template-ubuntu-2204-kube-v1.32"
  description = "Managed by Terraform"
  tags        = ["terraform", "ubuntu"]
  
  node_name = "proxmox-node-01"
  vm_id     = 1000

  agent {
    # read 'Qemu guest agent' section, change to true only when ready
    enabled = true
  }
  # if agent is not enabled, the VM may not be able to shutdown properly, and may need to be forced off
  stop_on_destroy = true

  startup {
    order      = "3"
    up_delay   = "60"
    down_delay = "60"
  }

  cpu {
    cores        = 2
    type         = "x86-64-v2-AES"  # recommended for modern CPUs
  }

  memory {
    dedicated = 2048
    floating  = 2048 # set equal to dedicated to enable ballooning
  }

  disk {
    datastore_id = "local-lvm"
    file_id      =  proxmox_virtual_environment_download_file.latest_debian_12_bookworm_qcow2_img.id
    interface    = "scsi0"
    size = 20
  }

  initialization {
    ip_config {
      ipv4 {
        address = "dhcp"
      }
    }

    user_data_file_id = proxmox_virtual_environment_file.user_data_cloud_config.id

    user_account {
      keys     = [trimspace(tls_private_key.ubuntu_vm_key.public_key_openssh)]
      password = "admin" # random_password.ubuntu_vm_password.result
      username = "admin-usr"
    }
  }

  network_device {
    bridge = "vmbr0"
  }

  operating_system {
    type = "l26"
  }

  tpm_state {
    version = "v2.0"
  }

  serial_device {}
}

resource "proxmox_virtual_environment_download_file" "latest_debian_12_bookworm_qcow2_img" {
  content_type = "iso"
  datastore_id = "local"
  file_name    = "ubuntu-2204-kube-v1.32.qcow2.img"
  node_name    = "proxmox-node-01"
  url          = "https://swift.services.a.regiocloud.tech/swift/v1/AUTH_b182637428444b9aa302bb8d5a5a418c/openstack-k8s-capi-images/ubuntu-2204-kube-v1.32/ubuntu-2204-kube-v1.32.qcow2"
}

resource "random_password" "ubuntu_vm_password" {
  length           = 16
  override_special = "_%@"
  special          = true
}

resource "tls_private_key" "ubuntu_vm_key" {
  algorithm = "RSA"
  rsa_bits  = 2048
}

output "ubuntu_vm_password" {
  value     = random_password.ubuntu_vm_password.result
  sensitive = true
}

output "ubuntu_vm_private_key" {
  value     = tls_private_key.ubuntu_vm_key.private_key_pem
  sensitive = true
}

output "ubuntu_vm_public_key" {
  value = tls_private_key.ubuntu_vm_key.public_key_openssh
}

output "vm_ipv4_address" {
  value = proxmox_virtual_environment_vm.ubuntu_vm.ipv4_addresses[1][0]
}

 

    • Lancer ces commandes pour créer la vm
terraform init
terraform plan
terraform apply

 

Cette image sera utliseée pour la suite.

Commentaires

Connectez-vous pour rejoindre la discussion.

Aucun commentaire pour le moment.