mirror of
https://github.com/zalando-incubator/kube-metrics-adapter.git
synced 2025-05-13 16:59:37 +00:00
Compare commits
137 Commits
Author | SHA1 | Date | |
---|---|---|---|
1c9038b2cc | |||
fd4ead837e | |||
f46f801811 | |||
4acdf72ef7 | |||
e04cd10bfc | |||
8fe330941a | |||
0730c6ef1e | |||
c5411c74b7 | |||
4ba6b66441 | |||
0dbe769e1b | |||
582a78d4ec | |||
481df883e5 | |||
318d47e05e | |||
190f0db092 | |||
c618494177 | |||
a08860d06c | |||
6b0afe5180 | |||
9722e38f62 | |||
35aa03c771 | |||
34c833e04a | |||
c93c1dd7bb | |||
59d39bc51c | |||
4066e450e5 | |||
8415373f3d | |||
d1969a3020 | |||
582c94255f | |||
c626f414db | |||
1d4beab7a4 | |||
eefd5ef512 | |||
599b3bf805 | |||
ecf21df9c0 | |||
ecd296e644 | |||
446b7f01ea | |||
0ad7296d56 | |||
9da155554b | |||
d7f9664d52 | |||
85f6dda229 | |||
64a6b85c73 | |||
f41af0d82b | |||
194bede7a3 | |||
c4f5efb6a7 | |||
51e9378ee6 | |||
ce27ef1798 | |||
a73ef467cd | |||
e6a04531fb | |||
7289e6f8e2 | |||
60b1dc097a | |||
6b46cc2599 | |||
6f9aba8db8 | |||
a382dbfe7b | |||
7a68304389 | |||
7044e79b08 | |||
e16bacb24e | |||
726c1e691d | |||
debc90ca72 | |||
6343c8ea15 | |||
eb0575f11e | |||
52bfbbb1b0 | |||
cf5872ef08 | |||
b5432fb1f3 | |||
5466badd90 | |||
aef1837e47 | |||
4e86d6ae34 | |||
2874c1a6a7 | |||
b5006746f0 | |||
9496ab7fd3 | |||
aa7f86291e | |||
486a6c4262 | |||
aaf66f31a0 | |||
e5bee93bf6 | |||
aae3772472 | |||
76d3726e5b | |||
ea4a651afe | |||
721c6553d8 | |||
5aa2272e37 | |||
b9300d1e46 | |||
5747b6c9de | |||
6d15a1635a | |||
4090ab8b32 | |||
1f56abf931 | |||
f216070630 | |||
8725f02db7 | |||
240452ca27 | |||
45d7863e73 | |||
87f249d36b | |||
9967a55df8 | |||
adf0792079 | |||
99fa5c42ed | |||
188cc91574 | |||
a8ff0ed6f0 | |||
cc9279b283 | |||
9bb7d976a0 | |||
816661f7fd | |||
7ae70d798d | |||
0ef5ad1cfe | |||
c86235636b | |||
2d119e68e4 | |||
df3efe0e39 | |||
a5b5cb91c3 | |||
ebcf99ad27 | |||
3d450ad2c2 | |||
78a9b5c253 | |||
4e2b9d9788 | |||
38aeb4deed | |||
b7aa886546 | |||
942e753f87 | |||
86ed6ec102 | |||
b313c963b6 | |||
ca20ef3a3b | |||
f2179846c5 | |||
85089c4773 | |||
2ac9dd29d8 | |||
2bfc85ff3d | |||
d55a551bd8 | |||
3174100f5a | |||
16808f012d | |||
2531ddcbe3 | |||
8ff2e3985b | |||
dab5a66556 | |||
995ec54aa5 | |||
6f71e9c6b0 | |||
ed16830a77 | |||
7f84bc75f4 | |||
b5fbb1beae | |||
4506701b7c | |||
df0ed1fca4 | |||
bb107b678c | |||
8d7dc13bbd | |||
20f0042017 | |||
c732851b6b | |||
2e09132f95 | |||
95f22dc398 | |||
eed5c78fb3 | |||
e61071a36d | |||
c108fab55a | |||
be7567efea | |||
b677e814be |
25
.github/workflows/ci.yaml
vendored
Normal file
25
.github/workflows/ci.yaml
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
name: ci
|
||||||
|
on: [push, pull_request]
|
||||||
|
env:
|
||||||
|
GO111MODULE: on
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-go@v2
|
||||||
|
with:
|
||||||
|
go-version: '^1.16'
|
||||||
|
- run: go version
|
||||||
|
- run: go get github.com/mattn/goveralls
|
||||||
|
env:
|
||||||
|
GO111MODULE: off
|
||||||
|
- run: curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin ${GOLANGCI_RELEASE}
|
||||||
|
env:
|
||||||
|
GOLANGCI_RELEASE: v1.37.0
|
||||||
|
- run: make build.docker
|
||||||
|
- run: make test
|
||||||
|
- run: make check
|
||||||
|
- run: goveralls -coverprofile=profile.cov -service=github
|
||||||
|
env:
|
||||||
|
COVERALLS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,4 +1,5 @@
|
|||||||
build/
|
build/
|
||||||
apiserver.local.config/
|
apiserver.local.config/
|
||||||
.idea/
|
.idea/
|
||||||
|
profile.cov
|
||||||
vendor/
|
vendor/
|
||||||
|
20
.travis.yml
20
.travis.yml
@ -1,20 +0,0 @@
|
|||||||
language: go
|
|
||||||
dist: xenial
|
|
||||||
|
|
||||||
go:
|
|
||||||
- "1.14.x"
|
|
||||||
|
|
||||||
env:
|
|
||||||
- GO111MODULE=on GOLANGCI_RELEASE="v1.21.0"
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- GO111MODULE=off go get github.com/mattn/goveralls
|
|
||||||
- GO111MODULE=off go get github.com/lawrencewoodman/roveralls
|
|
||||||
- curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin ${GOLANGCI_RELEASE}
|
|
||||||
|
|
||||||
script:
|
|
||||||
- make test
|
|
||||||
- make build.docker
|
|
||||||
- make check
|
|
||||||
- roveralls
|
|
||||||
- goveralls -v -coverprofile=roveralls.coverprofile -service=travis-ci
|
|
@ -1,5 +1,7 @@
|
|||||||
FROM registry.opensource.zalan.do/stups/alpine:latest
|
FROM registry.opensource.zalan.do/library/alpine-3.12:latest
|
||||||
MAINTAINER Team Teapot @ Zalando SE <team-teapot@zalando.de>
|
LABEL maintainer="Team Teapot @ Zalando SE <team-teapot@zalando.de>"
|
||||||
|
|
||||||
|
RUN apk add --no-cache tzdata
|
||||||
|
|
||||||
# add binary
|
# add binary
|
||||||
ADD build/linux/kube-metrics-adapter /
|
ADD build/linux/kube-metrics-adapter /
|
||||||
|
40
Makefile
40
Makefile
@ -8,31 +8,57 @@ SOURCES = $(shell find . -name '*.go')
|
|||||||
DOCKERFILE ?= Dockerfile
|
DOCKERFILE ?= Dockerfile
|
||||||
GOPKGS = $(shell go list ./...)
|
GOPKGS = $(shell go list ./...)
|
||||||
BUILD_FLAGS ?= -v
|
BUILD_FLAGS ?= -v
|
||||||
|
OPENAPI ?= pkg/api/generated/openapi/zz_generated.openapi.go
|
||||||
LDFLAGS ?= -X main.version=$(VERSION) -w -s
|
LDFLAGS ?= -X main.version=$(VERSION) -w -s
|
||||||
|
CRD_SOURCES = $(shell find pkg/apis/zalando.org -name '*.go')
|
||||||
|
CRD_TYPE_SOURCE = pkg/apis/zalando.org/v1/types.go
|
||||||
|
GENERATED_CRDS = docs/scaling_schedules_crd.yaml
|
||||||
|
GENERATED = pkg/apis/zalando.org/v1/zz_generated.deepcopy.go
|
||||||
|
|
||||||
|
|
||||||
default: build.local
|
default: build.local
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf build
|
rm -rf build
|
||||||
|
rm -rf $(OPENAPI)
|
||||||
|
|
||||||
test:
|
test: $(GENERATED)
|
||||||
go test -v $(GOPKGS)
|
go test -v -coverprofile=profile.cov $(GOPKGS)
|
||||||
|
|
||||||
check:
|
check: $(GENERATED)
|
||||||
go mod download
|
go mod download
|
||||||
golangci-lint run --timeout=2m ./...
|
golangci-lint run --timeout=2m ./...
|
||||||
|
|
||||||
build.local: build/$(BINARY)
|
|
||||||
|
$(GENERATED): go.mod $(CRD_TYPE_SOURCE) $(OPENAPI)
|
||||||
|
./hack/update-codegen.sh
|
||||||
|
|
||||||
|
$(GENERATED_CRDS): $(GENERATED) $(CRD_SOURCES)
|
||||||
|
go run sigs.k8s.io/controller-tools/cmd/controller-gen crd:crdVersions=v1 paths=./pkg/apis/... output:crd:dir=docs || /bin/true || true
|
||||||
|
mv docs/zalando.org_clusterscalingschedules.yaml docs/cluster_scaling_schedules_crd.yaml
|
||||||
|
mv docs/zalando.org_scalingschedules.yaml docs/scaling_schedules_crd.yaml
|
||||||
|
|
||||||
|
$(OPENAPI): go.mod
|
||||||
|
go run k8s.io/kube-openapi/cmd/openapi-gen \
|
||||||
|
--go-header-file hack/boilerplate.go.txt \
|
||||||
|
--logtostderr \
|
||||||
|
-i k8s.io/metrics/pkg/apis/custom_metrics,k8s.io/metrics/pkg/apis/custom_metrics/v1beta1,k8s.io/metrics/pkg/apis/custom_metrics/v1beta2,k8s.io/metrics/pkg/apis/external_metrics,k8s.io/metrics/pkg/apis/external_metrics/v1beta1,k8s.io/metrics/pkg/apis/metrics,k8s.io/metrics/pkg/apis/metrics/v1beta1,k8s.io/apimachinery/pkg/apis/meta/v1,k8s.io/apimachinery/pkg/api/resource,k8s.io/apimachinery/pkg/version,k8s.io/api/core/v1 \
|
||||||
|
-p pkg/api/generated/openapi \
|
||||||
|
-o . \
|
||||||
|
-O zz_generated.openapi \
|
||||||
|
-r /dev/null
|
||||||
|
|
||||||
|
build.local: build/$(BINARY) $(GENERATED_CRDS)
|
||||||
build.linux: build/linux/$(BINARY)
|
build.linux: build/linux/$(BINARY)
|
||||||
build.osx: build/osx/$(BINARY)
|
build.osx: build/osx/$(BINARY)
|
||||||
|
|
||||||
build/$(BINARY): go.mod $(SOURCES)
|
build/$(BINARY): go.mod $(SOURCES) $(GENERATED)
|
||||||
CGO_ENABLED=0 go build -o build/$(BINARY) $(BUILD_FLAGS) -ldflags "$(LDFLAGS)" .
|
CGO_ENABLED=0 go build -o build/$(BINARY) $(BUILD_FLAGS) -ldflags "$(LDFLAGS)" .
|
||||||
|
|
||||||
build/linux/$(BINARY): go.mod $(SOURCES)
|
build/linux/$(BINARY): go.mod $(SOURCES) $(GENERATED)
|
||||||
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build $(BUILD_FLAGS) -o build/linux/$(BINARY) -ldflags "$(LDFLAGS)" .
|
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build $(BUILD_FLAGS) -o build/linux/$(BINARY) -ldflags "$(LDFLAGS)" .
|
||||||
|
|
||||||
build/osx/$(BINARY): go.mod $(SOURCES)
|
build/osx/$(BINARY): go.mod $(SOURCES) $(GENERATED)
|
||||||
GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 go build $(BUILD_FLAGS) -o build/osx/$(BINARY) -ldflags "$(LDFLAGS)" .
|
GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 go build $(BUILD_FLAGS) -o build/osx/$(BINARY) -ldflags "$(LDFLAGS)" .
|
||||||
|
|
||||||
build.docker: build.linux
|
build.docker: build.linux
|
||||||
|
125
docs/cluster_scaling_schedules_crd.yaml
Normal file
125
docs/cluster_scaling_schedules_crd.yaml
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.5.0
|
||||||
|
creationTimestamp: null
|
||||||
|
name: clusterscalingschedules.zalando.org
|
||||||
|
spec:
|
||||||
|
group: zalando.org
|
||||||
|
names:
|
||||||
|
kind: ClusterScalingSchedule
|
||||||
|
listKind: ClusterScalingScheduleList
|
||||||
|
plural: clusterscalingschedules
|
||||||
|
singular: clusterscalingschedule
|
||||||
|
scope: Cluster
|
||||||
|
versions:
|
||||||
|
- name: v1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: ClusterScalingSchedule describes a cluster scoped time based
|
||||||
|
metric to be used in autoscaling operations.
|
||||||
|
properties:
|
||||||
|
apiVersion:
|
||||||
|
description: 'APIVersion defines the versioned schema of this representation
|
||||||
|
of an object. Servers should convert recognized schemas to the latest
|
||||||
|
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: 'Kind is a string value representing the REST resource this
|
||||||
|
object represents. Servers may infer this from the endpoint the client
|
||||||
|
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
||||||
|
type: string
|
||||||
|
metadata:
|
||||||
|
type: object
|
||||||
|
spec:
|
||||||
|
description: ScalingScheduleSpec is the spec part of the ScalingSchedule.
|
||||||
|
properties:
|
||||||
|
scalingWindowDurationMinutes:
|
||||||
|
description: Fade the scheduled values in and out over this many minutes.
|
||||||
|
If unset, the default per-cluster value will be used.
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
schedules:
|
||||||
|
description: Schedules is the list of schedules for this ScalingSchedule
|
||||||
|
resource. All the schedules defined here will result on the value
|
||||||
|
to the same metric. New metrics require a new ScalingSchedule resource.
|
||||||
|
items:
|
||||||
|
description: Schedule is the schedule details to be used inside
|
||||||
|
a ScalingSchedule.
|
||||||
|
properties:
|
||||||
|
date:
|
||||||
|
description: Defines the starting date of a OneTime schedule.
|
||||||
|
It has to be a RFC3339 formated date.
|
||||||
|
format: date-time
|
||||||
|
type: string
|
||||||
|
durationMinutes:
|
||||||
|
description: The duration in minutes that the configured value
|
||||||
|
will be returned for the defined schedule.
|
||||||
|
type: integer
|
||||||
|
period:
|
||||||
|
description: Defines the details of a Repeating schedule.
|
||||||
|
properties:
|
||||||
|
days:
|
||||||
|
description: The days that this schedule will be active.
|
||||||
|
items:
|
||||||
|
description: ScheduleDay represents the valid inputs for
|
||||||
|
days in a SchedulePeriod.
|
||||||
|
enum:
|
||||||
|
- Sun
|
||||||
|
- Mon
|
||||||
|
- Tue
|
||||||
|
- Wed
|
||||||
|
- Thu
|
||||||
|
- Fri
|
||||||
|
- Sat
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
startTime:
|
||||||
|
description: The startTime has the format HH:MM
|
||||||
|
pattern: (([0-1][0-9])|([2][0-3])):([0-5][0-9])
|
||||||
|
type: string
|
||||||
|
timezone:
|
||||||
|
description: The location name corresponding to a file in
|
||||||
|
the IANA Time Zone database, like Europe/Berlin.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- days
|
||||||
|
- startTime
|
||||||
|
- timezone
|
||||||
|
type: object
|
||||||
|
type:
|
||||||
|
description: Defines if the schedule is a OneTime schedule or
|
||||||
|
Repeating one. If OneTime, date has to be defined. If Repeating,
|
||||||
|
Period has to be defined.
|
||||||
|
enum:
|
||||||
|
- OneTime
|
||||||
|
- Repeating
|
||||||
|
type: string
|
||||||
|
value:
|
||||||
|
description: The metric value that will be returned for the
|
||||||
|
defined schedule.
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- durationMinutes
|
||||||
|
- type
|
||||||
|
- value
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- schedules
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
status:
|
||||||
|
acceptedNames:
|
||||||
|
kind: ""
|
||||||
|
plural: ""
|
||||||
|
conditions: []
|
||||||
|
storedVersions: []
|
@ -1,4 +1,4 @@
|
|||||||
apiVersion: apiregistration.k8s.io/v1beta1
|
apiVersion: apiregistration.k8s.io/v1
|
||||||
kind: APIService
|
kind: APIService
|
||||||
metadata:
|
metadata:
|
||||||
name: v1beta1.custom.metrics.k8s.io
|
name: v1beta1.custom.metrics.k8s.io
|
||||||
|
@ -28,6 +28,7 @@ spec:
|
|||||||
- --prometheus-server=http://prometheus.kube-system.svc.cluster.local
|
- --prometheus-server=http://prometheus.kube-system.svc.cluster.local
|
||||||
- --skipper-ingress-metrics
|
- --skipper-ingress-metrics
|
||||||
- --aws-external-metrics
|
- --aws-external-metrics
|
||||||
|
- --scaling-schedule
|
||||||
env:
|
env:
|
||||||
- name: AWS_REGION
|
- name: AWS_REGION
|
||||||
value: eu-central-1
|
value: eu-central-1
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
apiVersion: apiregistration.k8s.io/v1beta1
|
apiVersion: apiregistration.k8s.io/v1
|
||||||
kind: APIService
|
kind: APIService
|
||||||
metadata:
|
metadata:
|
||||||
name: v1beta1.external.metrics.k8s.io
|
name: v1beta1.external.metrics.k8s.io
|
||||||
|
9
docs/helm/Chart.yaml
Normal file
9
docs/helm/Chart.yaml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: kube-metrics-adapter
|
||||||
|
version: 0.1.11
|
||||||
|
description: kube-metrics-adapter helm chart
|
||||||
|
home: https://github.com/zalando-incubator/kube-metrics-adapter
|
||||||
|
maintainers:
|
||||||
|
- name: The Zalando Incubator
|
||||||
|
email: opensource@zalando.de
|
||||||
|
url: https://github.com/zalando-incubator
|
119
docs/helm/templates/cluster_scaling_schedules_crd.yaml
Normal file
119
docs/helm/templates/cluster_scaling_schedules_crd.yaml
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
{{- if .Values.scalingSchedule.enabled }}
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.5.0
|
||||||
|
creationTimestamp: null
|
||||||
|
name: clusterscalingschedules.zalando.org
|
||||||
|
spec:
|
||||||
|
group: zalando.org
|
||||||
|
names:
|
||||||
|
kind: ClusterScalingSchedule
|
||||||
|
listKind: ClusterScalingScheduleList
|
||||||
|
plural: clusterscalingschedules
|
||||||
|
singular: clusterscalingschedule
|
||||||
|
scope: Cluster
|
||||||
|
versions:
|
||||||
|
- name: v1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: ClusterScalingSchedule describes a cluster scoped time based
|
||||||
|
metric to be used in autoscaling operations.
|
||||||
|
properties:
|
||||||
|
apiVersion:
|
||||||
|
description: 'APIVersion defines the versioned schema of this representation
|
||||||
|
of an object. Servers should convert recognized schemas to the latest
|
||||||
|
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: 'Kind is a string value representing the REST resource this
|
||||||
|
object represents. Servers may infer this from the endpoint the client
|
||||||
|
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
||||||
|
type: string
|
||||||
|
metadata:
|
||||||
|
type: object
|
||||||
|
spec:
|
||||||
|
description: ScalingScheduleSpec is the spec part of the ScalingSchedule.
|
||||||
|
properties:
|
||||||
|
schedules:
|
||||||
|
description: Schedules is the list of schedules for this ScalingSchedule
|
||||||
|
resource. All the schedules defined here will result on the value
|
||||||
|
to the same metric. New metrics require a new ScalingSchedule resource.
|
||||||
|
items:
|
||||||
|
description: Schedule is the schedule details to be used inside
|
||||||
|
a ScalingSchedule.
|
||||||
|
properties:
|
||||||
|
date:
|
||||||
|
description: Defines the starting date of a OneTime schedule.
|
||||||
|
It has to be a RFC3339 formated date.
|
||||||
|
format: date-time
|
||||||
|
type: string
|
||||||
|
durationMinutes:
|
||||||
|
description: The duration in minutes that the configured value
|
||||||
|
will be returned for the defined schedule.
|
||||||
|
type: integer
|
||||||
|
period:
|
||||||
|
description: Defines the details of a Repeating schedule.
|
||||||
|
properties:
|
||||||
|
days:
|
||||||
|
description: The days that this schedule will be active.
|
||||||
|
items:
|
||||||
|
description: ScheduleDay represents the valid inputs for
|
||||||
|
days in a SchedulePeriod.
|
||||||
|
enum:
|
||||||
|
- Sun
|
||||||
|
- Mon
|
||||||
|
- Tue
|
||||||
|
- Wed
|
||||||
|
- Thu
|
||||||
|
- Fri
|
||||||
|
- Sat
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
startTime:
|
||||||
|
description: The startTime has the format HH:MM
|
||||||
|
pattern: (([0-1][0-9])|([2][0-3])):([0-5][0-9])
|
||||||
|
type: string
|
||||||
|
timezone:
|
||||||
|
description: The location name corresponding to a file in
|
||||||
|
the IANA Time Zone database, like Europe/Berlin.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- days
|
||||||
|
- startTime
|
||||||
|
- timezone
|
||||||
|
type: object
|
||||||
|
type:
|
||||||
|
description: Defines if the schedule is a OneTime schedule or
|
||||||
|
Repeating one. If OneTime, date has to be defined. If Repeating,
|
||||||
|
Period has to be defined.
|
||||||
|
enum:
|
||||||
|
- OneTime
|
||||||
|
- Repeating
|
||||||
|
type: string
|
||||||
|
value:
|
||||||
|
description: The metric value that will be returned for the
|
||||||
|
defined schedule.
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- durationMinutes
|
||||||
|
- type
|
||||||
|
- value
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- schedules
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
status:
|
||||||
|
acceptedNames:
|
||||||
|
kind: ""
|
||||||
|
plural: ""
|
||||||
|
conditions: []
|
||||||
|
storedVersions: []
|
||||||
|
{{- end}}
|
15
docs/helm/templates/custom-metrics-apiservice.yaml
Normal file
15
docs/helm/templates/custom-metrics-apiservice.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{{- if .Values.enableCustomMetricsApi }}
|
||||||
|
apiVersion: apiregistration.k8s.io/v1
|
||||||
|
kind: APIService
|
||||||
|
metadata:
|
||||||
|
name: v1beta1.custom.metrics.k8s.io
|
||||||
|
spec:
|
||||||
|
service:
|
||||||
|
name: kube-metrics-adapter
|
||||||
|
namespace: {{ .Values.namespace }}
|
||||||
|
group: custom.metrics.k8s.io
|
||||||
|
version: v1beta1
|
||||||
|
insecureSkipTLSVerify: {{ .Values.tls.skipTLSVerify }}
|
||||||
|
groupPriorityMinimum: 100
|
||||||
|
versionPriority: 100
|
||||||
|
{{- end}}
|
194
docs/helm/templates/deployment.yaml
Normal file
194
docs/helm/templates/deployment.yaml
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: kube-metrics-adapter
|
||||||
|
namespace: {{ .Values.namespace }}
|
||||||
|
labels:
|
||||||
|
application: kube-metrics-adapter
|
||||||
|
version: {{ .Values.registry.imageTag }}
|
||||||
|
spec:
|
||||||
|
replicas: {{ .Values.replicas }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
application: kube-metrics-adapter
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
application: kube-metrics-adapter
|
||||||
|
version: {{ .Values.registry.imageTag }}
|
||||||
|
spec:
|
||||||
|
serviceAccountName: kube-metrics-adapter
|
||||||
|
containers:
|
||||||
|
- name: kube-metrics-adapter
|
||||||
|
image: {{ .Values.registry.image}}:{{ .Values.registry.imageTag }}
|
||||||
|
args:
|
||||||
|
{{- if .Values.addDirectoryHeader }}
|
||||||
|
- --add_dir_header={{ .Values.addDirectoryHeader }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.log.alsoToStderr }}
|
||||||
|
- --alsologtostderr={{ .Values.log.alsoToStderr }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.authentication.kubeConfig }}
|
||||||
|
- --authentication-kubeconfig={{ .Values.authentication.kubeConfig }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.authentication.skipLookup }}
|
||||||
|
- --authentication-skip-lookup={{ .Values.authentication.skipLookup }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.authentication.tokenWebhookCacheTtl }}
|
||||||
|
- --authentication-token-webhook-cache-ttl={{ .Values.authentication.tokenWebhookCacheTtl }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.authentication.tolerateLookupFailure }}
|
||||||
|
- --authentication-tolerate-lookup-failure={{ .Values.authentication.tolerateLookupFailure }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.authorization.alwaysAllowPaths }}
|
||||||
|
- --authorization-always-allow-paths={{ .Values.authorization.alwaysAllowPaths }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.authorization.kubeConfig }}
|
||||||
|
- --authorization-kubeconfig={{ .Values.authorization.kubeConfig }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.authorization.webhookCache.authorizedTtl }}
|
||||||
|
- --authorization-webhook-cache-authorized-ttl={{ .Values.authorization.webhookCache.authorizedTtl }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.authorization.webhookCache.unauthorizedTtl }}
|
||||||
|
- --authorization-webhook-cache-unauthorized-ttl={{ .Values.authorization.webhookCache.unauthorizedTtl }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.aws.externalMetrics }}
|
||||||
|
- --aws-external-metrics={{ .Values.aws.externalMetrics }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.aws.region }}
|
||||||
|
- --aws-region={{ .Values.aws.region }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.tls.certificateDirectory }}
|
||||||
|
- --cert-dir={{ .Values.tls.certificateDirectory }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.tls.clientCaFile }}
|
||||||
|
- --client-ca-file={{ .Values.tls.clientCaFile }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.contentionProfiling }}
|
||||||
|
- --contention-profiling={{ .Values.contentionProfiling }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.credentialsDirectory }}
|
||||||
|
- --credentials-dir={{ .Values.credentialsDirectory }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.disregardIncompatibleHPAs }}
|
||||||
|
- --disregard-incompatible-hpas={{ .Values.disregardIncompatibleHPAs }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.enableCustomMetricsApi }}
|
||||||
|
- --enable-custom-metrics-api={{ .Values.enableCustomMetricsApi }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.enableExternalMetricsApi }}
|
||||||
|
- --enable-external-metrics-api={{ .Values.enableExternalMetricsApi }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.http2MaxStreamsPerConnection }}
|
||||||
|
- --http2-max-streams-per-connection={{ .Values.http2MaxStreamsPerConnection }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.influxDB.address }}
|
||||||
|
- --influxdb-address={{ .Values.influxDB.address }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.influxDB.organization }}
|
||||||
|
- --influxdb-org={{ .Values.influxDB.organization }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.influxDB.token }}
|
||||||
|
- --influxdb-token={{ .Values.influxDB.token }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.listerKubeConfig }}
|
||||||
|
- --lister-kubeconfig={{ .Values.listerKubeConfig }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.log.flushFrequency }}
|
||||||
|
- --log-flush-frequency={{ .Values.log.flushFrequency }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.log.backtraceAtTraceLocation }}
|
||||||
|
- --log_backtrace_at={{ .Values.log.backtraceAtTraceLocation }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.log.directory }}
|
||||||
|
- --log_dir={{ .Values.log.directory }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.log.file }}
|
||||||
|
- --log_file={{ .Values.log.file }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.log.fileMaxSize }}
|
||||||
|
- --log_file_max_size={{ .Values.log.fileMaxSize }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.log.toStderr }}
|
||||||
|
- --logtostderr={{ .Values.log.toStderr }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.prometheus.metricsAddress }}
|
||||||
|
- --metrics-address={{ .Values.prometheus.metricsAddress }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.profiling }}
|
||||||
|
- --profiling={{ .Values.profiling }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.prometheus.server }}
|
||||||
|
- --prometheus-server={{ .Values.prometheus.server }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.requestHeader.allowedNames }}
|
||||||
|
- --requestheader-allowed-names={{ .Values.requestHeader.allowedNames }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.requestHeader.clientCaFile }}
|
||||||
|
- --requestheader-client-ca-file={{ .Values.requestHeader.clientCaFile }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.requestHeader.extraHeadersPrefix }}
|
||||||
|
- --requestheader-extra-headers-prefix={{ .Values.requestHeader.extraHeadersPrefix }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.requestHeader.groupHeaders }}
|
||||||
|
- --requestheader-group-headers={{ .Values.requestHeader.groupHeaders }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.requestHeader.usernameHeaders }}
|
||||||
|
- --requestheader-username-headers={{ .Values.requestHeader.usernameHeaders }}
|
||||||
|
{{- end}}
|
||||||
|
- --secure-port={{ .Values.service.internalPort }}
|
||||||
|
{{- if .Values.log.skipHeaders }}
|
||||||
|
- --skip_headers={{ .Values.log.skipHeaders }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.log.skipLogHeaders }}
|
||||||
|
- --skip_log_headers={{ .Values.log.skipLogHeaders }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.skipperBackendsAnnotation }}
|
||||||
|
- --skipper-backends-annotation={{ .Values.skipperBackendsAnnotation }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.skipperIngressMetrics }}
|
||||||
|
- --skipper-ingress-metrics={{ .Values.skipperIngressMetrics }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.log.stderrThreshold }}
|
||||||
|
- --stderrthreshold={{ .Values.log.stderrThreshold }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.tls.certFile }}
|
||||||
|
- --tls-cert-file={{ .Values.tls.certFile }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.tls.cipherSuites }}
|
||||||
|
- --tls-cipher-suites={{ .Values.tls.cipherSuites }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.tls.minVersion }}
|
||||||
|
- --tls-min-version={{ .Values.tls.minVersion }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.tls.privateKeyFile }}
|
||||||
|
- --tls-private-key-file={{ .Values.tls.privateKeyFile }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.tls.sniCertKey }}
|
||||||
|
- --tls-sni-cert-key={{ .Values.tls.sniCertKey }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.token }}
|
||||||
|
- --token={{ .Values.token }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.log.level }}
|
||||||
|
- --v={{ .Values.log.level }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.vmodule }}
|
||||||
|
- --vmodule={{ .Values.vmodule }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.zmon.kariosdbEndpoint }}
|
||||||
|
- --zmon-kariosdb-endpoint={{ .Values.zmon.kariosdbEndpoint }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.zmon.tokenName }}
|
||||||
|
- --zmon-token-name={{ .Values.zmon.tokenName }}
|
||||||
|
{{- end}}
|
||||||
|
{{- if .Values.scalingSchedule.enabled }}
|
||||||
|
- --scaling-schedule
|
||||||
|
{{- end}}
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: {{ .Values.resources.limits.cpu }}
|
||||||
|
memory: {{ .Values.resources.limits.memory }}
|
||||||
|
requests:
|
||||||
|
cpu: {{ .Values.resources.requests.cpu }}
|
||||||
|
memory: {{ .Values.resources.requests.memory }}
|
15
docs/helm/templates/external-metrics-apiservice.yaml
Normal file
15
docs/helm/templates/external-metrics-apiservice.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{{- if .Values.enableExternalMetricsApi }}
|
||||||
|
apiVersion: apiregistration.k8s.io/v1
|
||||||
|
kind: APIService
|
||||||
|
metadata:
|
||||||
|
name: v1beta1.external.metrics.k8s.io
|
||||||
|
spec:
|
||||||
|
service:
|
||||||
|
name: kube-metrics-adapter
|
||||||
|
namespace: {{ .Values.namespace }}
|
||||||
|
group: external.metrics.k8s.io
|
||||||
|
version: v1beta1
|
||||||
|
insecureSkipTLSVerify: {{ .Values.tls.skipTLSVerify }}
|
||||||
|
groupPriorityMinimum: 100
|
||||||
|
versionPriority: 100
|
||||||
|
{{- end}}
|
165
docs/helm/templates/rbac.yaml
Normal file
165
docs/helm/templates/rbac.yaml
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
name: kube-metrics-adapter-server-resources
|
||||||
|
rules:
|
||||||
|
- apiGroups:
|
||||||
|
- custom.metrics.k8s.io
|
||||||
|
resources: ["*"]
|
||||||
|
verbs: ["*"]
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
name: external-metrics-server-resources
|
||||||
|
rules:
|
||||||
|
- apiGroups:
|
||||||
|
- external.metrics.k8s.io
|
||||||
|
resources: ["*"]
|
||||||
|
verbs: ["*"]
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
name: kube-metrics-adapter-resource-reader
|
||||||
|
rules:
|
||||||
|
- apiGroups:
|
||||||
|
- ""
|
||||||
|
resources:
|
||||||
|
- namespaces
|
||||||
|
- pods
|
||||||
|
- services
|
||||||
|
- configmaps
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
name: kube-metrics-adapter-resource-collector
|
||||||
|
rules:
|
||||||
|
- apiGroups:
|
||||||
|
- ""
|
||||||
|
resources:
|
||||||
|
- events
|
||||||
|
verbs:
|
||||||
|
- create
|
||||||
|
- patch
|
||||||
|
- apiGroups:
|
||||||
|
- ""
|
||||||
|
resources:
|
||||||
|
- pods
|
||||||
|
verbs:
|
||||||
|
- list
|
||||||
|
- apiGroups:
|
||||||
|
- apps
|
||||||
|
resources:
|
||||||
|
- deployments
|
||||||
|
- statefulsets
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- apiGroups:
|
||||||
|
- extensions
|
||||||
|
resources:
|
||||||
|
- ingresses
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- apiGroups:
|
||||||
|
- autoscaling
|
||||||
|
resources:
|
||||||
|
- horizontalpodautoscalers
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
{{- if .Values.scalingSchedule.enabled }}
|
||||||
|
- apiGroups:
|
||||||
|
- zalando.org
|
||||||
|
resources:
|
||||||
|
- clusterscalingschedules
|
||||||
|
- scalingschedules
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
{{- end}}
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: hpa-controller-custom-metrics
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: kube-metrics-adapter-server-resources
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: horizontal-pod-autoscaler
|
||||||
|
namespace: kube-system
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: hpa-controller-external-metrics
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: external-metrics-server-resources
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: horizontal-pod-autoscaler
|
||||||
|
namespace: kube-system
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: kube-metrics-adapter-auth-reader
|
||||||
|
namespace: kube-system
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Role
|
||||||
|
name: extension-apiserver-authentication-reader
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: kube-metrics-adapter
|
||||||
|
namespace: {{ .Values.namespace }}
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: custom-metrics:system:auth-delegator
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: system:auth-delegator
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: kube-metrics-adapter
|
||||||
|
namespace: {{ .Values.namespace }}
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: kube-metrics-adapter-resource-collector
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: kube-metrics-adapter-resource-collector
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: kube-metrics-adapter
|
||||||
|
namespace: {{ .Values.namespace }}
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: kube-metrics-adapter-resource-reader
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: kube-metrics-adapter-resource-reader
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: kube-metrics-adapter
|
||||||
|
namespace: {{ .Values.namespace }}
|
119
docs/helm/templates/scaling_schedules_crd.yaml
Normal file
119
docs/helm/templates/scaling_schedules_crd.yaml
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
{{- if .Values.scalingSchedule.enabled }}
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.5.0
|
||||||
|
creationTimestamp: null
|
||||||
|
name: scalingschedules.zalando.org
|
||||||
|
spec:
|
||||||
|
group: zalando.org
|
||||||
|
names:
|
||||||
|
kind: ScalingSchedule
|
||||||
|
listKind: ScalingScheduleList
|
||||||
|
plural: scalingschedules
|
||||||
|
singular: scalingschedule
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: ScalingSchedule describes a namespaced time based metric to be
|
||||||
|
used in autoscaling operations.
|
||||||
|
properties:
|
||||||
|
apiVersion:
|
||||||
|
description: 'APIVersion defines the versioned schema of this representation
|
||||||
|
of an object. Servers should convert recognized schemas to the latest
|
||||||
|
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: 'Kind is a string value representing the REST resource this
|
||||||
|
object represents. Servers may infer this from the endpoint the client
|
||||||
|
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
||||||
|
type: string
|
||||||
|
metadata:
|
||||||
|
type: object
|
||||||
|
spec:
|
||||||
|
description: ScalingScheduleSpec is the spec part of the ScalingSchedule.
|
||||||
|
properties:
|
||||||
|
schedules:
|
||||||
|
description: Schedules is the list of schedules for this ScalingSchedule
|
||||||
|
resource. All the schedules defined here will result on the value
|
||||||
|
to the same metric. New metrics require a new ScalingSchedule resource.
|
||||||
|
items:
|
||||||
|
description: Schedule is the schedule details to be used inside
|
||||||
|
a ScalingSchedule.
|
||||||
|
properties:
|
||||||
|
date:
|
||||||
|
description: Defines the starting date of a OneTime schedule.
|
||||||
|
It has to be a RFC3339 formated date.
|
||||||
|
format: date-time
|
||||||
|
type: string
|
||||||
|
durationMinutes:
|
||||||
|
description: The duration in minutes that the configured value
|
||||||
|
will be returned for the defined schedule.
|
||||||
|
type: integer
|
||||||
|
period:
|
||||||
|
description: Defines the details of a Repeating schedule.
|
||||||
|
properties:
|
||||||
|
days:
|
||||||
|
description: The days that this schedule will be active.
|
||||||
|
items:
|
||||||
|
description: ScheduleDay represents the valid inputs for
|
||||||
|
days in a SchedulePeriod.
|
||||||
|
enum:
|
||||||
|
- Sun
|
||||||
|
- Mon
|
||||||
|
- Tue
|
||||||
|
- Wed
|
||||||
|
- Thu
|
||||||
|
- Fri
|
||||||
|
- Sat
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
startTime:
|
||||||
|
description: The startTime has the format HH:MM
|
||||||
|
pattern: (([0-1][0-9])|([2][0-3])):([0-5][0-9])
|
||||||
|
type: string
|
||||||
|
timezone:
|
||||||
|
description: The location name corresponding to a file in
|
||||||
|
the IANA Time Zone database, like Europe/Berlin.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- days
|
||||||
|
- startTime
|
||||||
|
- timezone
|
||||||
|
type: object
|
||||||
|
type:
|
||||||
|
description: Defines if the schedule is a OneTime schedule or
|
||||||
|
Repeating one. If OneTime, date has to be defined. If Repeating,
|
||||||
|
Period has to be defined.
|
||||||
|
enum:
|
||||||
|
- OneTime
|
||||||
|
- Repeating
|
||||||
|
type: string
|
||||||
|
value:
|
||||||
|
description: The metric value that will be returned for the
|
||||||
|
defined schedule.
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- durationMinutes
|
||||||
|
- type
|
||||||
|
- value
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- schedules
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
status:
|
||||||
|
acceptedNames:
|
||||||
|
kind: ""
|
||||||
|
plural: ""
|
||||||
|
conditions: []
|
||||||
|
storedVersions: []
|
||||||
|
{{- end}}
|
5
docs/helm/templates/service-account.yaml
Normal file
5
docs/helm/templates/service-account.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
kind: ServiceAccount
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: kube-metrics-adapter
|
||||||
|
namespace: {{ .Values.namespace }}
|
11
docs/helm/templates/service.yaml
Normal file
11
docs/helm/templates/service.yaml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: kube-metrics-adapter
|
||||||
|
namespace: {{ .Values.namespace }}
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: {{ .Values.service.port }}
|
||||||
|
targetPort: {{ .Values.service.internalPort }}
|
||||||
|
selector:
|
||||||
|
application: kube-metrics-adapter
|
97
docs/helm/values.yaml
Normal file
97
docs/helm/values.yaml
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
namespace: kube-system
|
||||||
|
|
||||||
|
replicas: 1
|
||||||
|
|
||||||
|
registry:
|
||||||
|
image: registry.opensource.zalan.do/teapot/kube-metrics-adapter
|
||||||
|
imageTag: v0.1.10
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
service:
|
||||||
|
port: 443
|
||||||
|
internalPort: 443
|
||||||
|
|
||||||
|
addDirectoryHeader:
|
||||||
|
contentionProfiling:
|
||||||
|
profiling:
|
||||||
|
enableCustomMetricsApi:
|
||||||
|
enableExternalMetricsApi:
|
||||||
|
credentialsDirectory:
|
||||||
|
disregardIncompatibleHPAs:
|
||||||
|
http2MaxStreamsPerConnection:
|
||||||
|
listerKubeConfig:
|
||||||
|
skipperBackendsAnnotation:
|
||||||
|
skipperIngressMetrics:
|
||||||
|
token:
|
||||||
|
vmodule:
|
||||||
|
|
||||||
|
authentication:
|
||||||
|
kubeConfig:
|
||||||
|
skipLookup:
|
||||||
|
tokenWebhookCacheTtl:
|
||||||
|
tolerateLookupFailure:
|
||||||
|
|
||||||
|
authorization:
|
||||||
|
kubeConfig:
|
||||||
|
alwaysAllowPaths:
|
||||||
|
webhookCache:
|
||||||
|
authorizedTtl:
|
||||||
|
unauthorizedTtl:
|
||||||
|
|
||||||
|
aws:
|
||||||
|
externalMetrics:
|
||||||
|
region:
|
||||||
|
|
||||||
|
influxDB:
|
||||||
|
address:
|
||||||
|
organization:
|
||||||
|
token:
|
||||||
|
|
||||||
|
log:
|
||||||
|
alsoToStderr:
|
||||||
|
toStderr:
|
||||||
|
flushFrequency:
|
||||||
|
backtraceAtTraceLocation:
|
||||||
|
directory:
|
||||||
|
file:
|
||||||
|
fileMaxSize:
|
||||||
|
level:
|
||||||
|
stderrThreshold:
|
||||||
|
skipHeaders:
|
||||||
|
skipLogHeaders:
|
||||||
|
|
||||||
|
prometheus:
|
||||||
|
server: http://prometheus.kube-system.svc.cluster.local
|
||||||
|
metricsAddress:
|
||||||
|
|
||||||
|
requestHeader:
|
||||||
|
allowedNames:
|
||||||
|
clientCaFile:
|
||||||
|
extraHeadersPrefix:
|
||||||
|
groupHeaders:
|
||||||
|
usernameHeaders:
|
||||||
|
|
||||||
|
tls:
|
||||||
|
skipTLSVerify: true
|
||||||
|
certificateDirectory:
|
||||||
|
clientCaFile:
|
||||||
|
certFile:
|
||||||
|
cipherSuites:
|
||||||
|
minVersion:
|
||||||
|
privateKeyFile:
|
||||||
|
sniCertKey:
|
||||||
|
|
||||||
|
zmon:
|
||||||
|
kariosdbEndpoint:
|
||||||
|
tokenName:
|
||||||
|
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 100Mi
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 100Mi
|
||||||
|
|
||||||
|
scalingSchedule:
|
||||||
|
enabled: false
|
@ -64,12 +64,23 @@ rules:
|
|||||||
- statefulsets
|
- statefulsets
|
||||||
verbs:
|
verbs:
|
||||||
- get
|
- get
|
||||||
|
# only relevant if running with the flag:
|
||||||
|
# --skipper-ingress-metrics
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- extensions
|
- extensions
|
||||||
|
- networking.k8s.io
|
||||||
resources:
|
resources:
|
||||||
- ingresses
|
- ingresses
|
||||||
verbs:
|
verbs:
|
||||||
- get
|
- get
|
||||||
|
# only relevant if running with the flag:
|
||||||
|
# --skipper-routegroup-metrics
|
||||||
|
- apiGroups:
|
||||||
|
- zalando.org
|
||||||
|
resources:
|
||||||
|
- routegroups
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- autoscaling
|
- autoscaling
|
||||||
resources:
|
resources:
|
||||||
@ -78,6 +89,15 @@ rules:
|
|||||||
- get
|
- get
|
||||||
- list
|
- list
|
||||||
- watch
|
- watch
|
||||||
|
- apiGroups:
|
||||||
|
- zalando.org
|
||||||
|
resources:
|
||||||
|
- clusterscalingschedules
|
||||||
|
- scalingschedules
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
---
|
---
|
||||||
apiVersion: rbac.authorization.k8s.io/v1
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
kind: ClusterRoleBinding
|
kind: ClusterRoleBinding
|
||||||
|
125
docs/scaling_schedules_crd.yaml
Normal file
125
docs/scaling_schedules_crd.yaml
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.5.0
|
||||||
|
creationTimestamp: null
|
||||||
|
name: scalingschedules.zalando.org
|
||||||
|
spec:
|
||||||
|
group: zalando.org
|
||||||
|
names:
|
||||||
|
kind: ScalingSchedule
|
||||||
|
listKind: ScalingScheduleList
|
||||||
|
plural: scalingschedules
|
||||||
|
singular: scalingschedule
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: ScalingSchedule describes a namespaced time based metric to be
|
||||||
|
used in autoscaling operations.
|
||||||
|
properties:
|
||||||
|
apiVersion:
|
||||||
|
description: 'APIVersion defines the versioned schema of this representation
|
||||||
|
of an object. Servers should convert recognized schemas to the latest
|
||||||
|
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: 'Kind is a string value representing the REST resource this
|
||||||
|
object represents. Servers may infer this from the endpoint the client
|
||||||
|
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
||||||
|
type: string
|
||||||
|
metadata:
|
||||||
|
type: object
|
||||||
|
spec:
|
||||||
|
description: ScalingScheduleSpec is the spec part of the ScalingSchedule.
|
||||||
|
properties:
|
||||||
|
scalingWindowDurationMinutes:
|
||||||
|
description: Fade the scheduled values in and out over this many minutes.
|
||||||
|
If unset, the default per-cluster value will be used.
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
schedules:
|
||||||
|
description: Schedules is the list of schedules for this ScalingSchedule
|
||||||
|
resource. All the schedules defined here will result on the value
|
||||||
|
to the same metric. New metrics require a new ScalingSchedule resource.
|
||||||
|
items:
|
||||||
|
description: Schedule is the schedule details to be used inside
|
||||||
|
a ScalingSchedule.
|
||||||
|
properties:
|
||||||
|
date:
|
||||||
|
description: Defines the starting date of a OneTime schedule.
|
||||||
|
It has to be a RFC3339 formated date.
|
||||||
|
format: date-time
|
||||||
|
type: string
|
||||||
|
durationMinutes:
|
||||||
|
description: The duration in minutes that the configured value
|
||||||
|
will be returned for the defined schedule.
|
||||||
|
type: integer
|
||||||
|
period:
|
||||||
|
description: Defines the details of a Repeating schedule.
|
||||||
|
properties:
|
||||||
|
days:
|
||||||
|
description: The days that this schedule will be active.
|
||||||
|
items:
|
||||||
|
description: ScheduleDay represents the valid inputs for
|
||||||
|
days in a SchedulePeriod.
|
||||||
|
enum:
|
||||||
|
- Sun
|
||||||
|
- Mon
|
||||||
|
- Tue
|
||||||
|
- Wed
|
||||||
|
- Thu
|
||||||
|
- Fri
|
||||||
|
- Sat
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
startTime:
|
||||||
|
description: The startTime has the format HH:MM
|
||||||
|
pattern: (([0-1][0-9])|([2][0-3])):([0-5][0-9])
|
||||||
|
type: string
|
||||||
|
timezone:
|
||||||
|
description: The location name corresponding to a file in
|
||||||
|
the IANA Time Zone database, like Europe/Berlin.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- days
|
||||||
|
- startTime
|
||||||
|
- timezone
|
||||||
|
type: object
|
||||||
|
type:
|
||||||
|
description: Defines if the schedule is a OneTime schedule or
|
||||||
|
Repeating one. If OneTime, date has to be defined. If Repeating,
|
||||||
|
Period has to be defined.
|
||||||
|
enum:
|
||||||
|
- OneTime
|
||||||
|
- Repeating
|
||||||
|
type: string
|
||||||
|
value:
|
||||||
|
description: The metric value that will be returned for the
|
||||||
|
defined schedule.
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- durationMinutes
|
||||||
|
- type
|
||||||
|
- value
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- schedules
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
status:
|
||||||
|
acceptedNames:
|
||||||
|
kind: ""
|
||||||
|
plural: ""
|
||||||
|
conditions: []
|
||||||
|
storedVersions: []
|
@ -6,7 +6,7 @@ metadata:
|
|||||||
labels:
|
labels:
|
||||||
application: custom-metrics-consumer
|
application: custom-metrics-consumer
|
||||||
annotations:
|
annotations:
|
||||||
# metric-config.<metricType>.<metricName>.<collectorName>/<configKey>
|
# metric-config.<metricType>.<metricName>.<collectorType>/<configKey>
|
||||||
metric-config.pods.queue-length.json-path/json-key: "$.queue.length"
|
metric-config.pods.queue-length.json-path/json-key: "$.queue.length"
|
||||||
metric-config.pods.queue-length.json-path/path: /metrics
|
metric-config.pods.queue-length.json-path/path: /metrics
|
||||||
metric-config.pods.queue-length.json-path/port: "9090"
|
metric-config.pods.queue-length.json-path/port: "9090"
|
||||||
@ -50,9 +50,10 @@ spec:
|
|||||||
- type: External
|
- type: External
|
||||||
external:
|
external:
|
||||||
metric:
|
metric:
|
||||||
name: sqs-queue-length
|
name: app-queue-length
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
|
type: sqs-queue-length
|
||||||
queue-name: foobar
|
queue-name: foobar
|
||||||
region: eu-central-1
|
region: eu-central-1
|
||||||
target:
|
target:
|
||||||
|
48
go.mod
48
go.mod
@ -2,30 +2,34 @@ module github.com/zalando-incubator/kube-metrics-adapter
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/NYTimes/gziphandler v1.0.1 // indirect
|
github.com/NYTimes/gziphandler v1.0.1 // indirect
|
||||||
github.com/aws/aws-sdk-go v1.33.5
|
github.com/aws/aws-sdk-go v1.40.22
|
||||||
github.com/googleapis/gnostic v0.2.0 // indirect
|
github.com/go-openapi/spec v0.20.3
|
||||||
github.com/influxdata/influxdb-client-go v0.1.5
|
github.com/influxdata/influxdb-client-go v0.2.0
|
||||||
github.com/kubernetes-incubator/custom-metrics-apiserver v0.0.0-20200618121405-54026617ec44
|
github.com/influxdata/line-protocol v0.0.0-20201012155213-5f565037cbc9 // indirect
|
||||||
github.com/lib/pq v1.2.0 // indirect
|
github.com/kubernetes-sigs/custom-metrics-apiserver v0.0.0-20201216091021-1b9fa998bbaa
|
||||||
github.com/mattn/go-colorable v0.1.4 // indirect
|
github.com/mailru/easyjson v0.7.7 // indirect
|
||||||
github.com/onsi/gomega v1.8.1 // indirect
|
github.com/prometheus/client_golang v1.11.0
|
||||||
github.com/prometheus/client_golang v1.7.1
|
github.com/prometheus/common v0.26.0
|
||||||
github.com/prometheus/common v0.10.0
|
github.com/sirupsen/logrus v1.8.1
|
||||||
github.com/sirupsen/logrus v1.6.0
|
github.com/spf13/cobra v1.1.3
|
||||||
github.com/spf13/cobra v0.0.7
|
|
||||||
github.com/spyzhov/ajson v0.4.2
|
github.com/spyzhov/ajson v0.4.2
|
||||||
github.com/stretchr/testify v1.6.1
|
github.com/stretchr/testify v1.7.0
|
||||||
|
github.com/szuecs/routegroup-client v0.18.3
|
||||||
github.com/zalando-incubator/cluster-lifecycle-manager v0.0.0-20180921141935-824b77fb1f84
|
github.com/zalando-incubator/cluster-lifecycle-manager v0.0.0-20180921141935-824b77fb1f84
|
||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45
|
go.uber.org/zap v1.13.0 // indirect
|
||||||
golang.org/x/tools v0.0.0-20200204192400-7124308813f3 // indirect
|
golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392 // indirect
|
||||||
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e // indirect
|
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
|
||||||
honnef.co/go/tools v0.0.1-2020.1.3 // indirect
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
|
||||||
k8s.io/api v0.18.5
|
k8s.io/api v0.20.9
|
||||||
k8s.io/apimachinery v0.18.5
|
k8s.io/apimachinery v0.20.9
|
||||||
k8s.io/client-go v0.18.5
|
k8s.io/apiserver v0.20.9
|
||||||
k8s.io/component-base v0.18.5
|
k8s.io/client-go v0.20.9
|
||||||
|
k8s.io/code-generator v0.20.9
|
||||||
|
k8s.io/component-base v0.20.9
|
||||||
k8s.io/klog v1.0.0
|
k8s.io/klog v1.0.0
|
||||||
k8s.io/metrics v0.18.5
|
k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd
|
||||||
|
k8s.io/metrics v0.20.9
|
||||||
|
sigs.k8s.io/controller-tools v0.5.0
|
||||||
)
|
)
|
||||||
|
|
||||||
go 1.13
|
go 1.16
|
||||||
|
16
hack/boilerplate.go.txt
Normal file
16
hack/boilerplate.go.txt
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/*
|
||||||
|
Copyright The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
23
hack/tools.go
Normal file
23
hack/tools.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// +build tools
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright 2019 The Kubernetes Authors.
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// This package imports things required by build scripts, to force `go mod` to see them as dependencies
|
||||||
|
package tools
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "k8s.io/code-generator"
|
||||||
|
_ "k8s.io/kube-openapi/cmd/openapi-gen"
|
||||||
|
_ "sigs.k8s.io/controller-tools/cmd/controller-gen"
|
||||||
|
)
|
74
hack/update-codegen.sh
Executable file
74
hack/update-codegen.sh
Executable file
@ -0,0 +1,74 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copyright 2017 The Kubernetes Authors.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
SRC="github.com"
|
||||||
|
GOPKG="${SRC}/zalando-incubator/kube-metrics-adapter"
|
||||||
|
CUSTOM_RESOURCE_NAME="zalando.org"
|
||||||
|
CUSTOM_RESOURCE_VERSION="v1"
|
||||||
|
|
||||||
|
SCRIPT_ROOT="$(dirname "${BASH_SOURCE[0]}")/.."
|
||||||
|
OUTPUT_BASE="$(dirname "${BASH_SOURCE[0]}")/"
|
||||||
|
|
||||||
|
# generate the code with:
|
||||||
|
# --output-base because this script should also be able to run inside the vendor dir of
|
||||||
|
# k8s.io/kubernetes. The output-base is needed for the generators to output into the vendor dir
|
||||||
|
# instead of the $GOPATH directly. For normal projects this can be dropped.
|
||||||
|
|
||||||
|
OUTPUT_PKG="${GOPKG}/pkg/client"
|
||||||
|
APIS_PKG="${GOPKG}/pkg/apis"
|
||||||
|
GROUPS_WITH_VERSIONS="${CUSTOM_RESOURCE_NAME}:${CUSTOM_RESOURCE_VERSION}"
|
||||||
|
|
||||||
|
echo "Generating deepcopy funcs"
|
||||||
|
go run k8s.io/code-generator/cmd/deepcopy-gen \
|
||||||
|
--input-dirs "${APIS_PKG}/${CUSTOM_RESOURCE_NAME}/${CUSTOM_RESOURCE_VERSION}" \
|
||||||
|
-O zz_generated.deepcopy \
|
||||||
|
--bounding-dirs "${APIS_PKG}" \
|
||||||
|
--go-header-file "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \
|
||||||
|
--output-base "$OUTPUT_BASE"
|
||||||
|
|
||||||
|
echo "Generating clientset for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/${CLIENTSET_PKG_NAME:-clientset}"
|
||||||
|
go run k8s.io/code-generator/cmd/client-gen \
|
||||||
|
--clientset-name versioned \
|
||||||
|
--input-base "" \
|
||||||
|
--input "${APIS_PKG}/${CUSTOM_RESOURCE_NAME}/${CUSTOM_RESOURCE_VERSION}" \
|
||||||
|
--output-package "${OUTPUT_PKG}/clientset" \
|
||||||
|
--go-header-file "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \
|
||||||
|
--output-base "$OUTPUT_BASE"
|
||||||
|
|
||||||
|
echo "Generating listers for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/listers"
|
||||||
|
go run k8s.io/code-generator/cmd/lister-gen \
|
||||||
|
--input-dirs "${APIS_PKG}/${CUSTOM_RESOURCE_NAME}/${CUSTOM_RESOURCE_VERSION}" \
|
||||||
|
--output-package "${OUTPUT_PKG}/listers" \
|
||||||
|
--go-header-file "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \
|
||||||
|
--output-base "$OUTPUT_BASE"
|
||||||
|
|
||||||
|
echo "Generating informers for ${GROUPS_WITH_VERSIONS} at ${OUTPUT_PKG}/informers"
|
||||||
|
go run k8s.io/code-generator/cmd/informer-gen \
|
||||||
|
--input-dirs "${APIS_PKG}/${CUSTOM_RESOURCE_NAME}/${CUSTOM_RESOURCE_VERSION}" \
|
||||||
|
--versioned-clientset-package "${OUTPUT_PKG}/${CLIENTSET_PKG_NAME:-clientset}/${CLIENTSET_NAME_VERSIONED:-versioned}" \
|
||||||
|
--listers-package "${OUTPUT_PKG}/listers" \
|
||||||
|
--output-package "${OUTPUT_PKG}/informers" \
|
||||||
|
--go-header-file "${SCRIPT_ROOT}/hack/boilerplate.go.txt" \
|
||||||
|
--output-base "$OUTPUT_BASE"
|
||||||
|
|
||||||
|
# hack to make the generated code work with Go module based projects
|
||||||
|
cp -r "$OUTPUT_BASE/$GOPKG/pkg/apis" ./pkg
|
||||||
|
cp -r "$OUTPUT_BASE/$GOPKG/pkg/client" ./pkg
|
||||||
|
rm -rf "${OUTPUT_BASE:?}${SRC}"
|
@ -12,13 +12,15 @@ const (
|
|||||||
customMetricsPrefix = "metric-config."
|
customMetricsPrefix = "metric-config."
|
||||||
perReplicaMetricsConfKey = "per-replica"
|
perReplicaMetricsConfKey = "per-replica"
|
||||||
intervalMetricsConfKey = "interval"
|
intervalMetricsConfKey = "interval"
|
||||||
|
minPodReadyAgeConfKey = "min-pod-ready-age"
|
||||||
)
|
)
|
||||||
|
|
||||||
type AnnotationConfigs struct {
|
type AnnotationConfigs struct {
|
||||||
CollectorName string
|
CollectorType string
|
||||||
Configs map[string]string
|
Configs map[string]string
|
||||||
PerReplica bool
|
PerReplica bool
|
||||||
Interval time.Duration
|
Interval time.Duration
|
||||||
|
MinPodReadyAge time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
type MetricConfigKey struct {
|
type MetricConfigKey struct {
|
||||||
@ -64,14 +66,14 @@ func (m AnnotationConfigMap) Parse(annotations map[string]string) error {
|
|||||||
config, ok := m[key]
|
config, ok := m[key]
|
||||||
if !ok {
|
if !ok {
|
||||||
config = &AnnotationConfigs{
|
config = &AnnotationConfigs{
|
||||||
CollectorName: metricCollector,
|
CollectorType: metricCollector,
|
||||||
Configs: map[string]string{},
|
Configs: map[string]string{},
|
||||||
}
|
}
|
||||||
m[key] = config
|
m[key] = config
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: fail if collector name doesn't match
|
// TODO: fail if collector name doesn't match
|
||||||
if config.CollectorName != metricCollector {
|
if config.CollectorType != metricCollector {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,6 +91,15 @@ func (m AnnotationConfigMap) Parse(annotations map[string]string) error {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if parts[1] == minPodReadyAgeConfKey {
|
||||||
|
minPodReadyAge, err := time.ParseDuration(val)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to parse min-pod-ready-age value %s for %s: %v", val, key, err)
|
||||||
|
}
|
||||||
|
config.MinPodReadyAge = minPodReadyAge
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
config.Configs[parts[1]] = val
|
config.Configs[parts[1]] = val
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -24,10 +24,11 @@ func TestParser(t *testing.T) {
|
|||||||
{
|
{
|
||||||
Name: "pod metrics",
|
Name: "pod metrics",
|
||||||
Annotations: map[string]string{
|
Annotations: map[string]string{
|
||||||
"metric-config.pods.requests-per-second.json-path/json-key": "$.http_server.rps",
|
"metric-config.pods.requests-per-second.json-path/json-key": "$.http_server.rps",
|
||||||
"metric-config.pods.requests-per-second.json-path/path": "/metrics",
|
"metric-config.pods.requests-per-second.json-path/path": "/metrics",
|
||||||
"metric-config.pods.requests-per-second.json-path/port": "9090",
|
"metric-config.pods.requests-per-second.json-path/port": "9090",
|
||||||
"metric-config.pods.requests-per-second.json-path/scheme": "https",
|
"metric-config.pods.requests-per-second.json-path/scheme": "https",
|
||||||
|
"metric-config.pods.requests-per-second.json-path/min-pod-ready-age": "30s",
|
||||||
},
|
},
|
||||||
MetricName: "requests-per-second",
|
MetricName: "requests-per-second",
|
||||||
MetricType: autoscalingv2.PodsMetricSourceType,
|
MetricType: autoscalingv2.PodsMetricSourceType,
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user