OCCM und Cinder CSI in Kubernetes verwenden
Verbinden Sie einen Kubernetes-Cluster auf Ihren Instanzen über den OpenStack Cloud Controller Manager und Cinder CSI mit Load Balancern und Volumes.
Ein Kubernetes-Cluster, der auf Ihren Instanzen läuft, kann die Load Balancer und Volumes der Cloud nutzen. Zwei Upstream-Komponenten übernehmen das: Der OpenStack Cloud Controller Manager (OCCM) erstellt für jeden Service vom Typ LoadBalancer einen Load Balancer, und der Cinder-CSI-Treiber erstellt Volumes für Persistent Volume Claims. Beide lesen dieselbe Konfigurationsdatei, cloud.conf, die die Konsole für ein Anwendungs-Credential generiert.
Voraussetzungen
- Erstellen Sie ein Dienstkonto für den Cluster mit der Rolle Besitzer oder Mitwirkender oder einer benutzerdefinierten Rolle mit der Zugriffsebene Verwalten für Compute, Netzwerk, Speicher und Load Balancer im Projekt. Siehe Dienstkonten und API-Tokens.
- Erstellen Sie für dieses Dienstkonto ein Anwendungs-Credential mit dem Profil Vollzugriff, und laden Sie
cloud-config-secret.yamlherunter. Siehe Anwendungs-Credential erstellen. - Sie benötigen
kubectl-Zugriff auf den Cluster und die openstack-CLI. Siehe openstack-CLI verwenden.
Verwenden Sie ein Dienstkonto-Credential pro Cluster. Ein persönliches Credential funktioniert nicht mehr, wenn sein Inhaber Ihre Organisation verlässt oder seine Rolle im Projekt verliert, und der Cluster würde dann die Kontrolle über seine Load Balancer und Volumes verlieren. Zum Erstellen von Load Balancern ist die Keystone-Rolle load-balancer_member erforderlich, die nur das Profil Vollzugriff enthält.
Netzwerk für öffentliche Load Balancer festlegen
Suchen Sie das externe Netzwerk, das öffentliche Adressen bereitstellt:
openstack network list --external -c ID -c NameHeben Sie in cloud-config-secret.yaml im Abschnitt [LoadBalancer] die Auskommentierung der Zeile floating-network-id auf, und setzen Sie den Wert auf die ID des Netzwerks.
Sie können das Netzwerk stattdessen auch pro Service mit einer Annotation festlegen. Siehe Service über einen Load Balancer bereitstellen.
Komponenten installieren
Erstellen Sie das Secret kube-system/cloud-config, das beide Komponenten lesen:
kubectl apply -f cloud-config-secret.yamlInstallieren Sie OCCM aus den Upstream-Manifesten von cloud-provider-openstack, mit einem Clusternamen, der unter den Clustern im Projekt eindeutig ist:
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 -Ersetzen Sie <cluster-name> durch den Namen Ihres Clusters.
Installieren Sie Cinder CSI in derselben Shell, damit BASE noch gesetzt ist:
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
doneDie Befehle verwenden die Manifeste release-1.31 von cloud-provider-openstack, das Release, gegen das der Leitfaden der Konsole geprüft wurde.
Der Clustername ist Teil des Namens jedes Load Balancers, den OCCM erstellt, daher muss er unter den Clustern im Projekt eindeutig sein.
Volumes erstellen
Erstellen Sie eine StorageClass für Cinder CSI, und fordern Sie mit einem Persistent Volume Claim ein Volume an:
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: 1GiDie Volumes erscheinen im Projekt in Block Storage und werden wie Volumes abgerechnet, die Sie in der Konsole erstellen.
Service über einen Load Balancer bereitstellen
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: 8080Ersetzen Sie <external-network-id> durch die ID des externen Netzwerks, oder entfernen Sie die Annotation, wenn Sie floating-network-id im Secret festgelegt haben. OCCM erstellt im Projekt einen Load Balancer, der in der Konsole wie jeder andere Load Balancer erscheint.
Credential des Clusters rotieren
Laden Sie nach dem Rotieren des Credentials die neue cloud-config-secret.yaml herunter, legen Sie darin erneut floating-network-id fest, und starten Sie die Komponenten neu, bevor das Überlappungsfenster endet:
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-nodepluginSiehe Credentials rotieren und widerrufen.