Kubernetes 端点为空,我可以重新启动 pods 吗?
Kubernetes endpoints empty , can I restart the pods?
我遇到的情况是,一项服务可用的端点为零。为了测试这一点,我特制了一个 yaml 描述符,它使用一个简单的节点服务器来设置和检索 pod 的 ready/live 状态:
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 已从端点正确移除,因此没有流量路由到它[这没关系,因为这是预期的行为]。当我将所有 pods 的所有就绪状态设置为 false 时,端点列表为空 [仍然是预期的行为]。
此时我无法从入口外部设置 ready=true,因为流量未路由到任何 pod。例如,当 n-timer 或 n-seconds 后未达到就绪状态时,这里有没有一种方法可以触发 pod 的重启?或者当端点列表为空时?
嗯,这是完全正常和预期的行为。另一方面,您可以做的是使用 kubectl port-forward
将流量从本地主机转发到特定的 pod。这样您就可以直接访问 pod,而无需进入等,并将其准备就绪设置回 ok。如果你想在主机长时间未准备好时重新启动,只需使用相同的端点进行 liveness 探测,但在多次尝试后触发它。
我遇到的情况是,一项服务可用的端点为零。为了测试这一点,我特制了一个 yaml 描述符,它使用一个简单的节点服务器来设置和检索 pod 的 ready/live 状态:
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 已从端点正确移除,因此没有流量路由到它[这没关系,因为这是预期的行为]。当我将所有 pods 的所有就绪状态设置为 false 时,端点列表为空 [仍然是预期的行为]。
此时我无法从入口外部设置 ready=true,因为流量未路由到任何 pod。例如,当 n-timer 或 n-seconds 后未达到就绪状态时,这里有没有一种方法可以触发 pod 的重启?或者当端点列表为空时?
嗯,这是完全正常和预期的行为。另一方面,您可以做的是使用 kubectl port-forward
将流量从本地主机转发到特定的 pod。这样您就可以直接访问 pod,而无需进入等,并将其准备就绪设置回 ok。如果你想在主机长时间未准备好时重新启动,只需使用相同的端点进行 liveness 探测,但在多次尝试后触发它。