שימוש בקובץ services-config.yaml

כשמשתמשים במנהל השירותים הפשוט של Linux כדי לבצע העברה, Migrate to Containers יוצר קובץ ארטיפקט חדש, services-config.yaml. אפשר להשתמש בקובץ הזה כדי לשלוט באתחול האפליקציה בקונטיינר שנפרס.

לדוגמה, אחרי שמבצעים מיגרציה של מאגר התגים, עורכים את הקובץ services-config.yaml כדי לשלוט באתחול האפליקציה באופן הבא:

  • הסרת אפליקציות מהקובץ
  • הוספת אפליקציות לקובץ
  • עריכה של מאפייני האתחול של אפליקציה

קובץ services-config.yaml לדוגמה:

version: v1beta1
env:
  - name: KEY1
    value: VALUE1
  - name: KEY2
    value: VALUE2
applications:
    - name: nginx
      type: forking
      envfile: /path/to/file.txt
      env:
        - name: KEY3
          value: VALUE3
      start:
      - cmd: /usr/sbin/nginx -g 'daemon on; master_process on;'
      pidfile: /run/nginx.pid
    - name: ssh@
      type: simple
      start:
      - cmd: /usr/sbin/sshd -i $SSHD_OPTS
        ignore_errors: true
      runtime_directories:
        mode: "0755"
        paths:
          - /run/sshd
        preserve: true
    - name: suitecrm
      type: exec
      start:
      - cmd: /etc/init.d/suitecrm start
      status:
        cmd: /etc/init.d/suitecrm status
    - name: phpsessionclean
      type: oneshot
      start:
        - cmd: /usr/lib/php/sessionclean
      timers:
        - name: phpsessionclean.timer
          on_calendar:
            - cron: 09,39 * * * *
    - name: mariadb
      type: notify
      prestart:
        - cmd: /usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld
        - cmd: /bin/sh -c "systemctl unset-environment _WSREP_START_POSITION"
        - cmd: /bin/sh -c "[ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1"
      start:
      - cmd: /usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION
      poststart:
        - cmd: /bin/sh -c "systemctl unset-environment _WSREP_START_POSITION"
        - cmd: /etc/mysql/debian-start
      user: mysql
      group: mysql

בקובץ הזה:

  • env: מציין משתני סביבה ברמה הגלובלית או ברמת האפליקציה. אם מציינים את אותו משתנה סביבה ברמה הגלובלית וברמת האפליקציה, משתנה הסביבה ברמת האפליקציה מקבל קדימות.

    • כדי להגדיר משתני סביבה ברמה הגלובלית, משתמשים ב-env כדי לציין צמד name/value. השמות יכולים להכיל אותיות ASCII, ספרות וקו תחתון. השמות לא יכולים להתחיל בספרה.

    • כדי להגדיר משתני סביבה ברמת האפליקציה, משתמשים ב-env כדי לציין צמד name/value. לחלופין, אפשר להשתמש ב-envfile כדי לציין את הנתיב לקובץ טקסט שמכיל שורות בפורמט:

      # Comments allowed
      KEY=VALUE

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

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

    • name: מציין את שם האפליקציה.

    • type מציין את סוג האפליקציה, כאחת מהאפשרויות הבאות:

      • forking: מריצים את הקובץ שצוין על ידי start בלי פיצול. קובץ ההפעלה של השירות אמור להתפצל. מומלץ להגדיר גם את pidfile.

      • exec: יצירת Fork כדי להפעיל את השירות. השירות נחשב כמופעל אחרי שמתבצעת קריאה ל-exec בקובץ ההפעלה.

      • simple – זהה ל-exec. simple שירות מתנהג באופן שונה מההגדרה שלו systemd כי הוא מחכה ל-fork ול-exec במקום ל-fork.

      • notify: זהה ל-exec, אלא שב-systemd משתנה הסביבה NOTIFY_SOCKET לא מוגדר, ולכן קריאות ל-sd_notify systemd לא פועלות.

      • oneshot: השירות נחשב כמופעל אחרי שקוראים ל-exec בקובץ ההפעלה. הסטטוס הוא error אם השירות יוצא עם קוד שגיאה שלא שווה ל-0.

    • פקודות prestart,‏ start,‏ poststart ו-status לשירות.

      כדי להפעיל שירות, Migrate to Containers מריץ את הפקודות prestart (אם יש כאלה), ואז את הפקודה start, ולבסוף את הפקודות poststart (אם יש כאלה). אם פקודה נכשלת ולא הגדרתם את הפקודה להשתמש ב-ignore_errors, השירות ייעצר ותוצג הודעת שגיאה בסטטוס של השירות.

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

        command-type: 
          cmd: command
          shell: /bin/sh
          ignore_errors: false
          ignore_environment_variables: false

      כאשר:

      • command-type: מציין את סוג הפקודה כאחת מהאפשרויות הבאות: prestart,‏ start,‏ poststart או status.

        ב-start, אפשר להשתמש בפקודה אחת, אלא אם type הוא oneshot.

        אם type=forking או type=oneshot, הפקודות poststart מופעלות אחרי שהפקודה start מתפצלת. אחרת, הן מופעלות מיד אחרי הפעלת הפקודה start.

      • command: מציין את הפקודה להרצה כדי לבצע את הפעולה.

      • shell (אופציונלי): כברירת מחדל, כל הפקודות מבוצעות במעטפת /bin/sh. אפשר גם להגדיר את shell לערך /bin/bash.

      • ignore_errors (אופציונלי): אם מציינים true, קוד יציאה מהפקודה שנחשב בדרך כלל ככשל מתועד, אבל הפקודה נחשבת כהצלחה. ערך ברירת המחדל הוא false.

        כברירת מחדל, Migrate to Containers מגדיר את ignore_errors ל-true לכל קובץ הפעלה systemd שכולל את הקידומת '-'.

      • ignore_environment_variables (אופציונלי): אם true, לא מוחלפת החלפת משתנה סביבה. ערך ברירת המחדל הוא false.

        כברירת מחדל, הכלי Migrate to Containers מגדיר את ignore_environment_variables ל-true לכל קובץ הפעלה systemd שכולל את הקידומת ':'.

    • pidfile: מציין את קובץ ה-pid שמכיל את מזהה התהליך של השירות, שמשמש לבדיקה אם התהליך עדיין פועל.

    • chdir: מציין את ספריית העבודה של התהליך שהופעל.

    • user: מציין את שם המשתמש שדרכו מתחיל התהליך החדש.

    • group: מציין את שם הקבוצה שמתחתיה מתחיל התהליך החדש.

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

      version: v1beta1
      env: []
      Applications:
      - name: service_name
        type: service_type
        start:
          - cmd: service_exec_command
        timers:
          - name: timer_name
            on_calendar:
              - cron: realtime_time
            on_startup:
              - duration: monotonic_time
            on_service_start:
              - duration: monotonic_time
            on_service_stop:
              - duration: monotonic_time
      
      • name: מציין את השם של הטיימר.

      • on_calendar: מציין את רשימת האירועים ביומן של הטיימר.

        • cron: שעה שצוינה בפורמט cron. לדוגמה:

          cron: 0 0 * * *
          cron: @daily
          
      • on_startup: ציון רשימה של משכי זמן (ביחס למועד הפריסה של הקונטיינר).

        • duration: זמן שצוין בפורמט משך. לדוגמה:
        duration: 30m
        duration: 1sec
        
      • on_service_start: מציין רשימה של משכי זמן, ביחס למועד שבו הסטטוס של האפליקציה משתנה ל'פעיל'.

        • duration: זמן שצוין בפורמט משך.
      • on_service_stop: מציין רשימה של משכי זמן, ביחס למועד שבו הסטטוס של האפליקציה משתנה ל'לא פעיל'.

        • duration: זמן שצוין בפורמט משך.
    • משתמשים במאפיינים הבאים כדי לציין paths לספריות שנוצרו לפני הפעלת השירות:

      • runtime_directories: מציין את רשימת paths לספריות שנוצרו ב-/run/.

      • state_directories: מציין את רשימת paths לספריות שנוצרו ב-/var/lib/.

      • cache_directories: מציין את רשימת paths לספריות שנוצרו ב-/var/cache/.

      • logs_directories: מציין את רשימת paths לספריות שנוצרו ב-/var/log/.

      • configuration_directories: מציין את רשימת paths לספריות שנוצרו ב-/etc/.

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

      • mode: מציין את מצב הקובץ. ברירת המחדל היא 0755, שמתאימה לגישת קריאה והרצה לכולם, ולגישת כתיבה לבעלים.
      • preserve: אם false המדריך מנוקה כשהשירות מופסק. ערך ברירת המחדל הוא true.

הוספה או הסרה של שירות לקובץ services.yaml

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

  • name
  • type
  • start

מידע נוסף על השדות שחובה למלא ועל השדות האופציונליים של שירות מסוים מופיע בהגדרה של services.yaml למעלה.

הוספת שירות

כדי להוסיף שירות לקובץ services.yaml:

  1. פותחים את קובץ services.yaml בכלי לעריכת טקסט כדי לבצע בו שינויים.

  2. ב-services.yaml, עוברים למאפיין applications:

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    
  3. מוסיפים את השירות הרצוי בשורה שמתחת למאפיין applications, מתחילים בשדה name ואז מוסיפים את שאר השדות הנדרשים והאופציונליים שמתאימים לאפליקציה:

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    - name:
      type:
      start:
        - cmd:
      ...
    

    אם בקובץ services.yaml כבר יש הגדרות של שירותים תחת המאפיין applications, אפשר להוסיף שירות חדש החל מהשדה name בשורה שמתחת לרשומה האחרונה של השירות הקודם:

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    - name:
      type:
      start:
    - name:
      type:
      start:
        ...
    
  4. שומרים את קובץ ה-services.yaml.

הסרת שירות

כדי להסיר שירות מקובץ services.yaml:

  1. פותחים את קובץ services.yaml בכלי לעריכת טקסט כדי לבצע בו שינויים.

  2. ב-services.yaml, עוברים למאפיין applications:

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    ...
    
  3. מסירים את השירות הרצוי, מתחילים בשדה name ואז ממשיכים לשאר השדות שחובה למלא ולשדות האופציונליים שרלוונטיים לאפליקציה. לדוגמה:

    לפני שהשירות הוסר:

    version: v1beta1
    env:
    - name: KEY1
      ...
    applications:
    - name:
      type:
      start:
        - cmd:
    - name:
      ...
    
    

    אחרי שהשירות יוסר:

    version: v1beta1
    env:
    - name: KEY1
      ...
    applications:
    - name:
      ...
    
  4. שומרים את קובץ ה-services.yaml.