我正在进行GKE的部署,这是我的第一次部署,所以我对这些概念非常陌生,但我理解它们将如何使用这些工具,只是需要有自信的经验。
首先,我有一个集群,它有大约五个服务,其中两个我想通过外部负载均衡器公开。我为Gcloud定义了一个注释,用于在负载平衡下设置这些注释,这似乎是可行的,我还为服务设置了一个网络端点组。下面是如何按照部署和服务清单中的方式配置的。
---
#api-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert -f ./docker-compose.yml
kompose.version: 1.21.0 ()
creationTimestamp: null
labels:
io.kompose.service: api
name: api
spec:
replicas: 1
selector:
matchLabels:
io.kompose.service: api
strategy:
type: Recreate
template:
metadata:
annotations:
kompose.cmd: kompose convert -f ./docker-compose.yml
kompose.version: 1.21.0 ()
creationTimestamp: null
labels:
io.kompose.service: api
spec:
containers:
- args:
- bash
- -c
- node src/server.js
env:
- name: NODE_ENV
value: production
- name: TZ
value: America/New_York
image: gcr.io/<PROJECT_ID>/api
imagePullPolicy: Always
name: api
ports:
- containerPort: 8087
resources: {}
restartPolicy: Always
serviceAccountName: ""
status: {}
---
#api-service.yaml
apiVersion: v1
kind: Service
metadata:
annotations:
cloud.google.com/load-balancer-type: "Internal"
cloud.google.com/neg: '{"ingress": true}'
creationTimestamp: null
labels:
io.kompose.service: api
name: api
spec:
type: LoadBalancer
ports:
- name: "8087"
port: 8087
targetPort: 8087
status:
loadBalancer: {}
我想我可能错过了某种配置,但我不确定。
我还看到了在yaml中通过添加
livenessProbe:
httpGet:
path: /healthz
port: 8080
我的入口配置如下:
---
# master-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: master-application-ingress
annotations:
ingress.kubernetes.io/secure-backends: "true"
spec:
rules:
- http:
paths:
- path: /api
backend:
serviceName: api
servicePort: 8087
- http:
paths:
- path: /ui
backend:
serviceName: ui
servicePort: 80
我看到它只需要端口,用于TCP检查,但我已经在我的应用程序和负载均衡器中定义了这些端口。我想我想知道我应该在哪里定义这些支票。
另外,我对注释为空创建的NEG有一个问题,或者对于清单创建的NEG,这是否正常?
发布于 2020-06-23 14:22:11
健康检查是根据您的readinessProbe而不是livenessProbe创建的。在创建入口资源之前,请确保在pod规范中配置了一个readinessProbe。
至于空置的NEG,这可能是由于健康检查不匹配造成的。NEG将依赖于就绪门功能(在此解释),因为您只定义了livenessProbe,因此完全有可能健康检查配置错误,从而失败。
您还应该有一个内部IP为您创建的内部LB,您能到达豆荚的方式吗?如果两者都失败了,健康检查很可能是问题所在,因为NEG没有向它认为尚未准备好的组中添加豆荚。
发布于 2020-12-06 12:56:27
现在,您还可以将BackendConfig
创建为单独的Kubernetes声明。我的例子:
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
name: cms-backend-config
namespace: prod
spec:
healthCheck:
checkIntervalSec: 60
port: 80
type: HTTP #case-sensitive
requestPath: /your-healthcheck-path
connectionDraining:
drainingTimeoutSec: 60
--我根本没有任何就绪/活性探测,完全没有明确定义的,而且一切都正常工作。我还注意到,有时GKE和其他GCP之间仍有一些小故障。我记得我需要重新创建我的部署和从零进入在某个时候,在我玩了很长一段时间不同的选择。
我也这样做了,这可能是我开始在自动注册的NEGs中看到端点的主要原因,在入口中添加了一个默认的后端,以避免在负载均衡器中注册单独的缺省值:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: prod-ingress
namespace: prod
annotations:
kubernetes.io/ingress.allow-http: "false"
kubernetes.io/ingress.global-static-ip-name: load-balancer-ip
networking.gke.io/managed-certificates: my-certificate
spec:
backend:
serviceName: my-service
servicePort: 80
rules:
- host: "example.com"
http:
paths:
- path: /
backend:
serviceName: my-service
servicePort: 80
https://stackoverflow.com/questions/62539189
复制相似问题