Amazon s3 Kubernetes:S3存储托管Docker注册表上的活动性/就绪性探测问题 当前设置
你好。我正在使用部署了S3存储的Docker Registry helm图表。现在我想更新(改变)live/readiness探测器的工作方式。原因是在使用一天后,我耗尽了AWS上列表请求的免费层每月配额。此配额为2000个请求/月。目前,注册表吊舱上的探测器如下所示:Amazon s3 Kubernetes:S3存储托管Docker注册表上的活动性/就绪性探测问题 当前设置,amazon-s3,kubernetes,kubernetes-helm,docker-registry,Amazon S3,Kubernetes,Kubernetes Helm,Docker Registry,你好。我正在使用部署了S3存储的Docker Registry helm图表。现在我想更新(改变)live/readiness探测器的工作方式。原因是在使用一天后,我耗尽了AWS上列表请求的免费层每月配额。此配额为2000个请求/月。目前,注册表吊舱上的探测器如下所示: Liveness: http-get http://:5000/ delay=0s timeout=1s period=10s #success=1 #failure=3 Readiness: http-g
Liveness: http-get http://:5000/ delay=0s timeout=1s period=10s #success=1 #failure=3
Readiness: http-get http://:5000/ delay=0s timeout=1s period=10s #success=1 #failure=3
这些请求显然是GET
。但是,根据回答,AWS将这些请求标记为LIST
这些是我在helm chart Docker注册表安装中使用的自定义值(chart\u values.yaml):
storage: s3
secrets:
htpasswd: "..."
s3:
accessKey: "..."
secretKey: "..."
s3:
region: "..."
secure: true
bucket: "..."
按预期推/拉图像
问题(有关重新措辞的问题,请参阅最新编辑)
- 我应该做什么来避免探测器查询S3
- 活性/就绪性检查不应该只与pod本身相关,而不接触S3吗
周期秒
,比如说600s
。但我不认为这是最佳的解决方案。我知道这是存在的,但我不确定默认注册表docker映像是否可以实现这一点
我想到的最后一件事是,如果注册表docker映像启用了prometheus metrics,我就能够将探测更改为:5001/metrics
路径。但我真的不知道该怎么做
编辑:
kubectl port-forward <registry_pod> 5001
为了启用普罗米修斯指标,我删除了我以前安装的docker registry头盔。然后通过下载helm pull stable/docker注册表--untar
然后我编辑了模板/deployment.yaml文件:
spec:
容器:
端口:
-集装箱港口:5000
-集装箱港口:5001#增加了这一行
livenessProbe:
初始延迟秒数:1#已添加
路径:/metrics#已编辑
端口:5001#已编辑
readinessProbe:
初始延迟秒数:10#增加
路径:/metrics#已编辑
端口:5001#已编辑
环境:
#添加了这些环境变量
-名称:注册表\u HTTP\u调试\u地址
值:“本地主机:5001”
-名称:注册表\u HTTP\u调试\u普罗米修斯\u已启用
价值:“真实”
-名称:注册表\u HTTP\u调试\u PROMETHEUS\u路径
值:/metrics
和模板/service.yaml文件:
端口:
-端口:{{.Values.service.port}
协议:TCP
名称:{{.Values.service.name}
目标港:5000
#在下面添加了这些行
-港口:5001
协议:TCP
名称:{{.Values.service.name}}-普罗米修斯
目标港:5001
起毛并安装:
helm安装注册表。/docker注册表图/-f chart\u values.yaml-n docker注册表
但是,注册表pod从未准备好此配置(kubectl get
在pod上显示0/1)。这是由于准备就绪探测失败,因为5001容器端口未暴露。因此,准备就绪探测失败,无法到达度量服务器
我可以确认Docker容器中的metrics服务器已正确启动。以下是显示调试(度量)服务器已启动的注册表pod日志:
time="2020-04-10T14:36:26Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_DOCKER_REGISTRY_PORT"
time="2020-04-10T14:36:26Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_DOCKER_REGISTRY_PORT_5000_TCP"
time="2020-04-10T14:36:26Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_DOCKER_REGISTRY_PORT_5000_TCP_ADDR"
time="2020-04-10T14:36:26Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_DOCKER_REGISTRY_PORT_5000_TCP_PORT"
time="2020-04-10T14:36:26Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_DOCKER_REGISTRY_PORT_5000_TCP_PROTO"
time="2020-04-10T14:36:26Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_DOCKER_REGISTRY_PORT_5001_TCP"
time="2020-04-10T14:36:26Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_DOCKER_REGISTRY_PORT_5001_TCP_ADDR"
time="2020-04-10T14:36:26Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_DOCKER_REGISTRY_PORT_5001_TCP_PORT"
time="2020-04-10T14:36:26Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_DOCKER_REGISTRY_PORT_5001_TCP_PROTO"
time="2020-04-10T14:36:26Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_DOCKER_REGISTRY_SERVICE_HOST"
time="2020-04-10T14:36:26Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_DOCKER_REGISTRY_SERVICE_PORT"
time="2020-04-10T14:36:26Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_DOCKER_REGISTRY_SERVICE_PORT_REGISTRY"
time="2020-04-10T14:36:26Z" level=warning msg="Ignoring unrecognized environment variable REGISTRY_DOCKER_REGISTRY_SERVICE_PORT_REGISTRY_PROMETHEUS"
time="2020-04-10T14:36:26.172115809Z" level=info msg="debug server listening localhost:5001"
time="2020-04-10T14:36:26.188154917Z" level=info msg="redis not configured" go.version=go1.11.2 instance.id=fc945824-3600-4343-8a18-75a20b07f695 service=registry version=v2.7.1
time="2020-04-10T14:36:26.194453749Z" level=info msg="Starting upload purge in 29m0s" go.version=go1.11.2 instance.id=fc945824-3600-4343-8a18-75a20b07f695 service=registry version=v2.7.1
time="2020-04-10T14:36:26.211140816Z" level=info msg="using inmemory blob descriptor cache" go.version=go1.11.2 instance.id=fc945824-3600-4343-8a18-75a20b07f695 service=registry version=v2.7.1
time="2020-04-10T14:36:26.211497166Z" level=info msg="providing prometheus metrics on /metrics"
time="2020-04-10T14:36:26.211894294Z" level=info msg="listening on [::]:5000" go.version=go1.11.2 instance.id=fc945824-3600-4343-8a18-75a20b07f695 service=registry version=v2.7.1
我甚至可以在docker容器中执行并卷曲localhost:5001/metrics
,结果是200个具有适当的prometheus数据
但是我仍然不知道如何暴露容器上的5001端口。我相信这将使我能够像中提到的那个样,将度量和探测一起使用
编辑2:
kubectl port-forward <registry_pod> 5001
您还可以通过configData
部分(configData.http.debug.addr
等)的chart\u values.yaml文件提供环境变量
无论哪种方式,我都决定将“答案”作为编辑发布,而不是常规的SO答案原始问题仍未回答。 要重新表述原始问题:
kubectl port-forward <registry_pod> 5001
- 活跃度/就绪性检查不应该只与pod本身相关,而不访问S3吗?S3运行状况检查应该可以通过注册表容器上的自定义。在我看来,注册表似乎是一个与S3几乎无关的独立实体。本质上,我们希望对实体进行健康检查,而不是对数据存储进行单独的健康检查
5001
时遇到问题。想看一下编辑吗?:)如果您可以使用podIP:5001或服务来获取度量,那么活动性和就绪性也将与端口5001一起工作。所以你可以避免使用S3进行健康检查。是的,这就是我从昨天开始一直在做的事情。最初,我在卷取podIP:5001/metrics
时遇到了问题,但我已经解决了这个问题(一切都在编辑中)。原来的问题仍然没有答案。如果你想降低S3的定价费用考虑使用相同的区域:选择正确的AWS区域为您的S3桶。确保Ec2和S3位于同一AWS区域。在同一地区使用S3和EC2的主要好处是性能和更低的传输成本。同一区域内的EC2和S3之间的数据传输是免费的。从另一个AWS地区下载文件将花费$0.02/GB@MickeyHovel我没有使用EC2。点击/metrics
端点不应该向S3发送任何请求(通过读取注册表
代码判断)。我怀疑这里还有别的地方不对劲。