Você (provavelmente) precisa de sondas de vivacidade e prontidão

Uma das perguntas mais comuns que recebo como consultor é: "Qual é a diferença entre amostras de vivacidade e prontidão ?" A próxima pergunta mais comum é: "Quais são as que meu aplicativo precisa?"





Qualquer pessoa que já tentou essa pergunta por trás do Duck Duck Go sabe que não é fácil encontrar uma resposta para ela na internet. Neste artigo, espero poder ajudá-lo a responder a essas perguntas sozinho. Compartilharei minha opinião sobre a melhor forma de usar a vivacidade e a prontidão de probes em aplicativos implantados no Red Hat OpenShift . E não estou sugerindo um algoritmo rigoroso, mas uma estrutura geral que você pode usar para tomar suas próprias decisões de arquitetura.





Para tornar as abstrações mais específicas, sugiro examinar quatro exemplos de aplicação geral. Para cada um deles, descobriremos se precisamos configurar as sondas liveness e prontidão e, se necessário, como. Antes de passar para os exemplos, vamos examinar mais de perto esses dois tipos diferentes de amostras.





: Kubernetes “startup” probe, OpenShift 4.5 clusters. startup probe, liveness readiness probes. startup probes.





Liveness readiness probes

Liveness () readiness () , OpenShift. , .





liveness , OpenShift’, . readiness , OpenShift’ , . , .





liveness , readiness , OpenShift , , , . , . ( - -, , , legacy-.)





. , , OpenShift.





liveness ?

Liveness OpenShift’, ( ), ( ). , OpenShift , . , OpenShift .





liveness ( ) . “” “” : “ ?”.





liveness ?

liveness , OpenShift PID 1. PID 1 , . , PID 1





PID 1 liveness , OpenShift ( ), . - . PID 1 , , , OpenShift .





, PID 1, , , liveness . init , tini dumb-init, , . , liveness , , .





readiness ?

OpenShift readiness ( ) , . , , ( ), , readiness . OpenShift , . OpenShift , , ( ) 502 , “connection refused”.





liveness , readiness ( ) . : “ ?”.





readiness ?

readiness , OpenShift , PID 1 . .





(, 502 OpenShift) , . readiness , . , , . , , , .





readiness . OpenShift' , .





, , .





: - , . - : OpenShift . liveness readiness OpenShift Container-as-a-Service, .





1: (Nginx)

FIG.  1: Um exemplo de implementação de servidor para servir estatísticas Nginx
. 1: Nginx

, 1 - , Nginx, . , : , 200 HTTP .





liveness ?

, , . , , liveness . Nginx , (, , SELinux Nginx, ).





readiness ?

Nginx readiness . , readiness , . Nginx , , , , best practice.





readiness

, , Deployment



. , . , template.





apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: application-nginx
  name: application-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: application-nginx
  template:
    metadata:
      labels:
        app: application-nginx
    spec:
      #  Will appear below as it changes
      
      



:





    spec:
      containers:
      - image: quay.io/<username>/nginx:latest
        name: application-nginx
        imagePullPolicy: Always
        ports:
        - containerPort: 8443
          protocol: TCP
        readinessProbe:
          httpGet:
            scheme: HTTPS
            path: /index.html
            port: 8443
          initialDelaySeconds: 10
          periodSeconds: 5
      
      



FIG.  Etapa 2: Implementar um servidor Nginx para veicular estática com verificações de prontidão configuradas
. 2: Nginx readiness

2: ( REST API)

HTTP -, “”. “” readiness , . , liveness . , , , . , , liveness . 





. 3 . .





FIG.  3: Implementar um servidor de trabalho sem verificações de atividade.
. 3: liveness .

, liveness , .





liveness ? 

, . , , - . , PID 1.





PID 1, , . liveness OpenShift PID 1 . .





, . , deadlock, , , .





deadlock, /tmp/jobs.update



. shell ( exec liveness ) , , . liveness /usr/bin/my-application-jobs --alive



.





liveness ( , YAML- Deployment’a



, ):





    spec:
      containers:
      - image: quay.io/<username>/my-application-jobs:latest
        name: my-application-jobs
        imagePullPolicy: Always
        livenessProbe:
          exec:
            command:
            - /bin/sh
            - -c
            - "/usr/bin/my-application-jobs --alive"
          initialDelaySeconds: 10
          periodSeconds: 5
      
      



readiness ?

readiness . , readiness OpenShift , . , . readiness . . 4 liveness .





FIG.  4: Implementação de um servidor de trabalho com verificações de vivacidade
. 4: liveness

3: API

FIG.  5: aplicação SSR sem qualquer verificação
. 5: SSR -

SSR: HTML- , . Spring Boot, PHP, Ruby on Rails, Django, Node.js, .





liveness ?

, liveness , , . , liveness , , .





liveness exec, shell, , - . . , PID , , :





        livenessProbe:
          exec:
            command:
            - /bin/sh
            - -c
            - "[ -f /run/my-application-web.pid ] && ps -A | grep my-application-web"
          initialDelaySeconds: 10
          periodSeconds: 5
      
      



readiness ?

readiness . readiness OpenShift , , . , , , , , , .





, OpenShift , . readiness , , OpenShift, :





        readinessProbe:
          httpGet:
            scheme: HTTPS
            path: /healthz
            port: 8443
          initialDelaySeconds: 10
          periodSeconds: 5
      
      



, YAML :





apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: backend-service
  name: backend-service
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backend-service
  template:
    metadata:
      labels:
        app: backend-service
    spec:
      containers:
      - image: quay.io/<username>/backend-service:latest
        name: backend-service
        imagePullPolicy: Always
        ports:
        - containerPort: 8443
          protocol: TCP
        readinessProbe:
          httpGet:
            scheme: HTTPS
            path: /healthz
            port: 8443
          initialDelaySeconds: 10
          periodSeconds: 5
      
      



6 SSR liveness readiness .





FIG.  6. Aplicação SSR com sondas personalizadas de vitalidade e prontidão.
. 6. SSR liveness readiness .

4:

, . , , . .





FIG.  7: Aplicação de exemplo realista em OpenShift para aprender o uso de probes.
. 7: OpenShift .

, :





  • : REST API . , , , REST API.





  • Nginx: : (, JavaScript CSS). TLS- (Transport Layer Security) , URL. .





  • : , . , . , , .





:





  • : . - , .





  • . « - » (FIFO) . , .





:





  • Nginx TLS- . , HTTP. . volume space. , .





  • . , . , .





, . HTTP 8080 HTTPS 8443 readiness . liveness , , . , Kubelet', «»:





# Pod One - Application Server and Nginx
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: my-application-web
  name: my-application-web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-application-web
  template:
    metadata:
      labels:
        app: my-application-web
    spec:
      containers:
      - image: quay.io/<username>/my-application-nginx:latest
        name: my-application-nginx
        imagePullPolicy: Always
        ports:
        - containerPort: 8443
          protocol: TCP
        livenessProbe:
          exec:
            command:
            - /bin/sh
            - -c
            - "[ -f /run/nginx.pid ] && ps -A | grep nginx"
          initialDelaySeconds: 10
          periodSeconds: 5
        readinessProbe:
          httpGet:
            scheme: HTTPS
            path: /index.html
            port: 8443
          initialDelaySeconds: 10
          periodSeconds: 5
      - image: quay.io/<username>/my-application-app-server:latest
        name: my-application-app-server
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
          protocol: TCP
        livenessProbe:
          exec:
            command:
            - /bin/sh
            - -c
            - "/usr/bin/my-application-web --alive"
          initialDelaySeconds: 10
          periodSeconds: 5
        readinessProbe:
          httpGet:
            scheme: HTTP
            path: /healthz
            port: 8080
          initialDelaySeconds: 10
          periodSeconds: 5

# Pod Two - Jobs Server
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: my-application-jobs
  name: my-application-jobs
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-application-jobs
  template:
    metadata:
      labels:
        app: my-application-jobs
    spec:
      containers:
      - image: quay.io/<username>/my-application-jobs:latest
        name: my-application-jobs
        imagePullPolicy: Always
        livenessProbe:
          exec:
            command:
            - /bin/sh
            - -c
            - "/usr/bin/my-application-jobs --alive"
          initialDelaySeconds: 10
          periodSeconds: 5
      
      



8 .





FIG.  8: Aplicativos de amostra completos com ambas as sondas configuradas.
. 8: .

liveness readiness ?

, , . HTTP- , , , , , , OpenShift . , , .





HTTP endpoint, , liveness readiness endpoint. endpoint , , endpoint .





Liveness readiness OpenShift.  . liveness OpenShift, . readiness OpenShift .





, “” , . , , .





. , liveness , readiness . , .





, . - (SOA), . , readiness ? . / , , .





, . - ! . .








All Articles