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

בעזרת Node Agent אפשר לבצע פעולות מאובטחות באשכולות בצמתים של Google Distributed Cloud, בלי להסתמך על Ansible דרך SSH. הסוכן הזה זמין בגרסאות 1.33 ואילך, פועל בכל צומת ומנהל את הגדרות הצומת בערוץ gRPC מאומת ומוצפן.

אתם יכולים להעביר אשכולות קיימים ל-Node Agent או לפרוס את הסוכן כשאתם יוצרים אשכולות חדשים. כדי לנהל את מחזור החיים של הסוכן, הפקודות של bmctl nodeagent יוצרות באופן אוטומטי אישורים ומבצעות רוטציית פרטי כניסה בין הצמתים. הפקודות פועלות באמצעות SSH, כך שאפשר לפרוס סוכנים גם כשבקרי האשכול לא תקינים.

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

לפני שמעבירים אשכול למצב Node Agent, חשוב לוודא שכל הצמתים באשכול עומדים בדרישות הבאות:

  • יציאה פתוחה שמיועדת ל-Node Agent. כברירת מחדל, Node Agent משתמש ביציאה 9192. צריך להגדיר את היציאה הזו כשפורסים, מפעילים או מתקינים אשכול חדש. מידע נוסף זמין במאמר התאמה אישית של היציאה של Node Agent.

  • ‫Containerd מגרסה 1.7 ואילך.

  • נפח אחסון פנוי של 12GB בספרייה /tmp בצומת האדמין ובכל צומתי היעד. אם אתם לא יכולים לשנות את הגודל של הספרייה /tmp בצומתי היעד, קראו את המאמר הגדלת נפח האחסון המקומי לגיבויים של סוכן הצומת.

מעבר למצב Node Agent

המעבר למצב Node Agent הוא תהליך דו-שלבי:

  1. פריסת Node Agent: פורסים את הרכיב Node Agent בכל הצמתים באשכול.

  2. הפעלת מצב Node Agent:

    • באשכול קיים, מפעילים את המצב באמצעות הפקודה bmctl nodeagent.
    • באשכול חדש, מוסיפים את הערת ההפעלה ואת נתיבי פרטי הכניסה המתאימים לקובץ התצורה של האשכול לפני היצירה.

פריסת Node Agent

הפקודה bmctl nodeagent deploy פורסת את שירות Node Agent בצומת יעד אחד או יותר באשכול שצוין באמצעות SSH. הפקודה הזו מתקינה או מתקינה מחדש את Node Agent. הוא מתחבר באמצעות SSH ומבצע את השלבים הנדרשים, כולל העברת קובצי בינארי, יצירה והעברה של אישורים (אופציונלי) והגדרת שירות systemd. הוא דורש גישת SSH והרשאות sudo בצומתי היעד.

אפשר לציין צומתי יעד בכמה דרכים: ישירות באמצעות הדגל --nodes, באמצעות קובץ תצורה של אשכול באמצעות הדגל --cluster, או על ידי הפניה למשאב המותאם אישית של האשכול. למידע נוסף על הפקודות והאפשרויות של Node Agent, קראו את המסמך בנושא פקודות bmctl.

פריסה בסביבה חדשה

בפריסות ראשוניות, מורידים את הקובץ הבינארי של nodeagentd ויוצרים רשויות אישורים (CA) חדשות. הפקודה הבאה מאחזרת את רשימת הצמתים מקובץ התצורה של האשכול. הדגל --sa-key מספק את פרטי הכניסה הנדרשים להורדת הקובץ הבינארי nodeagentd מהקטגוריה של Cloud Storage.

  • כדי לפרוס את Node Agent בפעם הראשונה באשכול חדש, משתמשים בפקודה הבאה:

    bmctl nodeagent deploy \
        --pull-binaries=true \
        --generate-ca-creds=true \
        --cluster CLUSTER_NAME \
        --ssh-user USERNAME \
        --ssh-key SSH_KEY_PATH \
        --sa-key SERVICE_ACCOUNT_KEY_PATH
    

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

    • ‫CLUSTER_NAME: שם האשכול שבו רוצים לפרוס את Node Agent.

    • ‫USERNAME: שם המשתמש שעבורו מוגדרת גישת SSH לצמתים. כברירת מחדל, SSH מוגדר ל-root, אבל אם הגדרתם משתמש להתחברות, השתמשו בשם המשתמש הזה.

    • ‫SSH_KEY_PATH: הנתיב של קובץ המפתח הפרטי של SSH.

    • ‫SERVICE_ACCOUNT_KEY_PATH: הנתיב לקובץ המפתח של חשבון השירות עם הרשאות למשיכת קובצי אימג' של המרשם. כברירת מחדל, זהו קובץ המפתח בפורמט JSON של חשבון השירות anthos-baremetal-gcr.

    פלט הפקודה דומה לדוגמה הבאה:

    Please check the logs at bmctl-workspace/demo-cluster/log/nodeagent_deploy-20250819-175703/nodeagent_deploy.log
    [2025-08-19 17:57:03+0000] INFO: Executing 'nodeagent deploy'...
    [2025-08-19 17:57:05+0000] -------------------- Deployment Plan --------------------
    [2025-08-19 17:57:05+0000]   Target Cluster:            demo-cluster
    [2025-08-19 17:57:05+0000]   SSH User:                  root
    [2025-08-19 17:57:05+0000]   SSH Key:                   rootSSH
    [2025-08-19 17:57:05+0000]   Concurrency:               25
    [2025-08-19 17:57:05+0000]   Generate Credentials:      true
    [2025-08-19 17:57:05+0000]   Deploy Credentials:        true
    [2025-08-19 17:57:05+0000]   Server Cert Validity Days: 1825
    [2025-08-19 17:57:05+0000]   Verify SSH Host Keys:      true
    [2025-08-19 17:57:05+0000]   Node Agent pull version:   1.33.0-gke.799
    [2025-08-19 17:57:05+0000]   Target Nodes Source:       cluster YAML
    [2025-08-19 17:57:05+0000]   Nodes Port:                9192
    [2025-08-19 17:57:05+0000]   Target Nodes (4):          10.200.0.2, 10.200.0.3, 10.200.0.4, 10.200.0.5
    [2025-08-19 17:57:05+0000] ---------------------------------------------------------
    Proceed with deployment? [y/N]: y
    [2025-08-19 17:57:07+0000] INFO: User confirmed.
    [2025-08-19 17:57:07+0000] Downloading Node Agent binary (1.33.0-gke.799)... OK
    [2025-08-19 17:57:08+0000] INFO: Node Agent binary pulled and stored at bmctl-workspace/bins/nodeagentd
    [2025-08-19 17:57:08+0000] INFO: Starting generate credentials (CAs and client credentials) phase...
    [2025-08-19 17:57:08+0000] Generating credentials for the cluster: demo-cluster, 2025-08-19T17:57:08Z
    [2025-08-19 17:57:08+0000] ------------ Credentials Options ------------
    [2025-08-19 17:57:08+0000] Cluster Name:           demo-cluster
    [2025-08-19 17:57:08+0000] Key Algorithm:          rsa
    [2025-08-19 17:57:08+0000] Key Length:             4096
    [2025-08-19 17:57:08+0000] CA Validity (days):     3650
    [2025-08-19 17:57:08+0000] Client Validity (days): 1825
    [2025-08-19 17:57:08+0000] Server CA CN:           Node Agent Server CA
    [2025-08-19 17:57:08+0000] Client CA CN:           Node Agent Client CA
    [2025-08-19 17:57:08+0000] Creds path:             bmctl-workspace/demo-cluster/nodeagent-creds
    [2025-08-19 17:57:08+0000] --------------------------------------------
    [2025-08-19 17:57:08+0000] Generating credentials... OK
    [2025-08-19 17:57:19+0000] Certificates have been created and stored in bmctl-workspace/demo-cluster/nodeagent-creds
    [2025-08-19 17:57:19+0000] INFO: Attempting to load CAs from: bmctl-workspace/demo-cluster/nodeagent-creds
    [2025-08-19 17:57:19+0000] INFO: Server CA loaded successfully. Subject: CN=Node Agent Server CA,O=GCD-SO,L=Sunnyvale,ST=California,C=US, Key Type: *rsa.PrivateKey
    [2025-08-19 17:57:19+0000] INFO: Client CA loaded successfully. Subject: CN=Node Agent Client CA,O=GCD-SO,L=Sunnyvale,ST=California,C=US, Key Type: *rsa.PrivateKey
    [2025-08-19 17:57:19+0000] ===============================================
    [2025-08-19 17:57:19+0000] --- Starting Artifact Preparation ---
    [2025-08-19 17:57:19+0000] Starting artifact preparation for 4 nodes (concurrency: 25)...
    [2025-08-19 17:57:23+0000] --- Finished Artifact Preparation ---
    [2025-08-19 17:57:23+0000] INFO: Preparation SUCCEEDED for node 10.200.0.2
    [2025-08-19 17:57:23+0000] INFO: Preparation SUCCEEDED for node 10.200.0.3
    [2025-08-19 17:57:23+0000] INFO: Preparation SUCCEEDED for node 10.200.0.4
    [2025-08-19 17:57:23+0000] INFO: Preparation SUCCEEDED for node 10.200.0.5
    [2025-08-19 17:57:23+0000] ===============================================
    [2025-08-19 17:57:23+0000] --- Starting Deployment Phase ---
    [2025-08-19 17:57:23+0000] INFO: Starting deployment to 4 nodes (Concurrency: 25)...
    [2025-08-19 17:57:36+0000] INFO: All host deployments finished.
    [2025-08-19 17:57:36+0000] INFO: --- Deployment Phase Completed Successfully ---
    [2025-08-19 17:57:36+0000]
    ===============================================
    --- Deployment Summary ---
      Host: 10.200.0.2, Status: SUCCESS
      Host: 10.200.0.3, Status: SUCCESS
      Host: 10.200.0.4, Status: SUCCESS
      Host: 10.200.0.5, Status: SUCCESS
    -----------------------------------------------
    Total Nodes Attempted: 4 | SUCCESS: 4 | FAILED: 0
    ===============================================
    

שדרוג הגרסה של Node Agent

השדרוגים של Node Agent לא תלויים בשדרוגים של האשכולות. כדי לשדרג את Node Agent, משתמשים בפקודה bmctl nodeagent deploy ומגדירים את --pull-binaries ל-true. כשמשדרגים את Node Agent, מגדירים את --generate-ca-creds ל-false כדי להשתמש ברשויות אישורים קיימות במקום ליצור אותן מחדש. כדי ליצור מחדש רשויות אישורים, צריך לעדכן את פרטי הכניסה התואמים לאשכול, תהליך ששמור לרוטציית פרטי כניסה. הפלט דומה לפריסה חדשה, אבל בלי היומנים שנוצרו על ידי ה-CA.

שדרוג של Node Agent מפעיל מחדש את התהליך של Node Agent, מה שעלול לשבש את המשימות שפועלות. רוב המשימות מתאוששות באמצעות מנגנוני ניסיון חוזר, אבל כדי לצמצם את ההפרעות האפשריות, כדאי לבצע את הפעולות הבאות:

  1. מוודאים שאין שדרוג של אשכול או פעילויות אחרות של הגדרה לאחר ההתקנה.

  2. מוודאים שהאשכול פועל.

  3. מפעילים את השדרוג של Node Agent:

    bmctl nodeagent deploy \
        --pull-binaries=true \
        --generate-ca-creds=false \
        --cluster CLUSTER_NAME \
        --ssh-user USERNAME \
        --ssh-key SSH_KEY_PATH \
        --sa-key SERVICE_ACCOUNT_KEY_PATH
    

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

    • ‫CLUSTER_NAME: שם האשכול שבו רוצים לפרוס את Node Agent.

    • ‫USERNAME: שם המשתמש שעבורו מוגדרת גישת SSH לצמתים. כברירת מחדל, SSH מוגדר ל-root, אבל אם הגדרתם משתמש להתחברות, השתמשו בשם המשתמש הזה.

    • ‫SSH_KEY_PATH: הנתיב של קובץ המפתח הפרטי של SSH.

    • ‫SERVICE_ACCOUNT_KEY_PATH: הנתיב לקובץ המפתח של חשבון השירות עם הרשאות למשיכת קובצי אימג' של המרשם. כברירת מחדל, זהו קובץ המפתח בפורמט JSON של חשבון השירות anthos-baremetal-gcr.

    פלט הפקודה דומה לדוגמה הבאה:

    Please check the logs at bmctl-workspace/demo-cluster/log/nodeagent_deploy-20250819-180416/nodeagent_deploy.log
    [2025-08-19 18:04:16+0000] INFO: Executing 'nodeagent deploy'...
    [2025-08-19 18:04:18+0000] -------------------- Deployment Plan --------------------
    [2025-08-19 18:04:18+0000]   Target Cluster:            demo-cluster
    [2025-08-19 18:04:18+0000]   SSH User:                  root
    [2025-08-19 18:04:18+0000]   SSH Key:                   rootSSH
    [2025-08-19 18:04:18+0000]   Concurrency:               25
    [2025-08-19 18:04:18+0000]   Generate Credentials:      false
    [2025-08-19 18:04:18+0000]   Deploy Credentials:        true
    [2025-08-19 18:04:18+0000]   Server Cert Validity Days: 1825
    [2025-08-19 18:04:18+0000]   Verify SSH Host Keys:      true
    [2025-08-19 18:04:18+0000]   Node Agent pull version:   1.33.0-gke.799
    [2025-08-19 18:04:18+0000]   Target Nodes Source:       cluster YAML
    [2025-08-19 18:04:18+0000]   Nodes Port:                9192
    [2025-08-19 18:04:18+0000]   Target Nodes (4):          10.200.0.2, 10.200.0.3, 10.200.0.4, 10.200.0.5
    [2025-08-19 18:04:18+0000] ---------------------------------------------------------
    Proceed with deployment? [y/N]: y
    [2025-08-19 18:04:20+0000] INFO: User confirmed.
    [2025-08-19 18:04:20+0000] Downloading Node Agent binary (1.33.0-gke.799)... OK
    [2025-08-19 18:04:22+0000] INFO: Node Agent binary pulled and stored at bmctl-workspace/bins/nodeagentd
    [2025-08-19 18:04:22+0000] INFO: Attempting to load CAs from: bmctl-workspace/demo-cluster/nodeagent-creds
    [2025-08-19 18:04:22+0000] INFO: Server CA loaded successfully. Subject: CN=Node Agent Server CA,O=gcd-SO,L=Sunnyvale,ST=California,C=US, Key Type: *rsa.PrivateKey
    [2025-08-19 18:04:22+0000] INFO: Client CA loaded successfully. Subject: CN=Node Agent Client CA,O=gcd-SO,L=Sunnyvale,ST=California,C=US, Key Type: *rsa.PrivateKey
    [2025-08-19 18:04:22+0000] ===============================================
    [2025-08-19 18:04:22+0000] --- Starting Artifact Preparation ---
    [2025-08-19 18:04:22+0000] Starting artifact preparation for 4 nodes (concurrency: 25)...
    

פריסה או פריסה מחדש בצמתים ספציפיים

אם מוסיפים או משחזרים צומתי אשכול, אפשר לטרגט את הצמתים הספציפיים לפריסת Node Agent, במקום לפרוס אותו בכל הצמתים באשכול. משתמשים בדגל --nodes כדי לציין את הצומת לפריסה.

  • כדי לפרוס את Node Agent בצמתים ספציפיים, משתמשים בפקודה הבאה:

    bmctl nodeagent deploy \
        --pull-binaries=true \
        --cluster CLUSTER_NAME \
        --ssh-user USERNAME \
        --ssh-key SSH_KEY_PATH \
        --sa-key SERVICE_ACCOUNT_KEY_PATH \
        --nodes NODE_IP_ADDRESS_LIST
    

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

    • ‫CLUSTER_NAME: שם האשכול שבו רוצים לפרוס את Node Agent.

    • ‫USERNAME: שם המשתמש שעבורו מוגדרת גישת SSH לצמתים. כברירת מחדל, SSH מוגדר ל-root, אבל אם הגדרתם משתמש להתחברות, השתמשו בשם המשתמש הזה.

    • ‫SSH_KEY_PATH: הנתיב של קובץ המפתח הפרטי של SSH.

    • ‫SERVICE_ACCOUNT_KEY_PATH: הנתיב לקובץ המפתח של חשבון השירות עם הרשאות למשיכת קובצי אימג' של המרשם. כברירת מחדל, זהו קובץ המפתח בפורמט JSON של חשבון השירות anthos-baremetal-gcr.

    • ‫NODE_IP_ADDRESS_LIST: רשימה מופרדת בפסיקים של כתובות ה-IP של הצמתים שבהם פורסים את Node Agent.

    פלט הפקודה דומה לדוגמה הבאה:

    Please check the logs at bmctl-workspace/demo-cluster/log/nodeagent_deploy-20250819-181751/nodeagent_deploy.log
    [2025-08-19 18:17:51+0000] INFO: Executing 'nodeagent deploy'...
    [2025-08-19 18:17:54+0000] -------------------- Deployment Plan --------------------
    [2025-08-19 18:17:54+0000]   Target Cluster:            demo-cluster
    [2025-08-19 18:17:54+0000]   SSH User:                  user
    [2025-08-19 18:17:54+0000]   SSH Key:                   SSH_KEY_PATH
    [2025-08-19 18:17:54+0000]   Concurrency:               25
    [2025-08-19 18:17:54+0000]   Generate Credentials:      false
    [2025-08-19 18:17:54+0000]   Deploy Credentials:        true
    [2025-08-19 18:17:54+0000]   Server Cert Validity Days: 1825
    [2025-08-19 18:17:54+0000]   Verify SSH Host Keys:      true
    [2025-08-19 18:17:54+0000]   Node Agent pull version:   1.33.0-gke.799
    [2025-08-19 18:17:54+0000]   Target Nodes Source:       nodes flag
    [2025-08-19 18:17:54+0000]   Nodes Port:                9192
    [2025-08-19 18:17:54+0000]   Target Nodes (3):          10.200.0.2, 10.200.0.3
    [2025-08-19 18:17:54+0000] ---------------------------------------------------------
    Proceed with deployment? [y/N]:
    

רשימה מלאה של אפשרויות הפקודה bmctl nodeagent deploy מופיעה בקטע פריסת nodeagent בחומר העזר בנושא פקודות bmctl.

הפעלת Node Agent

הפקודה enable מפעילה את מצב Node Agent באשכול קיים שפועל, אחרי שפורסים את Node Agent בכל הצמתים באשכול. הפקודה הזו גם יוצרת או מעדכנת את פרטי הכניסה של Node Agent בתוך האשכול.

הפעלת Node Agent באשכול קיים שפועל

אפשר להפעיל את Node Agent באשכולות קיימים מגרסה 1.33 ואילך.

כדי להפעיל את Node Agent באשכול קיים:

  1. מפעילים את Node Agent באשכול:

    ./bmctl nodeagent enable \
        --kubeconfig KUBECONFIG \
        --cluster CLUSTER_NAME \
        --namespace CLUSTER_NAMESPACE \
        --ensure-status=true
    

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

    • ‫KUBECONFIG: הנתיב של קובץ kubeconfig לאשכול שבו מפעילים את Node Agent.

    • ‫CLUSTER_NAME: שם האשכול שבו רוצים לפרוס את Node Agent.

    • ‫CLUSTER_NAMESPACE: מרחב השמות של האשכול שבו משתמשים כדי למצוא את אשכול היעד ואת פרטי הכניסה לאשכול, ולעדכן את משאב האשכול. ברירת המחדל היא cluster-<CLUSTER-NAME>.

    פלט הפקודה דומה לדוגמה הבאה:

    Please check the logs at bmctl-workspace/demo-cluster/log/nodeagent_enable-20250819-183058/nodeagent_enable.log
    [2025-08-19 18:30:58+0000] Enable Node Agent for cluster: demo-cluster
    [2025-08-19 18:31:00+0000] Update Node Agent credentials
    [2025-08-19 18:31:00+0000] ----------------------------------------------------------
    [2025-08-19 18:31:00+0000] Server CA certificate path: bmctl-workspace/demo-cluster/nodeagent-creds/server_ca_cert.pem
    [2025-08-19 18:31:00+0000] Server CA private key path: bmctl-workspace/demo-cluster/nodeagent-creds/server_ca_key.pem
    [2025-08-19 18:31:00+0000] Client CA certificate path: bmctl-workspace/demo-cluster/nodeagent-creds/client_ca_cert.pem
    [2025-08-19 18:31:00+0000] Client CA private key path: bmctl-workspace/demo-cluster/nodeagent-creds/client_ca_key.pem
    [2025-08-19 18:31:00+0000] Client certificate path: bmctl-workspace/demo-cluster/nodeagent-creds/client_cert.pem
    [2025-08-19 18:31:00+0000] Client private key path: bmctl-workspace/demo-cluster/nodeagent-creds/client_key.pem
    [2025-08-19 18:31:00+0000] ----------------------------------------------------------
    [2025-08-19 18:31:00+0000] Node Agent client credentials secret has been created/updated
    [2025-08-19 18:31:00+0000] Node Agent server CA secret has been created/updated
    [2025-08-19 18:31:00+0000] Node Agent client CA secret has been created/updated
    [2025-08-19 18:31:00+0000] Successfully created/updated Node Agent credentials secrets in namespace cluster-demo-cluster
    [2025-08-19 18:31:00+0000] Annotation 'baremetal.cluster.gke.io/node-agent-port' not found on cluster cluster-demo-cluster/demo-cluster, no removal needed.
    [2025-08-19 18:31:00+0000] Successfully enable Node Agent for cluster: demo-cluster
    [2025-08-19 18:31:00+0000] ----------------------------------------------------------
    [2025-08-19 18:31:00+0000] Verifying Node Agent status on all nodes...
    [2025-08-19 18:31:00+0000] --------------------- Total nodes: 3 ----------------------
    [2025-08-19 18:31:00+0000] node: control-0--893f0567cb79efc-9b9ec55816170dcf.lab.anthos, version: 1.33.0-gke.799, OS: linux, uptime (seconds): 1577
    [2025-08-19 18:31:00+0000] node: control-1--893f0567cb79efc-9b9ec55816170dcf.lab.anthos, version: 1.33.0-gke.799, OS: linux, uptime (seconds): 1578
    [2025-08-19 18:31:00+0000] node: control-2--893f0567cb79efc-9b9ec55816170dcf.lab.anthos, version: 1.33.0-gke.799, OS: linux, uptime (seconds): 1581
    [2025-08-19 18:31:00+0000] ----------------------------------------------------------
    [2025-08-19 18:31:00+0000] Verified Node Agent status on all nodes in cluster
    
  2. מוסיפים את ההערה להפעלת Node Agent בקטע של המטא-נתונים של האשכול בקובץ התצורה של האשכול:

    kind: Cluster
    metadata:
      annotations:
        baremetal.cluster.gke.io/enable-node-agent: ""
    

התקנת אשכול חדש

אפשר להשתמש ב-Node Agent כשיוצרים אשכולות בגרסה 1.33 ואילך.

כדי להשתמש ב-Node Agent באשכול חדש:

  1. באשכול אדמין חדש, מוסיפים את הנתיבים הבאים של קובצי פרטי הכניסה לחלק העליון של קובץ התצורה של אשכול האדמין:

    nodeAgentServerCACertificatePath: bmctl-workspace/demo-cluster/nodeagent-creds/server_ca_cert.pem
    nodeAgentServerCAPrivateKeyPath: bmctl-workspace/demo-cluster/nodeagent-creds/server_ca_key.pem
    nodeAgentClientCACertificatePath: bmctl-workspace/demo-cluster/nodeagent-creds/client_ca_cert.pem
    nodeAgentClientCAPrivateKeyPath: bmctl-workspace/demo-cluster/nodeagent-creds/client_ca_key.pem
    nodeAgentClientCertificatePath: bmctl-workspace/demo-cluster/nodeagent-creds/client_cert.pem
    nodeAgentClientPrivateKeyPath: bmctl-workspace/demo-cluster/nodeagent-creds/client_key.pem
    
  2. מוסיפים את ההערה להפעלת Node Agent בקטע של המטא-נתונים של האשכול בקובץ התצורה של האשכול:

    kind: Cluster
    metadata:
      annotations:
        baremetal.cluster.gke.io/enable-node-agent: ""
    
  3. פועלים לפי ההוראות הרגילות ליצירת אשכול.

רשימה מלאה של אפשרויות הפקודה bmctl nodeagent enable מופיעה בקטע nodeagent enable בחומרי העזר של הפקודה bmctl.

עדכון פרטי הכניסה

הפקודה rotate-credentials מחליפה את פרטי הכניסה של סוכן הצומת גם בצמתים וגם בתוך האשכול. זה כולל את היכולת להחליף את רשויות האישורים (CA). הדגל --generate-ca-creds מורה לפקודה ליצור מחדש את רשויות האישורים ולהשתמש ברשויות האישורים החדשות שנוצרו כדי לחתום על האישורים גם של השרת (צמתים) וגם של הלקוח (בקר).

  • כדי להחליף את פרטי הכניסה, ליצור מחדש רשויות אישורים חדשות ולהשתמש בהן, מריצים את הפקודה הבאה:

    bmctl nodeagent rotate-credentials \
        --kubeconfig KUBECONFIG \
        --generate-ca-creds=true \
        --cluster CLUSTER_NAME \
        --namespace CLUSTER_NAMESPACE \
        --ssh-user USERNAME \
        --ssh-key SSH_KEY_PATH
    

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

    • ‫KUBECONFIG: הנתיב של קובץ kubeconfig לאשכול שבו מפעילים את Node Agent.

    • ‫CLUSTER_NAME: שם האשכול שבו רוצים לפרוס את Node Agent.

    • ‫CLUSTER_NAMESPACE: מרחב השמות של האשכול שבו משתמשים כדי למצוא את אשכול היעד ואת פרטי הכניסה לאשכול, ולעדכן את משאב האשכול. ברירת המחדל היא cluster-<CLUSTER-NAME>.

    • ‫USERNAME: שם המשתמש שעבורו מוגדרת גישת SSH לצמתים. כברירת מחדל, SSH מוגדר ל-root, אבל אם הגדרתם משתמש להתחברות, השתמשו בשם המשתמש הזה.

    • ‫SSH_KEY_PATH: הנתיב של קובץ המפתח הפרטי של SSH.

    פלט הפקודה דומה לדוגמה הבאה:

    Please check the logs at bmctl-workspace/demo-cluster/log/nodeagent_rotate_credentials-20250819-184216/nodeagent_rotate_credentials.log
    [2025-08-19 18:42:16+0000] INFO: Executing 'nodeagent rotate-credentials'...
    [2025-08-19 18:42:18+0000] ------------------- Credentials Rotation  -------------------
    [2025-08-19 18:42:18+0000]   Target Cluster:            demo-cluster
    [2025-08-19 18:42:18+0000]   SSH User:                  root
    [2025-08-19 18:42:18+0000]   SSH Key:                   rootSSH
    [2025-08-19 18:42:18+0000]   Concurrency:               25
    [2025-08-19 18:42:18+0000]   Generate Credentials:      true
    [2025-08-19 18:42:18+0000]   Deploy Credentials:        true
    [2025-08-19 18:42:18+0000]   Server Cert Validity Days: 1825
    [2025-08-19 18:42:18+0000]   Verify SSH Host Keys:      true
    [2025-08-19 18:42:18+0000]   Target Nodes Source:       cluster CR
    [2025-08-19 18:42:18+0000]   Nodes Port:                9192
    [2025-08-19 18:42:18+0000]   Target Nodes (3):          10.200.0.2, 10.200.0.3, 10.200.0.4
    [2025-08-19 18:42:18+0000] ---------------------------------------------------------
    Proceed with credentials rotation? [y/N]: [2025-08-19 18:42:18+0000] INFO: Non-interactive mode enabled; automatically confirming.
    [2025-08-19 18:42:18+0000] INFO: Starting generate credentials (CAs and client credentials) phase...
    [2025-08-19 18:42:18+0000] Generating credentials for the cluster: demo-cluster, 2025-08-19T18:42:18Z
    [2025-08-19 18:42:18+0000] ------------ Credentials Options ------------
    [2025-08-19 18:42:18+0000] Cluster Name:           demo-cluster
    [2025-08-19 18:42:18+0000] Key Algorithm:          rsa
    [2025-08-19 18:42:18+0000] Key Length:             4096
    [2025-08-19 18:42:18+0000] CA Validity (days):     3650
    [2025-08-19 18:42:18+0000] Client Validity (days): 1825
    [2025-08-19 18:42:18+0000] Server CA CN:           Node Agent Server CA
    [2025-08-19 18:42:18+0000] Client CA CN:           Node Agent Client CA
    [2025-08-19 18:42:18+0000] Creds path:             bmctl-workspace/demo-cluster/nodeagent-creds
    [2025-08-19 18:42:18+0000] --------------------------------------------
    [2025-08-19 18:42:18+0000] Generating credentials... OK
    Credential directory 'bmctl-workspace/demo-cluster/nodeagent-creds' already exists. Do you want to back it up and continue? (y/N): y
    [2025-08-19 18:42:27+0000] INFO: User confirmed.
    [2025-08-19 18:42:27+0000] Credentials backup to bmctl-workspace/demo-cluster/nodeagent-creds_backup_20250819_184227
    [2025-08-19 18:42:27+0000] Certificates have been created and stored in bmctl-workspace/demo-cluster/nodeagent-creds
    [2025-08-19 18:42:27+0000] INFO: Attempting to load CAs from: bmctl-workspace/demo-cluster/nodeagent-creds
    [2025-08-19 18:42:27+0000] INFO: Server CA loaded successfully. Subject: CN=Node Agent Server CA,O=gcd-SO,L=Sunnyvale,ST=California,C=US, Key Type: *rsa.PrivateKey
    [2025-08-19 18:42:27+0000] INFO: Client CA loaded successfully. Subject: CN=Node Agent Client CA,O=gcd-SO,L=Sunnyvale,ST=California,C=US, Key Type: *rsa.PrivateKey
    [2025-08-19 18:42:27+0000] ===============================================
    [2025-08-19 18:42:34+0000] INFO: All host deployments finished.
    [2025-08-19 18:42:34+0000] INFO: --- Deployment Phase Completed Successfully ---
    [2025-08-19 18:42:34+0000]
    ===============================================
    --- Deployment Summary ---
      Host: 10.200.0.2, Status: SUCCESS
      Host: 10.200.0.3, Status: SUCCESS
      Host: 10.200.0.4, Status: SUCCESS
    -----------------------------------------------
    Total Nodes Attempted: 3 | SUCCESS: 3 | FAILED: 0
    ===============================================
    

רשימה מלאה של אפשרויות הפקודה bmctl nodeagent rotate-credentials מופיעה בקטע nodeagent rotate-credentials במאמרי העזרה של bmctl.

בדיקת הסטטוס

הפקודה status מספקת מידע על סטטוס ההפעלה של Node Agent בצמתים. אתם יכולים לציין את צומתי היעד ישירות באמצעות הדגל --nodes, באמצעות קובץ תצורה של אשכול באמצעות הדגל --cluster, או על ידי הפניה למשאב המותאם אישית של האשכול.

כשמקבלים צמתים מקובץ תצורה של אשכול או מהדגל --nodes, המערכת מאחזרת את פרטי הכניסה ממערכת הקבצים המקומית. אם מקור הצומת הוא משאב מותאם אישית של אשכול, המערכת מאחזרת את פרטי הכניסה מהאשכול.

סדר העדיפויות הבא קובע את היציאה של Node Agent:

  1. דגל --port
  2. קובץ Kubeconfig
  3. קובץ תצורה של אשכול

אימות הסטטוס של Node Agent

באמצעות הדגל --cluster בלבד, אתם יכולים לבדוק את הסטטוס של Node Agent על סמך מה שצוין בקובץ התצורה של האשכול.

  • כדי לבדוק את הסטטוס של Node Agent על סמך קובץ התצורה של האשכול, משתמשים בפקודה הבאה:

    ./bmctl nodeagent status \
        --cluster CLUSTER_NAME \
        --namespace CLUSTER_NAMESPACE
    

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

    • ‫CLUSTER_NAME: שם האשכול שבודקים.

    • ‫CLUSTER_NAMESPACE: מרחב השמות של האשכול שבו משתמשים כדי למצוא את אשכול היעד ואת פרטי הכניסה לאשכול, ולעדכן את משאב האשכול. ברירת המחדל היא cluster-<CLUSTER-NAME>.

    פלט הפקודה דומה לדוגמה הבאה:

    Please check the logs at bmctl-workspace/demo-cluster/log/nodeagent_status-20250819-205707/nodeagent_status.log
    [2025-08-19 20:57:07+0000] Check Node Agent for cluster: demo-cluster
    [2025-08-19 20:57:09+0000] ----------------------------------------------------------
    [2025-08-19 20:57:09+0000] Verifying Node Agent status on all nodes...
    [2025-08-19 20:57:09+0000] Target Nodes Source: cluster YAML
    [2025-08-19 20:57:09+0000] --------------------- Total nodes: 4 ----------------------
    [2025-08-19 20:57:09+0000] node: control-0--893f0567cb79efc-9b9ec55816170dcf.lab.anthos, version: 1.33.0-gke.799, OS: linux, uptime (seconds): 1175
    [2025-08-19 20:57:09+0000] node: control-1--893f0567cb79efc-9b9ec55816170dcf.lab.anthos, version: 1.33.0-gke.799, OS: linux, uptime (seconds): 1174
    [2025-08-19 20:57:09+0000] node: control-2--893f0567cb79efc-9b9ec55816170dcf.lab.anthos, version: 1.33.0-gke.799, OS: linux, uptime (seconds): 1176
    [2025-08-19 20:57:09+0000] node: worker-0--893f0567cb79efc-9b9ec55816170dcf.lab.anthos, version: 1.33.0-gke.799, OS: linux, uptime (seconds): 1179
    [2025-08-19 20:57:09+0000] ----------------------------------------------------------
    [2025-08-19 20:57:09+0000] Verified Node Agent status on all nodes in cluster
    

אימות הסטטוס של Node Agent מהאשכול

בעזרת הדגל --cluster יחד עם הדגל --kubeconfig, אתם יכולים לבדוק את הסטטוס של Node Agent על סמך המשאב בהתאמה אישית של האשכול.

  • כדי לבדוק את הסטטוס של Node Agent על סמך המשאב המותאם אישית של האשכול, משתמשים בפקודה הבאה:

    ./bmctl nodeagent status \
        --cluster CLUSTER_NAME \
        --kubeconfig KUBECONFIG
    

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

    • ‫CLUSTER_NAME: שם האשכול שבו רוצים לפרוס את Node Agent בצמתים.

    • ‫KUBECONFIG: הנתיב של קובץ kubeconfig לאשכול שבו מפעילים את Node Agent.

    פלט הפקודה דומה לדוגמה הבאה:

    Please check the logs at bmctl-workspace/demo-cluster/log/nodeagent_status-20250819-205712/nodeagent_status.log
    [2025-08-19 20:57:12+0000] Check Node Agent for cluster: demo-cluster
    [2025-08-19 20:57:14+0000] ----------------------------------------------------------
    [2025-08-19 20:57:14+0000] Verifying Node Agent status on all nodes...
    [2025-08-19 20:57:14+0000] Target Nodes Source: cluster CR
    [2025-08-19 20:57:14+0000] --------------------- Total nodes: 3 ----------------------
    [2025-08-19 20:57:14+0000] node: control-0--893f0567cb79efc-9b9ec55816170dcf.lab.anthos, version: 1.33.0-gke.799, OS: linux, uptime (seconds): 1180
    [2025-08-19 20:57:14+0000] node: control-1--893f0567cb79efc-9b9ec55816170dcf.lab.anthos, version: 1.33.0-gke.799, OS: linux, uptime (seconds): 1179
    [2025-08-19 20:57:14+0000] node: control-2--893f0567cb79efc-9b9ec55816170dcf.lab.anthos, version: 1.33.0-gke.799, OS: linux, uptime (seconds): 1180
    [2025-08-19 20:57:14+0000] ----------------------------------------------------------
    [2025-08-19 20:57:14+0000] Verified Node Agent status on all nodes in cluster
    

אימות הסטטוס של Node Agent מהצמתים

באמצעות הדגל --cluster יחד עם הדגל --nodes, אתם יכולים לבדוק את הסטטוס של Node Agent בצמתים ספציפיים באשכול.

  • כדי לבדוק את הסטטוס של Node Agent בצמתים ספציפיים, משתמשים בפקודה הבאה:

    ./bmctl nodeagent status \
        --cluster CLUSTER_NAME \
        --nodes NODE_IP_ADDRESS_LIST
    

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

    • ‫CLUSTER_NAME: שם האשכול שבו רוצים לפרוס את Node Agent בצמתים.

    • ‫NODE_IP_ADDRESS_LIST: רשימה מופרדת בפסיקים של כתובות ה-IP של הצמתים שבהם פורסים את Node Agent.

    פלט הפקודה דומה לדוגמה הבאה:

    Please check the logs at bmctl-workspace/demo-cluster/log/nodeagent_status-20250819-210050/nodeagent_status.log
    [2025-08-19 21:00:50+0000] Check Node Agent for cluster: demo-cluster
    [2025-08-19 21:00:53+0000] ----------------------------------------------------------
    [2025-08-19 21:00:53+0000] Verifying Node Agent status on all nodes...
    [2025-08-19 21:00:53+0000] Target Nodes Source: nodes flag
    [2025-08-19 21:00:53+0000] --------------------- Total nodes: 1 ----------------------
    [2025-08-19 21:00:53+0000] node: control-0--893f0567cb79efc-9b9ec55816170dcf.lab.anthos, version: 1.33.0-gke.799, OS: linux, uptime (seconds): 1399
    [2025-08-19 21:00:53+0000] ----------------------------------------------------------
    [2025-08-19 21:00:53+0000] Verified Node Agent status on all nodes in cluster
    

רשימה מלאה של אפשרויות הפקודה bmctl nodeagent status מופיעה בקטע nodeagent status במאמרי העזרה של הפקודה bmctl.

הרשאות משתמש ב-SSH

משתמש שאינו משתמש Root יכול להריץ את הפקודה bmctl nodeagent. לשם כך, למשתמש צריכות להיות הרשאות sudo מלאות ללא סיסמה, או רשימת היתרים מפורשת של sudo ללא סיסמה.

רשימת ההיתרים המפורשת של sudo ללא סיסמה ל-Node Agent כוללת את ההרשאות הבאות:

# Permission to create the necessary folders and set permissions.
/bin/mkdir -p /etc/nodeagentd
/bin/chmod 0755 /etc/nodeagentd
/bin/mkdir -p /usr/local/bin
/bin/chmod 0755 /usr/local/bin
/bin/mkdir -p /etc/systemd/system
/bin/chmod 0755 /etc/systemd/system

# Permission to place the main application executable and link it.
/bin/rm -f /usr/local/bin/nodeagentd-*
/bin/touch /usr/local/bin/nodeagentd-*
/bin/cp -f /home/deployer/.deploy_tmp_*/* /usr/local/bin/nodeagentd-*
/bin/chmod 0755 /usr/local/bin/nodeagentd-*
/bin/rm -f /usr/local/bin/nodeagentd
/bin/ln -s /usr/local/bin/nodeagentd-* /usr/local/bin/nodeagentd

# Permission to place configuration files in /etc/nodeagentd and set permissions.
/bin/rm -f /etc/nodeagentd/*
/bin/touch /etc/nodeagentd/*
/bin/cp -f /home/deployer/.deploy_tmp_*/* /etc/nodeagentd/*
/bin/chmod 0600 /etc/nodeagentd/*
/bin/chmod 0644 /etc/nodeagentd/*

# Permission to place the systemd unit file.
/bin/rm -f /etc/systemd/system/nodeagentd.service
/bin/touch /etc/systemd/system/nodeagentd.service
/bin/cp -f /home/deployer/.deploy_tmp_*/* /etc/systemd/system/nodeagentd.service
/bin/chmod 0644 /etc/systemd/system/nodeagentd.service

# Permission to interact with systemd service.
/bin/systemctl daemon-reload
/bin/systemctl stop nodeagentd
/bin/systemctl start nodeagentd
/bin/systemctl enable --now nodeagentd

# Permission to remove the temporary files used for the deployment.
/bin/rm -f /home/deployer/.deploy_tmp_*/*

אימות מפתח מארח של SSH

מוודאים שכל הצמתים נוספו לקובץ known_hosts בתחנת העבודה של האדמין. אחרת, משביתים את אימות מפתח המארח במהלך הפריסה (nodeagent deploy) ואת רוטציית פרטי הכניסה (nodeagent rotate-credentials) באמצעות הדגל --enforce-host-key-verify=false.

התאמה אישית של היציאה של Node Agent

אפשר להתאים אישית את היציאה של Node Agent. מציינים את היציאה בהתאמה אישית במהלך הפריסה באמצעות הדגל --port. הפעולה הזו מפיצה את ההגדרה להגדרות של Node Agent בכל צומת. היציאה בהתאמה אישית צריכה להתאים להגדרה בצד הלקוח, כמו שמוסבר בשיטות הבאות.

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

כדי לעדכן אשכול קיים שפועל, משתמשים בדגל --port כדי לציין את היציאה החדשה בהתאמה אישית. ההגדרה הזו מופצת ללקוחות (בקרים).

באשכולות חדשים

כשיוצרים אשכול חדש, מוסיפים את ההערה הבאה להגדרות של האשכול כדי לציין יציאה בהתאמה אישית ל-Node Agent:

kind: Cluster
metadata:
  annotations:
    baremetal.cluster.gke.io/node-agent-port: "10086"

הגדלת נפח האחסון המקומי לגיבויים של Node Agent

כדי ליצור קובץ גיבוי לצומתי Node Agent, צריך שיהיו 12GB של מקום פנוי בספרייה /tmp בצומת האדמין ובכל צומתי היעד. אם אתם לא יכולים לשנות את הגודל של הספרייה /tmp בצומתי היעד, קראו את המאמר שינוי קיבולת האחסון המקומית של צומתי היעד. אם אתם לא יכולים לשנות את הגודל של הספרייה /tmp בצומת האדמין, קראו את המאמר שינוי קיבולת האחסון המקומית של צומת אדמין.

שינוי קיבולת האחסון המקומית של צומתי היעד

אם אי אפשר לשנות את גודל המחיצה /tmp של צומת היעד, אפשר להפנות את התיקייה הזמנית למחיצה עם קיבולת גדולה יותר על ידי שינוי סביבת systemd:

  1. יוצרים קובץ שינוי של systemd ב-/etc/systemd/system/nodeagentd.service.d/override.conf שמכיל את הפרטים הבאים:

    [Service]
    Environment="TMPDIR=/var/tmp"
    
  2. מחילים את ההגדרות ומפעילים מחדש את השירות:

    sudo systemctl daemon-reload
    sudo systemctl restart nodeagentd
    

שינוי הקיבולת של האחסון המקומי בצומת אדמין

אם בתחנת העבודה של האדמין שבה פועל bmctl יש מקום מוגבל למחיצה /tmp, צריך להגדיר את המשתנה TMPDIR באופן מקומי כשמתחילים גיבוי:

  TMPDIR=/var/tmp bmctl backup cluster -c CLUSTER_NAME --kubeconfig KUBECONFIG

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

  • ‫CLUSTER_NAME: שם האשכול שבו רוצים לפרוס את Node Agent בצמתים.
  • ‫KUBECONFIG: הנתיב של קובץ kubeconfig לאשכול שבו מפעילים את Node Agent.

ביצועים

הפריסה וההפעלה מסתיימות תוך פחות מדקה. זמן הריצה של רוטציית פרטי הכניסה דומה לזמן הריצה של פריסה רגילה, או מהיר יותר.