diff --git a/camera-front/metadata-provider.dockerfile b/camera-front/metadata-provider.dockerfile new file mode 100644 index 000000000..caa8ac45a --- /dev/null +++ b/camera-front/metadata-provider.dockerfile @@ -0,0 +1,13 @@ +FROM golang:1.20.2-bullseye AS builder +WORKDIR /build +ENV GOPROXY https://goproxy.cn +COPY go.mod go.sum ./ +RUN go mod download && go mod verify + +COPY . . +RUN go build -v -o metadata-provider ./cmd/metadata-provider + +FROM debian:bullseye-slim AS runner +WORKDIR /app +COPY --from=builder /build/metadata-provider /app/ +CMD ["/app/metadata-provider"] \ No newline at end of file diff --git a/collector/cmd/meta-provider/main.go b/collector/cmd/meta-provider/main.go new file mode 100644 index 000000000..ddc35d7f0 --- /dev/null +++ b/collector/cmd/meta-provider/main.go @@ -0,0 +1,37 @@ +package main + +import ( + "flag" + "fmt" + "log" + "net/http" + _ "net/http/pprof" + + "github.com/Kindling-project/kindling/collector/pkg/metadata/kubernetes" + "github.com/Kindling-project/kindling/collector/pkg/metadata/metaprovider/service" +) + +func main() { + authType := flag.String("authType", "serviceAccount", "AuthType describes the type of authentication to use for the K8s API, support 'kubeConfig' or 'serviceAccount'. ") + kubeConfigPath := flag.String("kubeConfig", "/root/.kube/config", "kubeConfig describe the filePath to your kubeConfig,only used when authType is 'kubeConfig'") + httpPort := flag.Int("http-port", 9504, "port describe which port will be used to expose data") + enableFetchReplicaset := flag.Bool("enableFetchReplicaset", false, "controls whether to fetch ReplicaSet information. The default value is false. It should be enabled if the ReplicaSet is used to control pods in the third-party CRD except for Deployment.") + logInterval := flag.Int("logInterval", 120, "Interval(Second) to show how many event mp received, default 120s") + + flag.Parse() + + config := &service.Config{ + KubeAuthType: kubernetes.AuthType(*authType), + KubeConfigDir: *kubeConfigPath, + EnableFetchReplicaSet: *enableFetchReplicaset, + LogInterval: *logInterval, + } + + if mdw, err := service.NewMetaDataWrapper(config); err != nil { + log.Fatalf("create MetaData Wrapper failed, err: %v", err) + } else { + http.HandleFunc("/listAndWatch", mdw.ListAndWatch) + log.Printf("[http] service start at port: %d", *httpPort) + log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", *httpPort), nil)) + } +} diff --git a/collector/docker/Dockerfile-metadata-provider b/collector/docker/Dockerfile-metadata-provider new file mode 100644 index 000000000..91f4c4c42 --- /dev/null +++ b/collector/docker/Dockerfile-metadata-provider @@ -0,0 +1,14 @@ +FROM golang:1.20.2-bullseye AS builder +WORKDIR /build + +ENV GOPROXY https://goproxy.cn +COPY go.mod go.sum ./ +RUN go mod download && go mod verify + +COPY . . +RUN go build -v -o metadata-provider ./cmd/metadata-provider + +FROM debian:bullseye-slim AS runner +WORKDIR /app +COPY --from=builder /build/metadata-provider /app/ +CMD ["/app/metadata-provider"] \ No newline at end of file diff --git a/deploy/metadata-provider/metadata-provider.yml b/deploy/metadata-provider/metadata-provider.yml new file mode 100644 index 000000000..5f1b897b5 --- /dev/null +++ b/deploy/metadata-provider/metadata-provider.yml @@ -0,0 +1,53 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + k8s-app: metadata-provider + name: metadata-provider + namespace: kindling +spec: + selector: + matchLabels: + k8s-app: metadata-provider + template: + metadata: + labels: + k8s-app: metadata-provider + spec: + serviceAccount: kindling-agent + containers: + - name: metadata-provider + image: kindlingproject/metadata-provider:v1.0 + command: ["./metadata-provider"] + args: + - --http-port=9504 + - --authType=serviceAccount + # - --kubeConfig=/root/.kube/config + imagePullPolicy: Always + securityContext: + privileged: true + resources: + limits: + memory: 1Gi + requests: + memory: 300Mi + ports: + - containerPort: 9504 + protocol: TCP + name: http + restartPolicy: Always + terminationGracePeriodSeconds: 30 + +--- +apiVersion: v1 +kind: Service +metadata: + name: metadata-provider + namespace: kindling +spec: + ports: + - port: 9504 + protocol: TCP + targetPort: http + selector: + k8s-app: metadata-provider