יצירת אשכול משתמשים מותאם אישית

במאמר הזה מוסבר איך להתאים אישית את ההגדרות של אשכול משתמשים ב-GKE on AWS.

יכול להיות שתרצו ליצור אשכול משתמשים בהתאמה אישית מהסיבות הבאות:

  • יצירת אשכול נוסף לסביבת הכנה או לסביבת בדיקה.
  • הוספת מאגרי צמתים עם סוגים שונים של מכונות.
  • יצירת אשכול באזורי זמינות (AZ) ספציפיים ב-AWS.

לפני שמתחילים

לפני שמתחילים להשתמש ב-GKE on AWS, חשוב לוודא שביצעתם את המשימות הבאות:

  • מתקינים שירות ניהול.

  • אם רוצים ליצור אשכול בלי להשתמש ב-terraform output example_cluster, צריך שיהיו לכם רשתות משנה פרטיות של AWS למישור הבקרה. כל רשת משנה צריכה להיות שייכת לאזור זמינות אחר באותו אזור AWS. צריך להגדיר טבלאות ניתוב כדי לאפשר תעבורת נתונים בין רשתות משנה פרטיות, ולכל רשת משנה צריכה להיות גישה לשער NAT.

  • מזהה הענן הווירטואלי הפרטי (VPC) שלכם ב-AWS. מזהה VPC נראה כך: vpc-012345678abcde. אפשר למצוא את מזהה ה-VPC במסוף AWS.

כדי להתחבר למשאבי GKE ב-AWS, מבצעים את השלבים הבאים. בוחרים אם יש לכם רשת VPC קיימת ב-AWS (או חיבור ישיר לרשת ה-VPC) או אם יצרתם רשת VPC ייעודית כשבניתם את שירות הניהול.

VPC קיים

אם יש לכם חיבור ישיר או חיבור VPN ל-VPC קיים, אל תכללו את השורה env HTTP_PROXY=http://localhost:8118 בפקודות שמופיעות בנושא הזה.

VPC ייעודי

כשיוצרים שירות ניהול ב-VPC ייעודי, GKE on AWS כולל מארח bastion בתת-רשת ציבורית.

כדי להתחבר לשירות הניהול:

  1. עוברים לספרייה עם ההגדרה של GKE ב-AWS. יצרתם את הספרייה הזו כשהתקנתם את שירות הניהול.

    cd anthos-aws

  2. כדי לפתוח את המנהרה, מריצים את הסקריפט bastion-tunnel.sh. המנהרה מעבירה את הנתונים אל localhost:8118.

    כדי לפתוח מנהרה ליעד המבוצר (bastion host), מריצים את הפקודה הבאה:

    ./bastion-tunnel.sh -N
    

    ההודעות ממנהרת ה-SSH מופיעות בחלון הזה. כשרוצים לסגור את החיבור, מפסיקים את התהליך באמצעות Control+C או סוגרים את החלון.

  3. פותחים טרמינל חדש ועוברים לספרייה anthos-aws.

    cd anthos-aws
  4. מוודאים שאפשר להתחבר לאשכול באמצעות kubectl.

    env HTTPS_PROXY=http://localhost:8118 \
    kubectl cluster-info
    

    הפלט כולל את כתובת ה-URL של שרת ה-API של שירות הניהול.

בחירת גודל מופע של מישור בקרה

‫GKE ב-AWS לא תומך בשינוי הגודל של מופעים במישור הבקרה. לפני שיוצרים את אשכול המשתמשים, בוחרים את גודל המכונה של מישורי הבקרה. הגודל של מישור הבקרה תלוי במספר הצמתים באשכול. בטבלה הבאה מפורטים גדלי המופעים של מישור הבקרה המומלצים לגדלים שונים של אשכולות.

גודל האשכול (צמתים) סוג המכונה של מישור הבקרה
‫1 – 10 m5.large
‫11 – 100 m5.xlarge
‫101 – 200 m5.2xlarge

יצירת אשכול חדש עם הגדרה מותאמת אישית

אפשר להשתמש ב-terraform output example_cluster כדי ליצור תצורה של אשכול משתמש אחד לכל אשכול ניהול. אם רוצים ליצור אשכולות נוספים, צריך להחיל הגדרה בהתאמה אישית.

בדוגמה הזו, יוצרים אשכול באופן ידני מ-CRD‏ AWSCluster ו-AWSNodePool.

  1. עוברים לספרייה עם ההגדרה של GKE ב-AWS. יצרתם את הספרייה הזו כשהתקנתם את שירות הניהול.

    cd anthos-aws

  2. בספרייה של anthos-aws, משתמשים ב-anthos-gke כדי להעביר את ההקשר לשירות הניהול.

    cd anthos-aws
    anthos-gke aws management get-credentials

  3. פותחים כלי לעריכת טקסט ומעתיקים את ההגדרה הבאה AWSCluster לקובץ בשם custom-cluster.yaml.

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSCluster
    metadata:
      name: CLUSTER_NAME
    spec:
      region: AWS_REGION
      networking:
        vpcID: VPC_ID
        podAddressCIDRBlocks: POD_ADDRESS_CIDR_BLOCKS
        serviceAddressCIDRBlocks: SERVICE_ADDRESS_CIDR_BLOCKS
        ServiceLoadBalancerSubnetIDs: SERVICE_LOAD_BALANCER_SUBNETS
      controlPlane:
        version:  CLUSTER_VERSION # Latest version is 1.25.5-gke.2100
        instanceType: AWS_INSTANCE_TYPE
        keyName: SSH_KEY_NAME
        subnetIDs:
        - CONTROL_PLANE_SUBNET_IDS
        securityGroupIDs:
        - CONTROL_PLANE_SECURITY_GROUPS
        iamInstanceProfile: CONTROL_PLANE_IAM_ROLE
        rootVolume:
          sizeGiB: ROOT_VOLUME_SIZE
          volumeType: ROOT_VOLUME_TYPE # Optional
          iops: ROOT_VOLUME_IOPS # Optional
          kmsKeyARN: ROOT_VOLUME_KEY # Optional
        etcd:
          mainVolume:
            sizeGiB: ETCD_VOLUME_SIZE
            volumeType: ETCD_VOLUME_TYPE # Optional
            iops: ETCD_VOLUME_IOPS # Optional
            kmsKeyARN: ETCD_VOLUME_KEY # Optional
        databaseEncryption:
          kmsKeyARN: ARN_OF_KMS_KEY
        hub: # Optional
          membershipName: ANTHOS_CONNECT_NAME
        cloudOperations: # Optional
          projectID: YOUR_PROJECT
          location: GCP_REGION
          enableLogging: ENABLE_LOGGING
          enableMonitoring: ENABLE_MONITORING
        workloadIdentity: # Optional
          oidcDiscoveryGCSBucket: WORKLOAD_IDENTITY_BUCKET
    

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

    • CLUSTER_NAME: השם של האשכול.
    • AWS_REGION: האזור ב-AWS שבו האשכול פועל.

    • VPC_ID: המזהה של ה-VPC שבו האשכול פועל.

    • POD_ADDRESS_CIDR_BLOCKS: טווח כתובות IPv4 שמשמשות את הפודים של האשכול. בשלב הזה יש תמיכה רק בטווח אחד. הטווח לא יכול לחפוף לרשתות משנה שאפשר להגיע אליהן מהרשת שלכם. אפשר להשתמש באותו טווח בכמה אובייקטים שונים של AWSCluster. לדוגמה, 10.2.0.0/16.

    • SERVICE_ADDRESS_CIDR_BLOCKS: טווח כתובות ה-IPv4 שמשמשות את השירותים של האשכול. בשלב הזה יש תמיכה רק בטווח אחד. הטווח לא יכול לחפוף לרשתות משנה שאפשר להגיע אליהן מהרשת שלכם. בטוח להשתמש באותו טווח בכמה אובייקטים שונים של AWSCluster. לדוגמה, 10.1.0.0/16.

    • SERVICE_LOAD_BALANCER_SUBNETS: מזהי רשתות המשנה שבהן GKE ב-AWS יכול ליצור מאזני עומסים ציבוריים או פרטיים.

    • CLUSTER_VERSION: גרסת Kubernetes שנתמכת על ידי GKE ב-AWS. הגרסה העדכנית ביותר היא 1.25.5-gke.2100.

    • AWS_INSTANCE_TYPE: סוג נתמך של מופע EC2.

    • SSH_KEY_NAME: זוג מפתחות של AWS EC2.

    • CONTROL_PLANE_SUBNET_IDS: מזהי תת-הרשת באזורי הזמינות שבהם מופעלים מופעי מישור הבקרה.

    • CONTROL_PLANE_SECURITY_GROUPS: מזהה קבוצת אבטחה שנוצר במהלך ההתקנה של שירות הניהול. אפשר להתאים אישית את ההגדרה הזו על ידי הוספה של מזהי קבוצות אבטחה שנדרשים כדי להתחבר למישור הבקרה.

    • CONTROL_PLANE_IAM_PROFILE: שם הפרופיל של מכונת AWS EC2 שהוקצה לשכפול של מישור הבקרה.

    • ROOT_VOLUME_SIZE: הגודל, בגיביבייט (GiB), של נפחי הבסיס של מישור הבקרה.

    • ROOT_VOLUME_TYPE עם סוג הנפח EBS. לדוגמה, gp3.

    • ROOT_VOLUME_IOPS עם כמות פעולות הקלט/פלט (IOPS) שהוקצו לנפח האחסון לשנייה. ההגדרה תקפה רק אם volumeType הוא GP3. מידע נוסף זמין במאמר בנושא כרכי SSD לשימוש כללי (gp3).

    • ROOT_VOLUME_KEY עם שם משאב Amazon של מפתח AWS KMS שמצפין את נפחי הבסיס של מופע מישור הבקרה.

    • ETCD_VOLUME_SIZE: הגודל של אמצעי האחסון שמשמשים את etcd.

    • ETCD_VOLUME_TYPE עם סוג הנפח EBS. לדוגמה, gp3.

    • ETCD_VOLUME_IOPS עם כמות פעולות הקלט/פלט (IOPS) שהוקצו לנפח האחסון לשנייה. ההגדרה תקפה רק אם volumeType הוא gp3. מידע נוסף זמין במאמר בנושא כרכי SSD לשימוש כללי (gp3).

    • ETCD_VOLUME_KEY עם שם משאב Amazon של מפתח AWS KMS שמצפין את נפחי הנתונים של etcd במישור הבקרה.

    • ARN_OF_KMS_KEY: מפתח AWS KMS שמשמש להצפנת סודות של אשכול.

    • ANTHOS_CONNECT_NAME: השם של חברות Connect שמשמש לרישום האשכול. השם של המועדון חייב להיות ייחודי. לדוגמה, projects/YOUR_PROJECT/locations/global/memberships/CLUSTER_NAME, כאשר YOUR_PROJECT הוא הפרויקט שלכם ב- Google Cloud ו-CLUSTER_NAME הוא שם ייחודי בפרויקט. השדה הזה הוא אופציונלי.

    • YOUR_PROJECT: מזהה הפרויקט.

    • GCP_REGION: האזור שבו רוצים לאחסן את היומנים. Google Cloud בוחרים אזור שקרוב לאזור AWS. מידע נוסף זמין במאמר מיקומים גלובליים – אזורים ותחומים, למשל us-central1.

    • ENABLE_LOGGING: true או false, אם Cloud Logging מופעל בצמתי מישור הבקרה.

    • ENABLE_MONITORING: true או false, אם Cloud Monitoring מופעל בצמתי מישור הבקרה.

    • WORKLOAD_IDENTITY_BUCKET: שם הקטגוריה של Cloud Storage שמכילה את פרטי הגילוי של זהות כוח העבודה. השדה הזה הוא אופציונלי.

  4. יוצרים לפחות AWSNodePool אחד לאשכול. פותחים עורך טקסט ומעתיקים את הגדרת ה-AWSCluster הבאה לקובץ בשם custom-nodepools.yaml.

    apiVersion: multicloud.cluster.gke.io/v1
    kind: AWSNodePool
    metadata:
      name: NODE_POOL_NAME
    spec:
      clusterName: AWSCLUSTER_NAME
      version:  CLUSTER_VERSION # latest version is 1.25.5-gke.2100
      region: AWS_REGION
      subnetID: AWS_SUBNET_ID
      minNodeCount: MINIMUM_NODE_COUNT
      maxNodeCount: MAXIMUM_NODE_COUNT
      maxPodsPerNode: MAXIMUM_PODS_PER_NODE_COUNT
      instanceType: AWS_NODE_TYPE
      keyName: KMS_KEY_PAIR_NAME
      iamInstanceProfile: NODE_IAM_PROFILE
      proxySecretName: PROXY_SECRET_NAME
      rootVolume:
        sizeGiB: ROOT_VOLUME_SIZE
        volumeType: VOLUME_TYPE # Optional
        iops: IOPS # Optional
        kmsKeyARN: NODE_VOLUME_KEY # Optional 
    

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

    • NODE_POOL_NAME: שם ייחודי ל-AWSNodePool.
    • AWSCLUSTER_NAME: השם של AWSCluster. לדוגמה, staging-cluster.
    • CLUSTER_VERSION: גרסה נתמכת של GKE ב-AWS Kubernetes.
    • AWS_REGION: אותו אזור AWS כמו AWSCluster.
    • AWS_SUBNET_ID: רשת משנה ב-AWS באותו אזור כמו AWSCluster.
    • MINIMUM_NODE_COUNT: המספר המינימלי של הצמתים במאגר הצמתים. מידע נוסף זמין במאמר בנושא שינוי הגודל של אשכולות משתמשים.
    • MAXIMUM_NODE_COUNT: המספר המקסימלי של הצמתים במאגר הצמתים.
    • MAXIMUM_PODS_PER_NODE_COUNT: המספר המקסימלי של פודים ש-GKE ב-AWS יכול להקצות לצומת.
    • AWS_NODE_TYPE: סוג של מכונת AWS EC2.
    • KMS_KEY_PAIR_NAME: זוג המפתחות של AWS KMS שמוקצה לכל עובד במאגר הצמתים.
    • NODE_IAM_PROFILE: השם של פרופיל מכונת AWS EC2 שהוקצה לצמתים במאגר.
    • ROOT_VOLUME_SIZE: הגודל, בגיביבייט (GiB), של נפחי הבסיס של מישור הבקרה.
    • VOLUME_TYPE: סוג נפח האחסון ב-EBS של הצומת ב-AWS. לדוגמה, gp3.
    • IOPS: מספר פעולות הקלט/פלט (IOPS) שהוקצו לנפחי אחסון לשנייה. ההגדרה תקפה רק אם volumeType הוא gp3.
    • NODE_VOLUME_KEY: ה-ARN של מפתח AWS KMS ששימש להצפנת אמצעי האחסון. מידע נוסף מופיע במאמר בנושא שימוש במפתח CMK בניהול הלקוח להצפנת אמצעי אחסון.
  5. מחילים את המניפסטים על שירות הניהול.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f custom-cluster.yaml
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f custom-nodepools.yaml
    

יצירת קובץ kubeconfig

בזמן שה-user cluster מתחיל, אתם יכולים ליצור kubeconfigקונטקסט ל-user cluster החדש. אתם משתמשים בהקשר כדי לבצע אימות למשתמש או לאשכול ניהול.

  1. אפשר להשתמש ב-anthos-gke aws clusters get-credentials כדי ליצור kubeconfig עבור אשכול המשתמשים ב-~/.kube/config.

    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    

    מחליפים את CLUSTER_NAME בשם האשכול. לדוגמה, cluster-0.

  2. משתמשים ב-kubectl כדי לבצע אימות לאשכול המשתמשים החדש.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl cluster-info
    

    אם האשכול מוכן, הפלט כולל את כתובות ה-URL של רכיבי Kubernetes באשכול.

צפייה בסטטוס של האשכול

שירות הניהול מקצה משאבי AWS כשמחילים AWSCluster או AWSNodePool.

  1. בספרייה של anthos-aws, משתמשים ב-anthos-gke כדי להעביר את ההקשר לשירות הניהול.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. כדי להציג את רשימת האשכולות, משתמשים בפקודה kubectl get AWSClusters.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get AWSClusters
    

    הפלט כולל את השם, המצב, הגיל, הגרסה ונקודת הקצה של כל אשכול.

    לדוגמה, הפלט הבא כולל רק AWSCluster אחד בשם cluster-0:

    NAME        STATE          AGE     VERSION         ENDPOINT
    cluster-0   Provisioning   2m41s   1.25.5-gke.2100   gke-xyz.elb.us-east-1.amazonaws.com
    

הצגת האירועים של האשכול

כדי לראות אירועי Kubernetes מהזמן האחרון מאשכול המשתמשים, משתמשים ב-kubectl get events.

  1. בספרייה של anthos-aws, משתמשים ב-anthos-gke כדי להעביר את ההקשר לשירות הניהול.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. מריצים את kubectl get events.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get events
    

הפלט כולל מידע, אזהרות ושגיאות שקשורים לשירות הניהול.

מחיקת אשכול משתמשים

כדי למחוק אשכול משתמשים, מבצעים את השלבים הבאים:

  1. בספרייה של anthos-aws, משתמשים ב-anthos-gke כדי להעביר את ההקשר לשירות הניהול.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. משתמשים ב-kubectl delete כדי למחוק את קובץ המניפסט שמכיל את אשכולות המשתמשים.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f CLUSTER_FILE
    

    מחליפים את CLUSTER_FILE בשם המניפסט שמכיל את האובייקטים AWScluster ו-AWSNodePool. לדוגמה, cluster-0.yaml.

מחיקת כל אשכולות המשתמשים

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

  1. בספרייה של anthos-aws, משתמשים ב-anthos-gke כדי להעביר את ההקשר לשירות הניהול.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. משתמשים ב-kubectl delete כדי למחוק את AWSNodePools ואת AWSClusters משירות הניהול.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete AWSNodePool --all
    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete AWSCluster --all
    

מידע נוסף זמין במאמר הסרת ההתקנה של GKE ב-AWS.

המאמרים הבאים