Proxmox Üzerinde Terraform Otomasyonu ile OpenShift Kurulumu
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ı
Küme Özellikleri

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:
- Terraform (>= 1.0.0)
- openshift-install — Red Hat Console adresinden indirin
- oc (OpenShift CLI) — Aynı yerden indirin
- 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:

# 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

Adım 3: Kümenize Erişin
Kurulum tamamlandığında:
export KUBECONFIG=$INSTALL_DIR/auth/kubeconfig
oc get nodes
oc whoami --show-console

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.

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.