gpt4 book ai didi

amazon-s3 - Kubernetes:关于S3存储托管Docker Registry的活跃性/就绪性探针的问题

转载 作者:行者123 更新时间:2023-12-02 12:28:12 29 4
gpt4 key购买 nike

当前设置

你好。我正在使用随S3存储一起部署的Docker Registry Helm chart 。现在,我想更新(更改)实时/就绪探针的工作方式。原因是使用一天后,我已经耗尽了AWS上LIST请求的免费每月配额。该配额为2000个请求/月。现在,注册表 Pane 上的探针如下所示:

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。但是,按照 this的答案,这些请求被AWS标记为 LIST

这些是我在 Helm 图Docker Registry安装中使用的自定义值( chart_values.yaml ):
storage: s3

secrets:
htpasswd: "..."
s3:
accessKey: "..."
secretKey: "..."

s3:
region: "..."
secure: true
bucket: "..."


推/拉图像按预期工作。

问题(请参阅最新的修改后的问题)
  • 我该怎么办才能避免被探针查询到S3?
  • 是否应该在不触摸S3的情况下将 Activity /就绪状态检查仅与 pods 本身相关联?

  • 我知道我可以编辑部署配置以更改探针的 periodSeconds,例如 600s。但我认为这不是最佳解决方案。我知道 liveness commands存在,但是我不确定默认注册表docker镜像是否可以实现。

    我最后想到的是,如果注册表docker镜像启用了prometheus度量标准,则可以将探针更改为 :5001/metrics路径。但是我不太确定该怎么做。

    编辑:

    为了启用Prometheus指标,我删除了以前安装的docker Registry Helm 。然后通过 helm pull stable/docker-registry --untar下载 stable docker reigstry helm chart

    然后,我编辑了 templates / deployment.yaml 文件:

    spec:
    containers:
    ports:
    - containerPort: 5000
    - containerPort: 5001 # Added this line
    livenessProbe:
    initialDelaySeconds: 1 # Added
    path: /metrics # Edited
    port: 5001 # Edited
    readinessProbe:
    initialDelaySeconds: 10 # Added
    path: /metrics # Edited
    port: 5001 # Edited
    env:
    # Added these env variables
    - name: REGISTRY_HTTP_DEBUG_ADDR
    value: "localhost:5001"
    - name: REGISTRY_HTTP_DEBUG_PROMETHEUS_ENABLED
    value: "true"
    - name: REGISTRY_HTTP_DEBUG_PROMETHEUS_PATH
    value: /metrics

    以及 templates / service.yaml 文件:

      ports:
    - port: {{ .Values.service.port }}
    protocol: TCP
    name: {{ .Values.service.name }}
    targetPort: 5000
    # Added these lines below
    - port: 5001
    protocol: TCP
    name: {{ .Values.service.name }}-prometheus
    targetPort: 5001


    棉绒并安装:

    helm install registry ./docker-registry-chart/ -f chart_values.yaml -n docker-registry

    但是,注册表容器永远无法使用此配置就绪( kubectl get在容器上显示0/1)。这是由于未暴露5001 containerPort而导致就绪探针失败。因此,就绪探针失败,无法到达度量服务器。

    我可以确认Docker容器中的指标服务器已正确启动。以下是注册表荚日志,它们显示调试(度量)服务器已启动:
    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容器并 curl localhost:5001/metrics,从而得到200个带有适当的prometheus数据。

    但是我仍然 不确定如何在容器上公开5001端口。我相信这将使我能够将指标与 @mdaniel中的 his answer提及之类的探针一起使用。

    编辑2 :
    kubectl port-forward <registry_pod> 5001

    Portforwarding注册表容器有效,我可以 curl localhost:5001/metrics来获取普罗米修斯指标数据。 curl从集群执行。

    我想知道 templates / service.yaml 文件是否有问题。

    编辑3 :我知道问题出在哪里。端口 5001上无法访问的服务是由于将 REGISTRY_HTTP_DEBUG_ADDR设置为 localhost:5001导致的。 值应为:5001

    最后,将其转换为您的 template / deployment.yaml 应该如下所示:

    spec:
    containers:
    ports:
    - containerPort: 5000
    - containerPort: 5001 # Added this line
    livenessProbe:
    initialDelaySeconds: 1 # Added
    path: /metrics # Edited
    port: 5001 # Edited
    readinessProbe:
    initialDelaySeconds: 10 # Added
    path: /metrics # Edited
    port: 5001 # Edited
    env:
    # Added these env variables
    - name: REGISTRY_HTTP_DEBUG_ADDR
    value: ":5001" # Make sure the addr field is left empty!
    - name: REGISTRY_HTTP_DEBUG_PROMETHEUS_ENABLED
    value: "true"
    - name: REGISTRY_HTTP_DEBUG_PROMETHEUS_PATH
    value: /metrics

    潜在地,您也可以通过 chart_values.yaml 文件以及 configData部分( configData.http.debug.addr等)来提供环境变量。

    无论哪种方式,我都决定将“答案”发布为编辑内容,而不是常规的SO答案。 原始问题仍未得到解答。

    重述原始问题:
  • 是否应该在不访问S3的情况下将 liveness /就绪性检查仅与容器本身相关联?应该使用注册表容器上的storagedriver自定义S3运行状况检查。在我看来,注册表是一个几乎与S3无关的独立实体。本质上,我们要对那个实体进行健康检查,而不是要进行单独健康检查的数据存储...
  • 最佳答案

    您可以将 list 文件中的“ liveness ”和“就绪” URL更改为度量标准URL。

    关于amazon-s3 - Kubernetes:关于S3存储托管Docker Registry的活跃性/就绪性探针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61103591/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com