Modern bulut yerleşkesi altyapılarında hafif sıklet (lightweight) Kubernetes çözümleri, kaynak verimliliği ve kolay yönetilebilirliği sayesinde kurumsal veri merkezlerinde hızla ön plana çıkmaktadır. Bu makalede, Harvester HCI sanallaştırma platformu üzerinde openSUSE Leap 15.6 sanal makineleri (VM) kullanarak, gömülü etcd (Embedded etcd) mimarisine sahip 3 düğümlü High Availability (HA) K3s kümesinin uçtan uca kurulumunu ve ağ mimarisi çözümlerini ele alacağız.
Kurulum mimarisinde düğümlerin Harvester HCI üzerindeki varsayılan QEMU User-Mode NAT ağında çakışma yaşamaması adına, sanal makine ağ arayüzleri doğrudan L2 köprülenmiş bir VLAN (L2VLAN / Bridge Network) katmanına dahil edilmiştir. Bu sayede her sanal makine işletim sistemi seviyesinde benzersiz ve yönlendirilebilir bir IP adresi almıştır.
| Düğüm Adı | İşletim Sistemi | Roller | IP Adresi |
|---|---|---|---|
k3s-node-01 |
openSUSE Leap 15.6 | Control-Plane, etcd, Worker | 192.168.10.101 |
k3s-node-02 |
openSUSE Leap 15.6 | Control-Plane, etcd, Worker | 192.168.10.102 |
k3s-node-03 |
openSUSE Leap 15.6 | Control-Plane, etcd, Worker | 192.168.10.103 |
Harvester HCI üzerinde oluşturulan VM'ler varsayılan Management Network (NAT) üzerinde kaldığında, işletim sistemi içinde 10.0.2.2 gibi varsayılan IP'ler görebilir. etcd veri tabanı düğümleri benzersiz IP adresleri üzerinden bağladığı için, Harvester tarafında Virtual Machine Networks -> L2VLAN tanımı yapılıp VM'lere atanmalıdır.
İlk düğüm olan k3s-node-01 üzerinde kümenin etcd kök zincirini ve yönetim düzlemini başlatmak için --cluster-init parametresi ile K3s kurulumu gerçekleştirilir:
curl -sfL https://get.k3s.io | K3S_TOKEN=SecretClusterToken123 sh -s - server \
--cluster-init \
--node-ip 192.168.10.101 \
--tls-san 192.168.10.101
High Availability (Yüksek Erişilebilirlik) mimarisi sağlamak için k3s-node-02 ve k3s-node-03 düğümleri, birinci düğümün API servisine (6443 portu) yönlendirilerek kurulur.
k3s-node-02) Katılımı:curl -sfL https://get.k3s.io | K3S_TOKEN=SecretClusterToken123 sh -s - server \
--server https://192.168.10.101:6443 \
--node-ip 192.168.10.102 \
--tls-san 192.168.10.102
k3s-node-03) Katılımı:curl -sfL https://get.k3s.io | K3S_TOKEN=SecretClusterToken123 sh -s - server \
--server https://192.168.10.101:6443 \
--node-ip 192.168.10.103 \
--tls-san 192.168.10.103
Tüm katılım süreçleri bittikten sonra k3s-node-01 ana sunucusu üzerinden küme durumu sorgulanır:
kubectl get nodes -o wide
Çıktı Özeti:
NAME STATUS ROLES AGE VERSION INTERNAL-IP OS-IMAGE
k3s-node-01 Ready control-plane,etcd 15m v1.36.5+k3s1 192.168.10.101 openSUSE Leap 15.6
k3s-node-02 Ready control-plane,etcd 8m v1.36.5+k3s1 192.168.10.102 openSUSE Leap 15.6
k3s-node-03 Ready control-plane,etcd 3m v1.36.5+k3s1 192.168.10.103 openSUSE Leap 15.6
Kümenin uygulama sunma kabiliyetini doğrulamak adına 2 kopyalı (replica) Apache Web Sunucusu dağıtılmış ve özelleştirilmiş HTML içeriği bir Kubernetes ConfigMap nesnesi vasıtasıyla pod'lara mount edilmiştir.
cat <<'EOF' | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: apache-app
spec:
replicas: 2
selector:
matchLabels:
app: apache-app
template:
metadata:
labels:
app: apache-app
spec:
containers:
- name: httpd
image: httpd:latest
ports:
- containerPort: 80
volumeMounts:
- name: html-volume
mountPath: /usr/local/apache2/htdocs/
volumes:
- name: html-volume
configMap:
name: apache-html
---
apiVersion: v1
kind: Service
metadata:
name: apache-app
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
selector:
app: apache-app
EOF
Bu çalışmada, Harvester HCI hiper-bütünleşik altyapısı üzerinde openSUSE Leap 15.6 dağıtımı kullanılarak kurumsal standartlarda, yedekli (HA etcd) ve üretime hazır bir K3s Kubernetes kümesi ayağa kaldırılmıştır.