1

我有一种情况,我有零个端点可用于一项服务。为了测试这一点,我特制了一个 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-timer 或 n-seconds 后没有准备好时触发 Pod 的重启?或者当端点列表为空时?

4

1 回答 1

2

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

于 2018-02-12T14:05:33.943 回答