在prometheus-prometheus.yaml减少thanos的配置当前:

thanos:    image: thanosio/thanos:v0.18.0    objectStorageConfig:      key: thanos.yaml      name: thanos-objstore-config

prometheus-operator做了上面的事件:

  • 创立一个thanos的container作为prometheus的sidecar;
  • 为prometheus service减少了1个grpc端口:10901;

创立thanos sidecar

# kubectl describe pod prometheus-k8s-0 -n monitoringName:         prometheus-k8s-0Namespace:    monitoringContainers:  ......  thanos-sidecar:    Container ID:  docker://e5d123d91752f941b9081d553ce49361154c0a26f9dc7c46dc7975b709575285    Image:         thanosio/thanos:v0.18.0    Image ID:      docker-pullable://thanosio/thanos@sha256:b94171aed499b2f1f81b6d3d385e0eeeca885044c59cef28ce6a9a9e8a827217    Ports:         10902/TCP, 10901/TCP    Host Ports:    0/TCP, 0/TCP    Args:      sidecar      --prometheus.url=http://localhost:9090/      --tsdb.path=/prometheus      --grpc-address=[$(POD_IP)]:10901      --http-address=[$(POD_IP)]:10902      --objstore.config=$(OBJSTORE_CONFIG)    State:          Running      Started:      Sun, 04 Jul 2021 17:35:11 +0800  ......

创立sidecar container的代码在prometheus-operator中:

// pkg/prometheus/statefulset.gofunc makeStatefulSetSpec(p monitoringv1.Prometheus, c *Config, ruleConfigMapNames []string) (*appsv1.StatefulSetSpec, error) {    ......    if p.Spec.Thanos != nil {        ....        container := v1.Container{            Name:                     "thanos-sidecar",            Image:                    thanosImage,            TerminationMessagePolicy: v1.TerminationMessageFallbackToLogsOnError,            Args:                     thanosArgs,            Env: []v1.EnvVar{                {                    Name: "POD_IP",                    ValueFrom: &v1.EnvVarSource{                        FieldRef: &v1.ObjectFieldSelector{                            FieldPath: "status.podIP",                        },                    },                },            },            Ports: []v1.ContainerPort{                {                    Name:          "http",                    ContainerPort: 10902,                },                {                    Name:          "grpc",                    ContainerPort: 10901,                },            },            VolumeMounts: []v1.VolumeMount{                {                    Name:      volName,                    MountPath: storageDir,                    SubPath:   subPathForStorage(p.Spec.Storage),                },            },            Resources: p.Spec.Thanos.Resources,        }    }}

减少grpc端口

减少prometheus-operator grpc端口的代码:

// pkg/prometheus/statefulset.gofunc makeStatefulSetService(p *monitoringv1.Prometheus, config Config) *v1.Service {    p = p.DeepCopy()    if p.Spec.PortName == "" {        p.Spec.PortName = defaultPortName    }    svc := &v1.Service{        ObjectMeta: metav1.ObjectMeta{            Name: governingServiceName,            Labels: config.Labels.Merge(map[string]string{                "operated-prometheus": "true",            }),        },        Spec: v1.ServiceSpec{            ClusterIP: "None",            Ports: []v1.ServicePort{                {                    Name:       p.Spec.PortName,                    Port:       9090,                    TargetPort: intstr.FromString(p.Spec.PortName),                },            },            Selector: map[string]string{                "app": "prometheus",            },        },    }    if p.Spec.Thanos != nil {        svc.Spec.Ports = append(svc.Spec.Ports, v1.ServicePort{            Name:       "grpc",            Port:       10901,            TargetPort: intstr.FromString("grpc"),        })    }    return svc}

能够看到10901的端口是hardcoding在代码中的。