רשימת חסימה של שירותים בהתאמה אישית

כברירת מחדל, הכלי Migrate to Containers משבית שירותים לא נחוצים במכונה וירטואלית כשמעבירים אותה לקונטיינר. לפעמים השירותים האלה גורמים לבעיות במאגר התגים שהועבר, או שלא צריך אותם בהקשר של מאגר תגים.

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

הגדרת רשימת החסימות

מגדירים את רשימת החסימה המותאמת אישית בקובץ ‎ .yaml, בפורמט הבא:

service_list:
  - name: <var>group-name-1</var>
    services:
      - <var>service-name</var>
  - name: <var>group-name-2</var>
    services:
      - <var>service-name</var>
      - <var>ervice-name</var>

כאשר:

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

לדוגמה, מגדירים את הקובץ my-blocklist.yaml כך:

service_list:
  - name: lvm-related
    services:
      - lvm2-lvmetad
  - name: hardware-related
    services:
      - microcode
      - microcode.ctl

החלת רשימת חסימה בהתאמה אישית

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

  • יצירת Kubernetes configmap שמכיל את רשימת החסימה והוספתו למפרט הפריסה של הקונטיינר.

    בשיטה הזו אתם יכולים להוסיף את רשימת החסימה בלי לבנות מחדש את מאגר התגים. עם זאת, צריך ליצור מחדש את configmap בכל אשכול שמשמש לאירוח מאגר התגים.

  • עורכים את קובץ Dockerfile של הקונטיינר ויוצרים מחדש את קובץ האימג' של הקונטיינר.

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

שימוש ב-configmap

כדי ליצור רשימת חסימה באמצעות configmap:

  1. מעבירים את ה-VM של המקור לקונטיינר.

  2. יוצרים קובץ blocklist .yaml כמו שמוצג למעלה, שבו מפורט השירות שרוצים להשבית. בדוגמה הזו, נותנים לקובץ את השם my-blocklist.yaml.

  3. יוצרים configmap מקובץ ה-YAML של רשימת החסימה:

    kubectl create configmap configmap-name --from-file=path-to-yaml

    בדוגמה הזו, ה-configmap נקרא blocklistcm:

    kubectl create configmap blocklistcm --from-file=./my-blocklist.yaml
  4. צפייה ב-configmap:

    kubectl describe configmaps
  5. עורכים את deployment_spec.yaml שנוצר כשמעבירים את מאגר התגים:

    vi deployment_spec.yaml
  6. במפרט הפריסה, מוסיפים את הפרטים הבאים:

    1. מוסיפים נפח חדש ל-configmap בקטע volumes:

      volumes:
      - configMap: 
           name: blocklistcm # Name of the config map you created above. 
         name: blocklistvol # Name of the configmap volume.
      
    2. מוסיפים את ה-configmap כנפח:

      spec:
        containers: 
          volumeMounts: 
          - mountPath: /etc/bl # Mount path for the configmap volume. 
            name: blocklistvol # Name of the configmap volume. 
      
    3. מוסיפים משתנה סביבה חדש בשם HC_CUSTOM_SERVICE_BLOCKLIST ומציינים את הנתיב לקובץ ה-yaml של רשימת החסימה. שם משתנה הסביבה צריך להיות HC_CUSTOM_SERVICE_BLOCKLIST:

      containers:
       - image: container-image-location
         env:
         - name: HC_CUSTOM_SERVICE_BLOCKLIST
           value: "/etc/bl/my-blocklist.yaml"
      

      הנתיב שמוגדר על ידי הערך הוא שרשור של mountPath של ה-configmap ושם קובץ ה-yaml של רשימת החסימה, my-blocklist.yaml.

    4. שומרים את הקובץ.

  7. פורסים את הקונטיינר:

    kubectl apply -f deployment_spec.yaml
  8. אחרי פריסת מאגר התגים, אפשר לבדוק אותו כדי לוודא שהשירותים לא פועלים. לדוגמה:

    # Get pod name.
    $ kubectl get pod
    # Connect to pod.
    $ kubectl exec -it POD_NAME -- /bin/bash
    # View running services. This step is OS dependent. For example:
    $ service --status-all```
    

עריכת קובץ Dockerfile

בקטע הזה מוסבר איך ליצור רשימת חסימה בהתאמה אישית על ידי עריכת קובץ ה-Dockerfile שנוצר במהלך ההעברה.

  1. מעבירים את ה-VM של המקור לקונטיינר.

  2. פותחים את קובץ ה-Dockerfile בכלי לעריכה.

  3. מוסיפים את הפקודה COPY הבאה כדי להוסיף את קובץ ה-YAML של רשימת החסימה למערכת הקבצים של הקונטיינר:

    COPY src dest 

    לדוגמה:

    COPY my-blocklist.yaml /etc/mybl/my-blocklist.yaml

    נתיב היעד יכול להיות כל נתיב בתוך מאגר התגים.

  4. מוסיפים משתנה סביבה חדש בשם HC_CUSTOM_SERVICE_BLOCKLIST ומציינים את הנתיב לקובץ ה-YAML של רשימת החסימה, על סמך יעד הקובץ שצוין בפקודה COPY. שם משתנה הסביבה צריך להיות HC_CUSTOM_SERVICE_BLOCKLIST:

    ENV HC_CUSTOM_SERVICE_BLOCKLIST /file-path

    לדוגמה:

    ENV HC_CUSTOM_SERVICE_BLOCKLIST /etc/mybl/my-blocklist.yaml
  5. מעדכנים את קובץ האימג' של קונטיינר.

    אופן העדכון של קובץ אימג' של קונטיינר תלוי בסביבת ה-build שלכם. אפשר להשתמש:

    1. gcloud כדי ליצור את קובץ האימג' ולהעלות אותו ל-Container Registry כמו שמתואר במאמר מדריך למתחילים: יצירת גרסת build.

    2. docker build כמו שמתואר במאמר Build and run your image .

  6. אחרי שיוצרים את התמונה החדשה, פותחים את קובץ deployment_spec.yaml בעורך כדי לעדכן את מיקום התמונה:

    spec:
      containers:
      - image: new-image-location

    לדוגמה, new-image-location יכול להיות gcr.io/my-project/my-new-image:v1.0 אם השתמשתם ב-gcloud כדי ליצור את קובץ האימג' והעליתם אותו ל-Container Registry.

  7. פורסים את הקונטיינר:

    kubectl apply -f deployment_spec.yaml
  8. אחרי פריסת מאגר התגים, אפשר לבדוק אותו כדי לוודא שהשירותים לא פועלים. לדוגמה:

    # Get pod name.
    $ kubectl get pod
    # Connect to pod.
    $ kubectl exec -it POD_NAME -- /bin/bash
    # View running services. This step is OS dependent. For example:
    $ service --status-all