Celery: [K8S] celery рдмреАрдЯ рдФрд░ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП linyProbe рдФрд░ readinessProbe

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдЬреВрди 2017  ┬╖  31рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: celery/celery

рдирдорд╕реНрддреЗ,

рдореИрдВ рдЕрдкрдиреЗ python рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Kubernetes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, Kubernetes рдпрд╣рд╛рдВ рдПрдХ linyProbe рдФрд░ readinessProbe рдкреНрд░рджрд╛рди рдХрд░рддрд╛

рдЕрдЧрд░ рдореЗрд░реА рдЕрдЬрд╡рд╛рдЗрди рдмреАрдЯ рдпрд╛ рдЕрдЬрд╡рд╛рдЗрди рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЬреАрд╡рд┐рдд рдФрд░ рд╕рд╣реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ рддреЛ рдореИрдВ рдХреИрд╕реЗ рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
PID рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд░реЛрдз рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдкрдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рд┐рдо рдзрдиреНрдпрд╡рд╛рдж,

рд╕рд╛рджрд░,

Deployment Question Needs Verification тЬШ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

celery inspect ping рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП bash рд╣реИ:

        livenessProbe:
          exec:
            # bash is needed to replace the environment variable
            command: [
              "bash",
              "-c",
              "celery inspect ping -A apps -d celery@$HOSTNAME"
            ]
          initialDelaySeconds: 30  # startup takes some time
          periodSeconds: 60  # default is quite often and celery uses a lot cpu/ram then.
          timeoutSeconds: 10  # default is too low

рд╕рднреА 31 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрдЬрд╡рд╛рдЗрди рдореЗрдВ рдПрдХ рдирд┐рдЧрд░рд╛рдиреА рдПрдкреАрдЖрдИ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдлрд▓реА рдХреЛ рд▓рд╛рдЗрд╡ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрдЧрд░ рдЕрдЬрд╡рд╛рдЗрди рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдПрдХ рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди рднреЗрдЬрддрд╛ рд╣реИред
рдпрджрд┐ рд╢реНрд░рдорд┐рдХреЛрдВ рдиреЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛-рдСрдирд▓рд╛рдЗрди рдХрд╛рд░реНрдпрдХреНрд░рдо рднреЗрдЬрд╛ рд╣реИ, рддреЛ рдПрдХ рдлрд▓реА рдХреЛ рддреИрдпрд╛рд░ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдПрдВ рдпрд╛ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдЕрд▓рдЧ рд╕рдорд╕реНрдпрд╛ рдЦреЛрд▓реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛?

readinessProbe:
          exec:
            command:
            - "/bin/sh"
            - "-c"
            - "celery -A path.to.app status | grep -o ': OK'"
          initialDelaySeconds: 30
          periodSeconds: 10

@ 7wonders рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЕрдЬрд╡рд╛рдЗрди рдиреЛрдб рдирд╛рдо рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрджрд┐ рдХреЛрдИ рднреА рдЕрдЬрд╡рд╛рдЗрди рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рддрддреНрдкрд░рддрд╛рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧреАред

@thedrow рд╣рдореНрдо, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдлрд▓ рд╣реЛрдЧрд╛ рднрд▓реЗ рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдиреЛрдб рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рдПрдХ рдареАрдХ рд╣реИ рдЬреЛ рдПрдХ рдорд╣рд╛рди рдкрд░рд┐рдгрд╛рдо рднреА рдирд╣реАрдВ рд╣реИред

рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ

/bin/sh -c 'exec celery -A path.to.app inspect ping -d celery@$HOSTNAME' рддрддреНрдкрд░рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рд╕рд┐рд░реНрдл рдПрдХ рдиреЛрдб рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИред

рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдХрд┐ рдХреБрдЫ рдРрдкреНрд╕ рдореЗрдВ, рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдлреБрд▓ рд╕реАрдкреАрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕реЗрдХрдВрдб рдХрд╛ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбрд┐рдлреЙрд▓реНрдЯреНрд╕ рдЗрд╕реЗ рд╣рд░ 10 рд╕реЗрдХрдВрдб рдореЗрдВ рдЪрд▓рд╛рдирд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рдЙрдЪреНрдЪ рдЕрд╡рдзрд┐ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 300 рдкрд░ рд╕реЗрдЯ рд╣реИ)ред

@redbaron рдиреЗ рд╡рд╣ рдХрдорд╛рдВрдб рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛? рдпрджрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рддреЛ рд▓реАрдирд┐рдВрдЧ рдФрд░ рддрддреНрдкрд░рддрд╛ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреНрдпрд╛ рд╣реИрдВ?

рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдпрд╣ рддрддреНрдкрд░рддрд╛ рдЬрд╛рдВрдЪ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдВрддреЛрд╖рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдирд┐рд░реАрдХреНрд╖рдг рд╣рдорд╛рд░реЗ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рдХреЛрдИ рднрд╛рд░ рдирд╣реАрдВ рдХреЗ рд╕рд╛рде рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рдХ рдврдВрдЧ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рд░реВрдк рдЪрд▓рд╛рддреЗ рд╣реИрдВ:

рдЕрдЬрд╡рд╛рдЗрди ping -b " redis: // archii-redis-master : 6379" -d рдЕрдЬрд╡рд╛рдЗрди @ рдЕрд░рдЪреА-рдХрд╛рд░реНрдп-рдХреНрд░реЙрд▓-рдПрдХреАрдХрд░рдг-7d96d86b9d-jwtb7

рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдкрд┐рдВрдЧ рд╕рдордп (10 рд╕реЗрдХрдВрдб) рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░реЗ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реАрдкреАрдпреВ рдЕрдЬрд╡рд╛рдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

~ рдореИрдВ рейреж рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ: sh -c celery -A path.to.app status | grep "${HOSTNAME}:.*OK" ~
рдореИрдВ 30 рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ: sh -c celery -A path.to.app inspect ping --destination celery@${HOSTNAME}
рдХрд┐рд╕реА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рдореИрдВ 100 рд╕реЗ рдЕрдзрд┐рдХ рд╢реНрд░рдорд┐рдХреЛрдВ рдХрд╛ рдмреЗрдбрд╝рд╛ рдЪрд▓рд╛рддрд╛ рд╣реВрдВред

рддрддреНрдкрд░рддрд╛ рдЬрд╛рдВрдЪ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЕрдЬрд╡рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрднреА рднреА рдПрдХ рд╕реЗрд╡рд╛ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл minReadySeconds: 10 рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯреНрд╕ рдореЗрдВ рд╡рд░реНрдХрд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЛ рджреЗрд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реЗрд▓реЗрд░реА рдХреЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдордп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рд▓реЙрдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рд╕реЗрдЯ рдХрд░реЗрдВред

рдпрджрд┐ рд╡реЗ рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рднреА рддрддреНрдкрд░рддрд╛ рдЬрд╛рдВрдЪ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧреА рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЬрдм рдЖрдк рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рддреИрдирд╛рддреА рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреА рддреИрдирд╛рддреА рд╕рдлрд▓ рд░рд╣реА, рддреЛ рдЖрдк рдЖрдорддреМрд░ рдкрд░ kubectl rollout status deployment рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рддрддреНрдкрд░рддрд╛ рдХреЗ рдмрд┐рдирд╛, рд╣рдордиреЗ рдЦрд░рд╛рдм рдХреЛрдб рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЕрдЬрд╡рд╛рдЗрди рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ рдФрд░ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдерд╛ред

рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдерд╛:

readinessProbe:
  exec:
    command:
      [
        "/usr/local/bin/python",
        "-c",
        "\"import os;from celery.task.control import inspect;from <APP> import celery_app;exit(0 if os.environ['HOSTNAME'] in ','.join(inspect(app=celery_app).stats().keys()) else 1)\""
      ]

рджреВрд╕рд░реЛрдВ рдХреЛ рдХрд╛рдо рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ

рд╕рд╛рднрд╛рд░ @yardensachs!
рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрдИ рдмрд╛рд░ рдмрд┐рддрд╛рдПрдВ рдЬреЛ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЧрд▓рдд рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ
celery inspect ping рдХрдорд╛рдВрдб рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ (0) рдпрд╛ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ

celery inspect ping рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП bash рд╣реИ:

        livenessProbe:
          exec:
            # bash is needed to replace the environment variable
            command: [
              "bash",
              "-c",
              "celery inspect ping -A apps -d celery@$HOSTNAME"
            ]
          initialDelaySeconds: 30  # startup takes some time
          periodSeconds: 60  # default is quite often and celery uses a lot cpu/ram then.
          timeoutSeconds: 10  # default is too low

рдЬрд╛рдирдХрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛

рд╣рдордиреЗ рдЕрдкрдиреА рд▓реАрдирд┐рдВрдЧ рдЬрд╛рдВрдЪ рд╕реЗ рдЕрдЬрд╡рд╛рдЗрди рдХреА рдкрдкрдбрд╝реА рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рднрд╛рд░реА рднрд╛рд░ рдХреЗ рддрд╣рдд, рдкрд┐рдВрдЧ рдмрд╕ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдорд┐рдирдЯреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдЯрдХ рдЬрд╛рдПрдЧрд╛, рднрд▓реЗ рд╣реА рдиреМрдХрд░рд┐рдпрд╛рдВ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реА рдереАрдВ рдФрд░ рдХреЛрдИ рдмреИрдХрд▓реЙрдЧ рдирд╣реАрдВ рдерд╛ред рдореБрдЭреЗ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдИрд╡реЗрдВрдЯрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдирд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рджреЗрдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦ рд░рд╣реЗ рд╣реИрдВред

@WillPlatnick рдпрд╣ 5.0 рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╕реЗрд▓реЗрд░реА

рдореИрдВ inspect ping spawning рджреЛрд╖рдкреВрд░реНрдг / рдЬрд╝реЛрдВрдмреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рдкрд░реЗрд╢рд╛рди рд╣реВрдВ:

root      2296  0.0  0.0      0     0 ?        Z    16:04   0:00 [python] <defunct>
root      2323  0.0  0.0      0     0 ?        Z    16:05   0:00 [python] <defunct>
...

рдХрд┐рд╕реА рдФрд░ рд╕реЗ рдпрд╣ рдореБрдарднреЗрдбрд╝? рдХрд┐рд╕реА рдПрдХрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП --pool рддрд░реНрдХ рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдореИрдВ рдкреВрдЫ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк celery inspect ping @WillPlatnick рдХреЗ рдмрдЬрд╛рдп рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рд╣рдордиреЗ рднрд╛рд░реА рд▓реЛрдб рдХреЗ рддрд╣рдд рдЬрд╛рдВрдЪ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИред

@mcyprian рд╣рдордиреЗ

рд╣рдо Redis рдмреНрд░реЛрдХрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди CPU рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛?
рд╣рдо рдЙрд╕ рдХрдВрдЯреЗрдирд░ рдкрд░ "debug_task" рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рднреА рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рдереЗ, рдЬрд┐рд╕реЗ рд╣рдо рдХрдВрдЯреЗрдирд░ рдХреЗ рдирд╛рдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░реИрдмрд┐рдЯрдПрдордХреНрдпреВ рдореЗрдВ рдХрдИ рдкреБрд░рд╛рдиреА рдХрддрд╛рд░реЗрдВ рд╣реИрдВ

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

sh -c celery -A path.to.app status | grep "${HOSTNAME}:.*OK"

рдЬреИрд╕рд╛ рдХрд┐ https://github.com/celery/celery/issues/4079#issuecomment -437415370 рдкрд░ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЦрд░рдЧреЛрд╢рдмреАрдо рдкрд░ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдЖрдПрдЧреА, https://github.com/celery/celery/issues-4355#issuecomment - рджреЗрдЦреЗрдВ 578786369 рд╣реИ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдирд┐рд░реАрдХреНрд╖рдг рдкрд┐рдВрдЧ рдХреЗ рд╕реАрдкреАрдпреВ рдЙрдкрдпреЛрдЧ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред

celery -b amqp: // рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: рдкрд╛рд╕ @ rabbitmq : 5672 / vhost рдкрд┐рдВрдЧ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВ

рдЕрдЬрд╡рд╛рдЗрди рдХреЛ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рдирд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред
рдХреЛрдИ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдирд┐рд░реАрдХреНрд╖рдг рдкрд┐рдВрдЧ рдХреЗ рд╕реАрдкреАрдпреВ рдЙрдкрдпреЛрдЧ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред

celery -b amqp: // рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: рдкрд╛рд╕ @ rabbitmq : 5672 / vhost рдкрд┐рдВрдЧ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВ

рдЕрдЬрд╡рд╛рдЗрди рдХреЛ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рдирд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред
рдХреЛрдИ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛! рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЛрдб рдХреЗ рд╕рд╛рде рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИред
рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рднреА + рдЕрдЬрд╡рд╛рдЗрди рдЖрдпрд╛рдд рд╢реБрд░реВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдЕрдЬрдЧрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╢рд╛рд▓ рдУрд╡рд░рд╣реЗрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЕрднреА рднреА рдПрдХ рдЙрдЪреНрдЪ рдЕрд╡рдзрд┐ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рдирдорд╕реНрддреЗ,
рдЕрдЬрд╡рд╛рдЗрди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдкрд┐рдВрдЧ -A app.tasks -d рдЕрдЬрд╡рд╛рдЗрди @ $ HOSTNAME рдореБрдЭреЗ "рддреНрд░реБрдЯрд┐: рдкреНрд░рд╕рд╛рд░рдг рдкрд░рд┐рд╡рд╣рди рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ" sqs 'ред
рдореИрдВ SQS рдХреЛ рдмреНрд░реЛрдХрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ SQS рдХреЗ рд╕рд╛рде 'рдирд┐рд░реАрдХреНрд╖рдг' / 'рд╕реНрдЯреЗрдЯрд╕' рдХрдорд╛рдВрдб рдирд╣реАрдВ рд╣реЛрдЧрд╛?

рд╣рдордиреЗ рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ рдкреИрдорд╛рдиреЗ рдкрд░, рд╕рднреА рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рд╕реБрд╡рд┐рдзрд╛рдПрдБ kombu.pidbox рдХреБрдВрдЬреА рдкрд░ рдХрдорд╛рдВрдб рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╕реАрдкреАрдпреВ рдореЗрдВ рд╕реНрдкрд╛рдЗрдХ рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Redis рдЖрд╡реГрддреНрддрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣реА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкрд┐рдВрдЧ, рдпрд╛ рд╕реНрдерд┐рддрд┐ рдпрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╣реИрдВ рд╕рднреА рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЙрддреНрдкрд╛рджрди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдорд░реНрдкрд┐рдд рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдХрддрд╛рд░ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ

рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЕрдиреНрдп рджрд┐рд╢рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ?

рд╣рдо рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ RabbitMQ рдмреЗрджрдЦрд▓реА рдиреАрддрд┐рдпреЛрдВ (рдХрддрд╛рд░реЗрдВ рд╕реНрд╡рддрдГ рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИрдВ) рдХреЗ рд╕рд╛рде рд╕рдорд░реНрдкрд┐рдд рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдХрддрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рд╕рдорд╛рдзрд╛рди рд╕реЗ рдЦреБрд╢ рд╣реИрдВред рдЬреНрдпрд╛рджрд╛рддрд░ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЪреЗрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рдкреЗрд╢ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдЯрдХ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереАред

@bartoszhernas рдорди рдЙрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ? рдХреНрдпрд╛ рдЖрдк рдмреАрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдирдХреА рдХрддрд╛рд░ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕реЗ рдЙрдард╛рддреЗ рд╣реИрдВ?

рдХреЛрдб рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрдпрд╛рд░ рд╣реЛрдЧрд╛ + рдЬрд╛рдВрдЪ рдЕрдиреБрднрд╛рдЧ

рдирдорд╕реНрддреЗ, рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ, рдореИрдВ POD_NAME рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрддрд╛рд░ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЗрд╡рдЪреЗрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ:

        livenessProbe:
          initialDelaySeconds: 120
          periodSeconds: 70
          failureThreshold: 1
          exec:
            command:
            - bash 
            - "-c" 
            - |
              python celery_liveness_probe.py $LIVENESS_QUEUE_NAME
        env:
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name

        - name: LIVENESS_QUEUE_NAME
          value: queue-$(MY_POD_NAME)

(рдЖрдкрдХреЛ рдмреИрд╢ -c рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдИрдПрдирд╡реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЗрд╕реЗ рд╕реАрдзреЗ рдХрдорд╛рдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ)

рддрдм celery_liveness_probe.py рд╕рд┐рд░реНрдл Django рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рд╕реЗрд▓реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рдФрд░ POD рдХреА рдХрддрд╛рд░ рдореЗрдВ рдХрд╛рд░реНрдп рд╢реЗрдбреНрдпреВрд▓ рдХрд░ рд░рд╣рд╛ рд╣реЛ

# encoding: utf-8
from __future__ import absolute_import, unicode_literals

import os
import sys

if __name__ == "__main__":
    import django

    sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..'))
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ahoy.archive.settings")
    django.setup()
    from ahoy.archive.apps.eventbus.service import eventbus_service

    exit(0 if eventbus_service.health_check(sys.argv[1] if sys.argv and len(sys.argv) > 1 else None) else 1)

рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдлрд╝рдВрдХреНрд╢рди рдХрд╛рд░реНрдп рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ

    def health_check(self, queue_name: Optional[str] = None) -> bool:
        event = self.celery.send_task(
            AhoyEventBusTaskName.LIVENESS_PROBE,
            None,
            queue=queue_name or self.origin_queue,
            ignore_result=False,
            acks_late=True,
            retry=False,
            priority=255
        )

        try:
            is_success = event.get(timeout=10)
        except (celery.exceptions.TimeoutError, AttributeError):
            is_success = False

        return is_success

рдЗрд╕рд▓рд┐рдП рдореВрд▓ рд░реВрдк рд╕реЗ: рдПрдХ рдХрд╛рд░реНрдп рднреЗрдЬреЗрдВ, рдФрд░ рдпрджрд┐ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ рддреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕реНрд╡рд╕реНрде рд╣реИред рдпрджрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдлрдВрд╕ рдЧрдпрд╛ (рдмрд╣реБрдд рдмрд╛рд░ рд╣реБрдЖ) рддреЛ рдХрд╛рд░реНрдп рдХрднреА рдЦрддреНрдо рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдкреЙрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХрдорд╛рддреНрд░ рдЪреЗрддрд╛рд╡рдиреА рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкреБрд░рд╛рдиреА рдХрддрд╛рд░реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, RabbitMQ рдХреЗ рд╕рд╛рде рдпрд╣ рдЖрд╕рд╛рди рд╣реИ, рд╣рдо рд╕рд┐рд░реНрдл рдХрддрд╛рд░ рдореЗрдВ рд╕рдорд╛рдкреНрддрд┐ рдХреА рдиреАрддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
https://www.rabbitmq.com/ttl.html#queue -ttl

@bartoszhernas рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдЬреИрд╕реЗ рдЖрдкрдиреЗ рдХрд╣рд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдХрддрд╛рд░реЗрдВ рдЧрддрд┐рд╢реАрд▓ рд╣реИрдВ рдФрд░ рд╣рдо рд░реЗрдбрд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░реЗрдбрд┐рд╕ рдкрд░ рдХрддрд╛рд░ рдХреЗ рдирд╛рдо рд╕рдорд╛рдкреНрддрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рд╣рд╛рдБ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Redis рдХреЗ рд╕рд╛рде BullMQ рдХреЗ рд╕рдорд╛рди рдореБрджреНрджрд╛ рд╣реИред рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХреНрд░реЛрдирдЬреЙрдм рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬреЛ рд╣рд░ рдмрд╛рд░ рдХрддрд╛рд░реЛрдВ рдХреЛ рд╕рд╛рдл рдХрд░реЗрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jheld picture jheld  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kgritesh picture kgritesh  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

myisis picture myisis  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

steinliber picture steinliber  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Xuexiang825 picture Xuexiang825  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ