Kubernetes’te OCCM ve Cinder CSI kullanımı

Sanal makinelerinizde çalışan bir Kubernetes cluster’ını OpenStack cloud controller manager ve Cinder CSI ile yük dengeleyicilere ve disklere bağlayın.

Sanal makinelerinizde çalışan bir Kubernetes cluster’ı, bulutun yük dengeleyicilerini ve disklerini kullanabilir. Bunu iki upstream bileşen yapar: OpenStack cloud controller manager (OCCM), LoadBalancer türündeki her Service için bir yük dengeleyici oluşturur; Cinder CSI sürücüsü de persistent volume claim’ler için diskler oluşturur. İkisi de konsolun bir uygulama kimlik bilgisi için ürettiği aynı yapılandırma dosyasını, cloud.conf dosyasını okur.

Başlamadan önce

  • Cluster için, projede Sahip veya Katkıda bulunan rolüne ya da Compute, ağ, depolama ve yük dengeleyiciler için Yönet erişimi olan özel bir role sahip bir servis hesabı oluşturun. Bkz. Servis hesapları ve API belirteçleri.
  • Bu servis hesabı için Tam erişim profiliyle bir uygulama kimlik bilgisi oluşturun ve cloud-config-secret.yaml dosyasını indirin. Bkz. Uygulama kimlik bilgisi oluşturma.
  • Cluster’a kubectl erişimine ve openstack CLI istemcisine ihtiyacınız vardır. Bkz. openstack CLI kullanımı.

Her cluster için bir servis hesabı kimlik bilgisi kullanın. Kişisel bir kimlik bilgisi, sahibi kuruluşunuzdan ayrıldığında veya projedeki rolünü kaybettiğinde çalışmayı bırakır ve bu durumda cluster, yük dengeleyicileri ile diskleri üzerindeki denetimi kaybeder. Yük dengeleyici oluşturmak load-balancer_member Keystone rolünü gerektirir; bu rolü yalnızca Tam erişim profili içerir.

Genel yük dengeleyiciler için ağı ayarlama

Genel adresleri sağlayan harici ağı bulun:

Harici ağları listeleme
openstack network list --external -c ID -c Name

cloud-config-secret.yaml dosyasında [LoadBalancer] bölümündeki floating-network-id satırının başındaki yorum işaretini kaldırın ve değerini ağın ID’si olarak ayarlayın.

Bunun yerine ağı her Service için bir ek açıklamayla (annotation) da ayarlayabilirsiniz. Bkz. Bir Service’i yük dengeleyici üzerinden kullanıma açma.

Bileşenleri yükleme

İki bileşenin de okuduğu kube-system/cloud-config Secret’ını oluşturun:

Secret oluşturma
kubectl apply -f cloud-config-secret.yaml

OCCM’yi, cloud-provider-openstack projesinin upstream manifestlerinden, projedeki cluster’lar arasında benzersiz bir cluster adıyla yükleyin:

OCCM’yi yükleme
BASE=https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/release-1.31/manifests
kubectl apply -f $BASE/controller-manager/cloud-controller-manager-roles.yaml
kubectl apply -f $BASE/controller-manager/cloud-controller-manager-role-bindings.yaml
curl -fsSL $BASE/controller-manager/openstack-cloud-controller-manager-ds.yaml \
  | sed 's/value: kubernetes$/value: <cluster-name>/' | kubectl apply -f -

<cluster-name> yerine cluster’ınızın adını yazın.

BASE değişkeni ayarlı kalsın diye aynı kabukta Cinder CSI sürücüsünü yükleyin:

Cinder CSI sürücüsünü yükleme
for f in cinder-csi-controllerplugin-rbac cinder-csi-controllerplugin \
         cinder-csi-nodeplugin-rbac cinder-csi-nodeplugin csi-cinder-driver; do
  kubectl apply -f $BASE/cinder-csi-plugin/$f.yaml
done

Komutlar, cloud-provider-openstack projesinin release-1.31 manifestlerini kullanır; konsoldaki kılavuz bu sürüme göre denetlenmiştir.

Cluster adı, OCCM’nin oluşturduğu her yük dengeleyicinin adının bir parçasıdır; bu nedenle projedeki cluster’lar arasında benzersiz olmalıdır.

Disk oluşturma

Cinder CSI için bir StorageClass oluşturun ve bir persistent volume claim ile disk isteyin:

storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: cinder
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: cinder.csi.openstack.org
allowVolumeExpansion: true
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data
spec:
  accessModes: ["ReadWriteOnce"]
  storageClassName: cinder
  resources:
    requests:
      storage: 1Gi

Diskler projenin Block Storage hizmetinde görünür ve konsolda oluşturduğunuz diskler gibi faturalandırılır.

Bir Service’i yük dengeleyici üzerinden kullanıma açma

service-lb.yaml
apiVersion: v1
kind: Service
metadata:
  name: web
  annotations:
    # Optional when floating-network-id is set in cloud.conf:
    loadbalancer.openstack.org/floating-network-id: "<external-network-id>"
spec:
  type: LoadBalancer
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 8080

<external-network-id> yerine harici ağın ID’sini yazın ya da floating-network-id değerini Secret’ta ayarladıysanız ek açıklamayı kaldırın. OCCM projede bir yük dengeleyici oluşturur; bu yük dengeleyici konsolda diğer yük dengeleyiciler gibi görünür.

Cluster’ın kimlik bilgisini yenileme

Kimlik bilgisini yeniledikten sonra yeni cloud-config-secret.yaml dosyasını indirin, içinde floating-network-id değerini yeniden ayarlayın ve örtüşme penceresi bitmeden bileşenleri yeniden başlatın:

Yeni kimlik bilgisini dağıtma
kubectl apply -f cloud-config-secret.yaml
kubectl -n kube-system rollout restart daemonset/openstack-cloud-controller-manager
kubectl -n kube-system rollout restart deployment/csi-cinder-controllerplugin daemonset/csi-cinder-nodeplugin

Bkz. Kimlik bilgilerini yenileme ve iptal etme.

Bu sayfada