2026-01-18Carlos Eduardo

Proxmox Üzerinde Terraform Otomasyonu ile OpenShift Kurulumu

OpenShiftProxmoxTerraformKubernetesDevOpsAutomation
P

Proxmox Üzerinde Terraform Otomasyonu ile OpenShift Kurulumu

Ev laboratuvarında OpenShift çalıştırmak, kurumsal düzeyde bir Kubernetes ve konteyner orkestrasyon platformuna sahip olmanın harika bir yoludur. AWS EKS (Amazon Elastic Kubernetes Service) veya Azure AKS gibi yönetilen servislerin aksine, Proxmox üzerinde çalıştırmak altyapı üzerinde tam kontrol sağlar ve bu da DevOps pratiklerinde uzmanlaşmak için mükemmeldir. Bu rehberde, Agent-tabanlı yükleyici ve altyapı otomasyonu için Terraform kullanarak Proxmox VE üzerinde tam fonksiyonel bir OpenShift kümesi kurmayı adım adım anlatacağım.

Docker uygulamaları paketleme şeklimizde devrim yaratırken, OpenShift bu konteynerleri dağıtmak ve yönetmek için eksiksiz bir platform sunarak bunu bir adım öteye taşıyor. Hatta bu kurulumu Jenkins ile entegre ederek güçlü CI/CD boru hatları oluşturabilir ve AWS üzerinde bulabileceğiniz gerçek dünya üretim ortamlarını simüle edebilirsiniz.

Mimari Genel Bakış

Bu kurulum, Terraform aracılığıyla programatik olarak özelleştirilebilen 5 düğümlü bir OpenShift kümesi dağıtır:

  • 3 Master düğüm — Kontrol düzlemini çalıştırır (etcd, API sunucusu, denetleyiciler)
  • 2 Worker düğüm — LVM için ek depolama diskleri ile uygulama yüklerini çalıştırır

Küme, ayrı bir önyükleme (bootstrap) düğümü gerektirmeden basitleştirilmiş bir kurulum deneyimi sağlayan Agent-tabanlı yükleyici ile statik IP adresleri kullanır. Bu yapı, gerektiğinde master ve worker sayısını artırarak daha büyük ve üretime benzer bir ortam için de çoğaltılabilir.

Ağ Şeması

Ağ Şeması

Küme Özellikleri

Küme Özellikleri

Ağ Düzeni

Ağ Düzeni

Ek olarak şunlara ihtiyacınız olacak:

  • API VIP: 192.168.1.31
  • Ingress VIP: 192.168.1.30

Düğümler, ağ DHCP sunucusunun yapılandırması yoluyla statik olarak atanmış IP'lere sahip olacaktır ancak gerekirse bunları Proxmox'ta manuel olarak da ayarlayabilirsiniz. Kümeye erişim, DNS kayıtlarını buna göre ayarlamayı gerektiren tanımlanmış VIP'leri kullanacaktır.

Ön Koşullar

Gerekli Araçlar

Başlamadan önce, iş istasyonunuzda şu araçların kurulu olduğundan emin olun:

  1. Terraform (>= 1.0.0)
  2. openshift-installRed Hat Console adresinden indirin
  3. oc (OpenShift CLI) — Aynı yerden indirin
  4. nmstatectl — Paket yöneticinizle yükleyin (ISO görüntüsünü oluşturmak için gereklidir)
# Genellikle zaten yüklü olan Fedora/RHEL için
dnf install nmstate

# Diğer dağıtımlar veya Rust ile Mac/WSL2 için
# Rustup kullanarak Rust'ı yükleyin
curl https://sh.rustup.rs -sSf | sh
# ve paketi yükleyin
cargo install nmstatectl

DNS Yapılandırması

DNS sunucunuzu kümenizi işaret eden aşağıdaki kayıtlarla yapılandırın: Burada kümemin ocp.internal.example.com alan adında yayınlanacağını tanımladım. Kendi alan adınıza göre ayarlayın.

; API ve API-INT kayıtları (API VIP'ye işaret eder)
api.ocp.internal.example.com.     A    192.168.1.31
api-int.ocp.internal.example.com. A    192.168.1.31

; Uygulamalar için joker karakter (Ingress VIP'ye işaret eder)
*.apps.ocp.internal.example.com.  A    192.168.1.30

; Bireysel düğüm kayıtları
ocp-master-1.ocp.internal.example.com. A 192.168.1.32
ocp-master-2.ocp.internal.example.com. A 192.168.1.33
ocp-master-3.ocp.internal.example.com. A 192.168.1.34
ocp-worker-1.ocp.internal.example.com. A 192.168.1.35
ocp-worker-2.ocp.internal.example.com. A 192.168.1.36

Red Hat Pull Secret

Red Hat Console adresinden pull secret'ınızı alın — kurulum yapılandırması için buna ihtiyacınız olacak.

Proxmox Yapılandırması

Terraform İçin API Kullanıcıları Oluşturma

Proxmox sunucunuza SSH veya konsol üzerinden bağlanın ve gerekli kullanıcıları ve rolleri oluşturun:

Proxmox Kullanıcı Oluşturma

# Terraform için gerekli ayrıcalıklara sahip bir rol oluşturun
pveum role add terraform-role -privs "VM.Allocate VM.Clone VM.Config.CDROM VM.Config.CPU VM.Config.Cloudinit VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.Audit VM.PowerMgmt Datastore.AllocateSpace Datastore.Audit Sys.Audit Pool.Allocate Sys.Console Sys.Modify VM.Migrate SDN.Use VM.GuestAgent.Audit VM.GuestAgent.Unrestricted Pool.Audit"

# Terraform kullanıcısını oluşturun ve rolü atayın
pveum user add terraform@pve
pveum aclmod / -user terraform@pve -role terraform-role

# Terraform için bir API token oluşturun (çıktıyı kaydedin!)
pveum user token add terraform@pve terraform-token --privsep=0

Token oluşturma işlemi şuna benzer bir çıktı verecektir:

┌──────────────┬──────────────────────────────────────┐
│ key          │ value                                │
╞══════════════╪══════════════════════════════════════╡
│ full-tokenid │ terraform@pve!terraform-token        │
├──────────────┼──────────────────────────────────────┤
│ value        │ xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx │
└──────────────┴──────────────────────────────────────┘

Token değerini kaydedin — Terraform yapılandırması için buna ihtiyacınız olacak.

Yapılandırma Dosyaları

install-config.yaml

Bu dosya OpenShift küme yapılandırmanızı tanımlar:

---
apiVersion: v1
baseDomain: internal.example.com
compute:
  - architecture: amd64
    hyperthreading: Enabled
    name: worker
    replicas: 2
controlPlane:
  - architecture: amd64
    hyperthreading: Enabled
    name: master
    replicas: 3
metadata:
  name: ocp
networking:
  clusterNetwork:
    - cidr: 10.128.0.0/14
      hostPrefix: 23
  machineNetwork:
    - cidr: 192.168.1.0/24
  networkType: OVNKubernetes
  serviceNetwork:
    - 172.30.0.0/16
platform:
  baremetal:
    apiVIPs:
      - "192.168.1.31"
    ingressVIPs:
      - "192.168.1.30"
pullSecret: '<your-pull-secret-here>'
sshKey: "<your-ssh-public-key>"

baseDomain, pullSecret, sshKey alanlarını değiştirin ve ağ parametrelerini/VIP'leri gerektiği gibi ayarlayın.

agent-config.yaml

Bu dosya her düğüm için ağ yapılandırmasını tanımlar:

---
apiVersion: v1alpha1
kind: AgentConfig
metadata:
  name: ocp
rendezvousIP: 192.168.1.32
hosts:
  - hostname: ocp-master-1
    role: master
    rootDeviceHints:
      deviceName: /dev/sda
    interfaces:
      - name: enp6s18
        macAddress: BC:24:11:44:22:32
    networkConfig:
      interfaces:
        - name: enp6s18
          type: ethernet
          state: up
          mac-address: BC:24:11:44:22:32
          ipv4:
            enabled: true
            address:
              - ip: 192.168.1.32
                prefix-length: 24
            dhcp: false
      dns-resolver:
        config:
          server:
            - 192.168.1.1
      routes:
        config:
          - destination: 0.0.0.0/0
            next-hop-address: 192.168.1.1
            next-hop-interface: enp6s18
            table-id: 254
  # Diğer düğümler (ocp-master-2, ocp-master-3, ocp-worker-1, ocp-worker-2) için benzer bloklar...

rendezvousIP ilk master düğümünüzün IP'si olmalıdır. MAC adreslerinin ve IP'lerin ağ kurulumunuzla eşleştiğinden emin olun.

terraform.tf

İşte tüm dağıtımı otomatikleştiren eksiksiz Terraform yapılandırması:

terraform {
  required_providers {
    proxmox = {
      source  = "telmate/proxmox"
      version = "3.0.2-rc06"
    }
  }
  required_version = ">= 1.0.0"
}

# ... (Değişkenler ve kaynaklar için gist'e bakınız veya yukarıdaki İngilizce bölümdeki kodu kullanınız)

(Not: Tam Terraform kodu yukarıdaki İngilizce bölümde veya sağlanan gist bağlantısında mevcuttur. Yer kazanmak için burada tekrarlanmamıştır.)

Dağıtım

Adım 1: Terraform'u Başlatın ve Uygulayın

export INSTALL_DIR=ocp-proxmox
terraform init
terraform plan -out plan
terraform apply plan

Terraform ön koşulları kontrol edecek, ajan ISO'sunu oluşturacak, Proxmox'a yükleyecek ve VM'leri oluşturacaktır.

Adım 2: Kurulum İlerlemesini İzleyin

Ayrı bir terminalde:

export KUBECONFIG=$INSTALL_DIR/auth/kubeconfig
./openshift-install agent wait-for install-complete --dir=$INSTALL_DIR

Proxmox Konsolu

Adım 3: Kümenize Erişin

Kurulum tamamlandığında:

export KUBECONFIG=$INSTALL_DIR/auth/kubeconfig
oc get nodes
oc whoami --show-console

Web Konsolu Giriş Web Konsolu Paneli

Kurulum Sonrası Yapılandırma

Master'ları Planlanabilir Yapma (İsteğe Bağlı)

oc patch schedulers.config.openshift.io cluster --type merge \
  --patch '{"spec":{"mastersSchedulable": true}}'

LVM Depolamayı Yapılandırma

Worker düğümlerindeki ek diskleri kalıcı depolama için kullanmak üzere LVM Storage Operator'ı yükleyin.

1. Operatör Aboneliğini Oluşturun

LVMStorage-Operator.yml dosyasını oluşturun ve uygulayın (oc apply -f).

2. Ek Diskleri Tanımlayın

ssh core@ocp-worker-1 'ls -l /dev/disk/by-path/'

3. LVMCluster Oluşturun

LVMStorage.yml dosyasını disk yollarınızla güncelleyin ve uygulayın.

LVM Depolama

Sonuç

Bu kurulumla, Proxmox üzerinde tam otomatik bir OpenShift dağıtımına sahip oldunuz. Terraform yapılandırması, ISO oluşturmadan VM sağlamaya kadar her şeyi halleder, bu da kümenizi gerektiği gibi yıkıp yeniden oluşturmayı kolaylaştırır.