0

pushgateway用来公开来自短期批处理作业的指标。

目前 pushgateway 实例在裸机机器上启动,我在该机器上安装了一个 docker 卷,以允许在容器重启的情况下保留指标(与--persistence.file参数一起)。

docker-compose.yml这里是用于运行容器的文件的摘录:

 pushgateway:
    image: prom/pushgateway:v1.2.0
    restart: unless-stopped
    volumes:
      - pushgw-data:/data
    ports:
      - "${PUSHGW_PORT:-9091}:9091"
    command: --persistence.file="/data/metric.store"

我正在迁移到没有持久卷的(私有)kubernetes 集群,但配备了与 s3 兼容的对象存储。

从github 上的这个问题来看,似乎可以将 s3 定位为检查点,但如果没有进一步的输入,我不确定如何实现这一点,这是我通过在 Web 上搜索信息所能找到的最好的方法。

谁能指出我正确的方向?

4

1 回答 1

1

所以最后https://serverfault.com/questions/976764/kubernetes-run-aws-s3-sync-rsync-against-persistent-volume-on-demand为我指明了正确的方向。

deployment.yaml这是按预期工作的描述符的摘录:

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: {{K8S_NAMESPACE}}
  name: {{K8S_DEPLOYMENT_NAME}}
spec:
  selector:
    matchLabels:
      name: {{K8S_DEPLOYMENT_NAME}}
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        name: {{K8S_DEPLOYMENT_NAME}}
        version: v1
    spec:
      containers:
      - name: {{AWSCLI_NAME}}
        image: {{IMAGE_AWSCLI}}
        env:
        - name: AWS_ACCESS_KEY_ID
          valueFrom:
            secretKeyRef:
              name: {{SECRET_NAME}}
              key: accesskey
        - name: AWS_SECRET_ACCESS_KEY
          valueFrom:
            secretKeyRef:
              name: {{SECRET_NAME}}
              key: secretkey
        command: [ "/bin/bash",
                   "-c",
                   "aws --endpoint-url {{ENDPOINT_URL}} s3 sync s3://{{BUCKET}} /data; while true; do aws --endpoint-url {{ENDPOINT_URL}} s3 sync /data s3://{{BUCKET}}; sleep 60; done" ]
        volumeMounts:
          - name: pushgw-data
            mountPath: /data
      - name: {{PUSHGATEWAY_NAME}}
        image: {{IMAGE_PUSHGATEWAY}}
        command: [ '/bin/sh', '-c' ]
        args: [ 'sleep 10; /bin/pushgateway --persistence.file=/data/metric.store' ]
        ports:
        - containerPort: 9091
        volumeMounts:
        - name: pushgw-data
          mountPath: /data
      volumes:
        - name: pushgw-data
          emptyDir: {}
        - name: config-volume
          configMap:
            name: {{K8S_DEPLOYMENT_NAME}}
      imagePullSecrets:
            - name: harbor-bot
      restartPolicy: Always

注意 pushgateway 的 docker 镜像的 entrypoint 覆盖。在我的情况下,我设置了 10 秒的延迟开始,您可能需要调整延迟以满足您的需要。这种延迟是必要的,因为 pushgateway 容器的启动速度比 sidecar 快(我想也是由于与 s3 的网络交换)。

如果 pushgateway 在不存在度量存储文件时启动,则不会使用/考虑。但更糟糕的是,当您第一次向 pushgateway 发送数据时,它将覆盖该文件。此时,sidecar 容器中的“同步”也将覆盖原始“副本”,因此请注意并确保在尝试此延迟值之前备份指标文件。

于 2021-02-12T19:00:56.743 回答