代码之家  ›  专栏  ›  技术社区  ›  dawez

Kubernetes端点为空,我可以重新启动POD吗?

  •  1
  • dawez  · 技术社区  · 7 年前

    我的情况是,一个服务没有可用的端点。为了测试这一点,我特制了一个yaml描述符,它使用一个简单的节点服务器来设置和检索pod的就绪/活动状态:

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: nodejs-deployment
      labels:
        app: nodejs
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nodejs
      template:
        metadata:
          labels:
            app: nodejs
        spec:
          containers:
          - name: nodejs
            image: nodejs_server
            ports:
            - containerPort: 8080
            livenessProbe:
              httpGet:
                path: /is_alive
                port: 8080
              initialDelaySeconds: 5
              timeoutSeconds: 3
              periodSeconds: 10
            readinessProbe:
              httpGet:
                path: /is_ready
                port: 8080
              initialDelaySeconds: 5
              timeoutSeconds: 3
              periodSeconds: 10
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nodejs-service
      labels:
        app: nodejs
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 8080
      selector:
        app: nodejs
    ---    
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: nodejs-ingress
    spec:
      backend:
        serviceName: nodejs-service
        servicePort: 80
    

    节点服务器具有设置和检索活动性和就绪性的方法。

    当应用程序启动时,我可以看到创建了3个副本,它们的状态已就绪。好的,现在我手动触发它们的就绪状态,将其设置为false[从入口外部]。一个pod已从端点正确移除,因此没有流量路由到它[这是正常的,因为这是预期的行为]。当我将所有POD的所有就绪状态设置为false时,端点列表为空[仍然是预期的行为]。

    此时,我无法从入口外部设置ready=true,因为流量没有路由到任何pod。例如,当n计时器或n秒后未达到就绪状态时,是否有办法触发pod重启?或者当端点列表为空时?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Radek 'Goblin' Pieczonka    7 年前

    嗯,这是完全正常和预期的行为。另一方面,您可以使用 kubectl port-forward . 这样,您可以直接访问pod,而无需进入等,并将其就绪状态设置回ok。如果您想在主机未准备就绪到很长时间时重新启动,只需将相同的端点用于liveness probe,但在多次尝试后触发它。