Kubernetes-də OCCM və Cinder CSI-dən istifadə edin
Virtual maşınlarınızda işləyən Kubernetes klasterini OpenStack cloud controller manager və Cinder CSI ilə load balancer-lərə və disklərə qoşun.
Virtual maşınlarınızda (instance) işləyən Kubernetes klasteri buludun load balancer-lərindən və disklərindən (volume) istifadə edə bilər. Bunu iki upstream komponent edir: OpenStack cloud controller manager (OCCM) LoadBalancer tipli hər Service üçün load balancer yaradır, Cinder CSI drayveri isə persistent volume claim-lər üçün disklər yaradır. Hər ikisi konsolun tətbiq giriş məlumatı (application credential) üçün yaratdığı eyni konfiqurasiya faylını, cloud.conf faylını oxuyur.
Başlamazdan əvvəl
- Klaster üçün layihədə (project) Owner və ya Contributor rolu, yaxud compute, networking, storage və load balancers üzrə Manage girişi olan fərdi rolu (custom role) olan xidmət hesabı (service account) yaradın. Xidmət hesabları və API tokenləri səhifəsinə baxın.
- Həmin xidmət hesabı üçün Full access profilli tətbiq giriş məlumatı yaradın və
cloud-config-secret.yamlfaylını endirin. Tətbiq giriş məlumatı yaradın səhifəsinə baxın. - Klasterə
kubectlgirişiniz və openstack CLI lazımdır. openstack CLI-dən istifadə edin səhifəsinə baxın.
Hər klaster üçün bir xidmət hesabı giriş məlumatından istifadə edin. Şəxsi giriş məlumatı sahibi təşkilatınızdan ayrıldıqda və ya layihədəki rolunu itirdikdə işləməyi dayandırır və bu halda klaster öz load balancer-ləri və diskləri üzərində nəzarəti itirərdi. Load balancer-lərin yaradılması load-balancer_member Keystone rolunu tələb edir; bu rol yalnız Full access profilinə daxildir.
İctimai load balancer-lər üçün şəbəkəni təyin edin
İctimai ünvanlar təmin edən xarici şəbəkəni (external network) tapın:
openstack network list --external -c ID -c Namecloud-config-secret.yaml faylında [LoadBalancer] bölməsindəki floating-network-id sətrini şərhdən çıxarın və onun dəyəri olaraq şəbəkənin (network) ID-sini yazın.
Bunun əvəzinə şəbəkəni hər Service üçün annotasiya ilə də təyin edə bilərsiniz. Service-i load balancer vasitəsilə əlçatan edin bölməsinə baxın.
Komponentləri quraşdırın
Hər iki komponentin oxuduğu kube-system/cloud-config Secret-ini yaradın:
kubectl apply -f cloud-config-secret.yamlOCCM-i cloud-provider-openstack-in upstream manifestlərindən layihədəki klasterlər arasında unikal olan klaster adı ilə quraşdırın:
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> əvəzinə klasterinizin adını yazın.
BASE hələ təyin edilmiş olsun deyə eyni shell-də Cinder CSI-ni quraşdırın:
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Əmrlər cloud-provider-openstack üçün release-1.31 manifestlərindən istifadə edir; konsolun bələdçisi bu buraxılışla yoxlanılıb.
Klaster adı OCCM-in yaratdığı hər load balancer-in adının bir hissəsidir, buna görə o, layihədəki klasterlər arasında unikal olmalıdır.
Disklər yaradın
Cinder CSI üçün StorageClass yaradın və persistent volume claim ilə disk tələb edin:
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: 1GiDisklər layihənin Block Storage bölməsində görünür və konsolda yaratdığınız disklər kimi hesablanır.
Service-i load balancer vasitəsilə əlçatan edin
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> əvəzinə xarici şəbəkənin ID-sini yazın və ya Secret-də floating-network-id təyin etmisinizsə, annotasiyanı silin. OCCM layihədə load balancer yaradır; o, konsolda digər load balancer-lər kimi görünür.
Klasterin giriş məlumatını rotasiya edin
Giriş məlumatını rotasiya etdikdən sonra yeni cloud-config-secret.yaml faylını endirin, orada floating-network-id dəyərini yenidən təyin edin və üst-üstə düşmə müddəti bitməzdən əvvəl komponentləri yenidən başladı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-nodepluginGiriş məlumatlarını rotasiya və ləğv edin səhifəsinə baxın.