Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 Kubernetes:S3存储托管Docker注册表上的活动性/就绪性探测问题 当前设置_Amazon S3_Kubernetes_Kubernetes Helm_Docker Registry - Fatal编程技术网

Amazon s3 Kubernetes:S3存储托管Docker注册表上的活动性/就绪性探测问题 当前设置

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

你好。我正在使用部署了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-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几乎无关的独立实体。本质上,我们希望对实体进行健康检查,而不是对数据存储进行单独的健康检查

您可以将清单文件中的活动性和就绪性URL更改为度量URL。

度量未启用,我还不知道如何启用它们。我已启用度量,但在注册表docker容器上暴露端口
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发送任何请求(通过读取
注册表
代码判断)。我怀疑这里还有别的地方不对劲。