OpenStack Cloud Provider für Kubernetes konfigurieren

In dieser Anleitung wird erläutert, wie Sie den OpenStack Cloud Provider for Kubernetes in Ihren Anthos-Cluster auf Bare Metal-Clustern konfigurieren. Der OpenStack Cloud Provider muss so konfiguriert sein, dass Kubernetes-Dienste mithilfe des OpenStack LBaaS verfügbar gemacht werden.

Vorbereitung

In diesem Leitfaden wird davon ausgegangen, dass Sie einen Anthos-Cluster auf Bare Metal-Cluster in Ihrer OpenStack-Umgebung ausführen. Die Einrichtung ähnelt der im Leitfaden Anthos-Cluster auf Bare Metal auf OpenStack bereitstellen. Folgen Sie dieser Anleitung, bevor Sie die folgenden Schritte ausführen.

Anthos-Cluster auf Bare Metal, das auf OpenStack installiert ist

Anbieter konfigurieren

Im folgenden Abschnitt wird davon ausgegangen, dass Sie von einem Terminalfenster auf Ihrer lokalen Workstation aus beginnen.

  1. Verwenden Sie als Quelle die OpenStack-Clientkonfigurationsdatei (openrc). Sie können sie über die OpenStack WebUI herunterladen.

    source PATH_TO_OPENRC_FILE/openrc
    
  2. Erstellen Sie die Konfigurationsdatei für den OpenStack Kubernetes Cloud Provider.

    cat > cloud.conf << EOF
    [Global]
    auth-url=${OS_AUTH_URL}
    username=${OS_USERNAME}
    password=${OS_PASSWORD}
    region=RegionOne
    tenant-name=admin
    domain-id=default
    # this is for using a self-signed cert if your using a CA then comment this line
    # and point to the CA certificate using the "ca-file" arg
    tls-Insecure=true
    
    [LoadBalancer]
    use-octavia=true
    # this is generally the public network on OpenStack
    floating-network-id=PUBLIC_NETWORK_ID
    # this should be private network subnet where vip is allocated for the ABM nodes
    subnet-id=ABM_NETWORK_SUBNET_ID
    
    [BlockStorage]
    bs-version=v2
    EOF
    

    Dabei gilt:

    • OS_AUTH_URL, OS_USERNAME, OS_PASSWORD: Diese Variablen sollten bereits in der Umgebung festgelegt sein, indem Sie die Datei openrc als Quelle verwenden. Daher werden sie automatisch erfasst.
    • PUBLIC_NETWORK_ID: Dies ist das öffentlich zugängliche Netzwerk in Ihrer OpenStack-Bereitstellung, über das Floating-IP-Adressen zugewiesen werden. Aus diesem Netzwerk werden die LoadBalancer IPs für die Kubernetes-Dienste zugewiesen. Sie können diese IP-Adresse mit einem Befehl wie diesem aus Ihrer OpenStack-Umgebung abrufen.
    • ABM_NETWORK_SUBNET_ID: Dies ist das Subnetz im privaten Netzwerk in Ihrer OpenStack-Bereitstellung, von dem IP-Adressen für die VMs zugewiesen werden, die Anthos-Cluster auf Bare Metal ausführen. Sie können diese IP-Adresse mit einem Befehl wie diesem aus Ihrer OpenStack-Umgebung abrufen.
  3. Rufen Sie die öffentliche Floating-IP-Adresse der abm-ws-VM ab.

    export OPENSTACK_IPS=$(openstack floating ip list --tags=abm_ws_floatingip -f json)
    export FLOATING_IP=$(jq -c '.[]."Floating IP Address"' <<< $OPENSTACK_IPS | tr -d '"')
    
  4. Kopieren Sie die Datei cloud.conf in die abm-ws-VM in OpenStack.

    scp ./cloud.conf ubuntu@$FLOATING_IP:~
    
  5. Melden Sie sich sicher über SSH in der abm-ws-VM an und melden Sie sich als root-Nutzer an. Der von den Terraform-Skripts konfigurierte root-Nutzer ist abm.

    ssh ubuntu@$FLOATING_IP
    sudo -u abm -i
    
  6. Kopieren Sie die cloud.conf-Dateien in das $HOME-Verzeichnis des root-Nutzers.

    cp /home/ubuntu/cloud.conf $HOME
    
  7. Erstellen Sie ein Kubernetes Secret mit der Konfiguration.

    # make sure the kubectl client is pointing towards your Anthos on bare metal cluster
    export KUBECONFIG=~/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
    
    # store the provider configurations as a Kubernetes secret
    kubectl create secret -n kube-system generic cloud-config --from-file=cloud.conf
    
  8. Installieren Sie den OpenStack Cloud Provider für Kubernetes.

    # create the necessary roles for the OpenStack provider
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/manifests/controller-manager/cloud-controller-manager-roles.yaml
    
    # create the required role-bindings for the OpenStack provider
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/manifests/controller-manager/cloud-controller-manager-role-bindings.yaml
    
    # create the OpenStack controller manager
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/manifests/controller-manager/openstack-cloud-controller-manager-ds.yaml
    

OpenStack-Integration validieren

  1. Stellen Sie die Point-Of-Sales-Anwendung bereit.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales.yaml
    
  2. Prüfen Sie, ob die Anwendungs-Pods ausgeführt werden.

    kubectl get pods
    

    Erwartete Ausgabe:

    NAME                          READY   STATUS    RESTARTS   AGE
    api-server-7db4777f7f-zflk5   1/1     Running   0          74s
    inventory-58c6fb5568-dqk2x    1/1     Running   0          74s
    payments-68d5d65d5c-5mjl6     1/1     Running   0          74s
    
  3. Stellen Sie die Anwendung über einen Dienst vom Typ LoadBalancer bereit.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales-service.yaml
    
  4. Versuchen Sie, über einen Browser auf den Dienst zuzugreifen.

    # wait for the external IP to be assigned
    kubectl get service api-server-lb
    
    NAME            TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)        AGE
    api-server-lb   LoadBalancer   10.203.77.215   172.29.249.159   80:32378/TCP   4m12s
    

    Point-Of-Sales-Anwendung, die über die EXTERNAL-IP aufgerufen wird.

    Point-Of-Sales-Anwendung, die auf Anthos-Cluster auf Bare Metal ausgeführt und über einen LoadBalancer in OpenStack verfügbar gemacht wird.

    Sie sehen, dass in OpenStack ein neuer OpenStack-Load-Balancer erstellt wird, indem Sie die OpenStack WebUI aufrufen.

    LoadBalancer, die von Anthos-Cluster auf Bare Metal bereitgestellt werden, in OpenStack-UI