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

במדריך הזה מוסבר איך להגדיר את ספק הענן OpenStack ל-Kubernetes באשכול Bare Metal. ספק הענן OpenStack צריך להיות מוגדר כך שיחשוף שירותי Kubernetes באמצעות OpenStack LBaaS.

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

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

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

הגדרת הספק

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

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

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

    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: המשתנים האלה כבר צריכים להיות מוגדרים בסביבה על ידי הפעלת הפקודה source בקובץ openrc. לכן, הם ייבחרו באופן אוטומטי.
    • PUBLIC_NETWORK_ID: זו הרשת שנגישה לציבור בפריסת OpenStack שלכם, שממנה מוקצות כתובות IP צפות. מהרשת הזו יוקצו כתובות ה-IP של שירותי Kubernetes‏ LoadBalancer IPs. אתם יכולים להשתמש בפקודה בשורה אחת כדי לאחזר את כתובת ה-IP הזו מסביבת OpenStack.
    • ABM_NETWORK_SUBNET_ID: רשת המשנה ברשת הפרטית בפריסת OpenStack שממנה מוקצים כתובות IP למכונות הווירטואליות שמריצות את התוכנה בלבד של Google Distributed Cloud. אפשר להשתמש בפקודה דומה לGet the ID of the public network in OpenStack כדי לאחזר את כתובת ה-IP הזו מסביבת 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. מוודאים שפודים של האפליקציה פועלים.

    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 באינטרנט.

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