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.yamldosyasını indirin. Bkz. Uygulama kimlik bilgisi oluşturma. - Cluster’a
kubectleriş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:
openstack network list --external -c ID -c Namecloud-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:
kubectl apply -f cloud-config-secret.yamlOCCM’yi, cloud-provider-openstack projesinin upstream manifestlerinden, projedeki cluster’lar arasında benzersiz bir cluster adıyla yükleyin:
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:
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
doneKomutlar, 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:
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: 1GiDiskler 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
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:
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-nodepluginBkz. Kimlik bilgilerini yenileme ve iptal etme.