הגדרת ספק הענן OpenStack ל-Kubernetes

ספק שירותי הענן של OpenStack ל-Kubernetes מאפשר להשתמש באיזון העומסים של OpenStack לאשכול שפועל במכונות וירטואליות של OpenStack. אחרי שמתקינים ומגדירים את הספק, כל שירות מסוג LoadBalancer מקבל מאזן עומסים של OpenStack Octavia וכתובת IP חיצונית מרשת ה-IP הדינמית. במסמך הזה, תאמתו את השילוב על ידי חשיפת אפליקציה לדוגמה.

דרישות מוקדמות

המדריך הזה מבוסס על ההנחה שיש לכם אשכול שנוצר באמצעות Google Distributed Cloud ופועל בסביבת OpenStack, עם הגדרה דומה לזו שמוסברת במדריך פריסת אשכול Bare Metal ב-OpenStack. לפני שמנסים את השלבים האלה, צריך לפעול לפי המדריך הזה.

‫Google Distributed Cloud שמותקן ב-OpenStack.

הגדרת הספק

בקטע הבא אנחנו מניחים שאתם מתחילים מחלון הטרמינל בתחנת העבודה המקומית.

  1. מפעילים את קובץ התצורה של לקוח OpenStack‏ (openrc). אפשר להוריד אותו מ-OpenStack WebUI.

    source PATH_TO_OPENRC_FILE/openrc
    
  2. יוצרים את קובץ התצורה של ספק שירותי הענן של Kubernetes ב-OpenStack.

    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
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫OS_AUTH_URL, ‏OS_USERNAME, ‏OS_PASSWORD: המשתנים האלה כבר אמורים להיות מוגדרים בסביבה על ידי הוספת הקובץ openrc כמקור. לכן, הן ייאספו באופן אוטומטי.
    • ‫PUBLIC_NETWORK_ID: זו הרשת שנגישה לכולם בפריסת OpenStack, שממנה מוקצות כתובות IP צפות. מהרשת הזו יוקצו כתובות ה-LoadBalancer IPs לשירותי Kubernetes. אתם יכולים להשתמש בפקודה של שורה אחת כדי לאחזר את כתובת ה-IP הזו מסביבת OpenStack.
    • ‫ABM_NETWORK_SUBNET_ID: זוהי רשת המשנה ברשת הפרטית בפריסת OpenStack, שממנה מוקצות כתובות IP למכונות הווירטואליות שמריצות את Google Distributed Cloud במצב תוכנה בלבד. כדי לאחזר את כתובת ה-IP הזו מסביבת OpenStack, אתם יכולים להשתמש בפקודה שדומה לפקודה Get the ID of the public network in OpenStack.
  3. משיגים את כתובת ה-IP הציבורית הצפה של המכונה הווירטואלית של abm-ws.

    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. מעתיקים את הקובץ cloud.conf למכונה הווירטואלית abm-ws ב-OpenStack.

    scp ./cloud.conf ubuntu@$FLOATING_IP:~
    
  5. משתמשים ב-SSH כדי להתחבר באופן מאובטח למכונה הווירטואלית abm-ws ונכנסים בתור משתמש root.

    המשתמש root, כפי שהוגדר על ידי הסקריפטים של Terraform, הוא abm.

    ssh ubuntu@$FLOATING_IP
    sudo -u abm -i
    
  6. מעתיקים את הקבצים של cloud.conf לספרייה $HOME של המשתמש root.

    cp /home/ubuntu/cloud.conf $HOME
    
  7. יוצרים Kubernetes Secret עם ההגדרות האישיות.

    # make sure the kubectl client is pointing towards your 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. מתקינים את ספק שירותי הענן של OpenStack ל-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

  1. פורסים את אפליקציית נקודת המכירה לדוגמה.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales.yaml
    
  2. מוודאים שה-pods של האפליקציה פועלים.

    kubectl get pods
    

    הפלט אמור להיראות כך:

    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. האפליקציה נחשפה באמצעות שירות מסוג LoadBalancer.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/master/anthos-bm-openstack-terraform/resources/point-of-sales-service.yaml
    
  4. נסו לגשת לשירות דרך דפדפן.

    # 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
    

    אפליקציית נקודת מכירה שאפשר לגשת אליה באמצעות EXTERNAL-IP.

    אפליקציה של נקודת מכירה שפועלת באשכול בשרת פיזי, שנחשף דרך LoadBalancer ב-OpenStack

    בממשק המשתמש של OpenStack, תוכלו לראות שנוצר מאזן עומסים חדש של OpenStack.

    אפליקציית OpenStack שמוצגים בה מאזני עומסים שהוקצו על ידי Google Distributed Cloud software-only