mirror of
https://github.com/zalando-incubator/kube-metrics-adapter.git
synced 2025-05-12 16:32:00 +00:00
Compare commits
1 Commits
gh-pages
...
scheduled-
Author | SHA1 | Date | |
---|---|---|---|
60042604f9 |
35
.github/CODEOWNERS
vendored
Normal file
35
.github/CODEOWNERS
vendored
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# These owners will be the default owners for everything in
|
||||||
|
# the repo.
|
||||||
|
* @arjunrn
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Samples for assigning codeowners below:
|
||||||
|
# Order is important; the last matching pattern takes the most
|
||||||
|
# precedence. When someone opens a pull request that only
|
||||||
|
# modifies JS files, only @js-owner and not the global
|
||||||
|
# owner(s) will be requested for a review.
|
||||||
|
# *.js @js-owner
|
||||||
|
|
||||||
|
# You can also use email addresses if you prefer. They'll be
|
||||||
|
# used to look up users just like we do for commit author
|
||||||
|
# emails.
|
||||||
|
# *.go docs@example.com
|
||||||
|
|
||||||
|
# In this example, @doctocat owns any files in the build/logs
|
||||||
|
# directory at the root of the repository and any of its
|
||||||
|
# subdirectories.
|
||||||
|
# /build/logs/ @doctocat
|
||||||
|
|
||||||
|
# The `docs/*` pattern will match files like
|
||||||
|
# `docs/getting-started.md` but not further nested files like
|
||||||
|
# `docs/build-app/troubleshooting.md`.
|
||||||
|
# docs/* docs@example.com
|
||||||
|
|
||||||
|
# In this example, @octocat owns any file in an apps directory
|
||||||
|
# anywhere in your repository.
|
||||||
|
# apps/ @octocat
|
||||||
|
|
||||||
|
# In this example, @doctocat owns any file in the `/docs`
|
||||||
|
# directory in the root of your repository.
|
||||||
|
# /docs/ @doctocat
|
17
.github/ISSUE_TEMPLATE.md
vendored
Normal file
17
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
## Expected Behavior
|
||||||
|
|
||||||
|
|
||||||
|
## Actual Behavior
|
||||||
|
|
||||||
|
|
||||||
|
## Steps to Reproduce the Problem
|
||||||
|
|
||||||
|
1.
|
||||||
|
1.
|
||||||
|
1.
|
||||||
|
|
||||||
|
## Specifications
|
||||||
|
|
||||||
|
- Version:
|
||||||
|
- Platform:
|
||||||
|
- Subsystem:
|
31
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
31
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# One-line summary
|
||||||
|
|
||||||
|
> Issue : #1234 (only if appropriate)
|
||||||
|
|
||||||
|
## Description
|
||||||
|
A few sentences describing the overall goals of the pull request's
|
||||||
|
commits.
|
||||||
|
|
||||||
|
## Types of Changes
|
||||||
|
_What types of changes does your code introduce? Keep the ones that apply:_
|
||||||
|
|
||||||
|
- New feature (non-breaking change which adds functionality)
|
||||||
|
- Bug fix (non-breaking change which fixes an issue)
|
||||||
|
- Configuration change
|
||||||
|
- Refactor/improvements
|
||||||
|
- Documentation / non-code
|
||||||
|
|
||||||
|
## Tasks
|
||||||
|
_List of tasks you will do to complete the PR_
|
||||||
|
- [ ] Created Task 1
|
||||||
|
- [ ] Created Task 2
|
||||||
|
- [ ] To-do Task 3
|
||||||
|
|
||||||
|
## Review
|
||||||
|
_List of tasks the reviewer must do to review the PR_
|
||||||
|
- [ ] Tests
|
||||||
|
- [ ] Documentation
|
||||||
|
- [ ] CHANGELOG
|
||||||
|
|
||||||
|
## Deployment Notes
|
||||||
|
These should highlight any db migrations, feature toggles, etc.
|
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
build/
|
||||||
|
apiserver.local.config/
|
||||||
|
.idea/
|
||||||
|
vendor/
|
19
.golangci.yml
Normal file
19
.golangci.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
run:
|
||||||
|
linters-settings:
|
||||||
|
golint:
|
||||||
|
min-confidence: 0.9
|
||||||
|
|
||||||
|
linters:
|
||||||
|
disable-all: true
|
||||||
|
enable:
|
||||||
|
- staticcheck
|
||||||
|
- ineffassign
|
||||||
|
- golint
|
||||||
|
- goimports
|
||||||
|
- errcheck
|
||||||
|
issues:
|
||||||
|
exclude-rules:
|
||||||
|
# Exclude some staticcheck messages
|
||||||
|
- linters:
|
||||||
|
- staticcheck
|
||||||
|
text: "SA9003:"
|
20
.travis.yml
Normal file
20
.travis.yml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
language: go
|
||||||
|
dist: xenial
|
||||||
|
|
||||||
|
go:
|
||||||
|
- "1.13.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
|
9
.zappr.yaml
Normal file
9
.zappr.yaml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# for github.com
|
||||||
|
approvals:
|
||||||
|
groups:
|
||||||
|
zalando:
|
||||||
|
minimum: 2
|
||||||
|
from:
|
||||||
|
orgs:
|
||||||
|
- "zalando"
|
||||||
|
X-Zalando-Team: teapot
|
74
CODE_OF_CONDUCT.md
Normal file
74
CODE_OF_CONDUCT.md
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
In the interest of fostering an open and welcoming environment, we as
|
||||||
|
contributors and maintainers pledge to making participation in our project and
|
||||||
|
our community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, disability, ethnicity, gender identity and expression, level of experience,
|
||||||
|
nationality, personal appearance, race, religion, or sexual identity and
|
||||||
|
orientation.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to creating a positive environment
|
||||||
|
include:
|
||||||
|
|
||||||
|
* Using welcoming and inclusive language
|
||||||
|
* Being respectful of differing viewpoints and experiences
|
||||||
|
* Gracefully accepting constructive criticism
|
||||||
|
* Focusing on what is best for the community
|
||||||
|
* Showing empathy towards other community members
|
||||||
|
|
||||||
|
Examples of unacceptable behavior by participants include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||||
|
advances
|
||||||
|
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or electronic
|
||||||
|
address, without explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Our Responsibilities
|
||||||
|
|
||||||
|
Project maintainers are responsible for clarifying the standards of acceptable
|
||||||
|
behavior and are expected to take appropriate and fair corrective action in
|
||||||
|
response to any instances of unacceptable behavior.
|
||||||
|
|
||||||
|
Project maintainers have the right and responsibility to remove, edit, or
|
||||||
|
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||||
|
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||||
|
permanently any contributor for other behaviors that they deem inappropriate,
|
||||||
|
threatening, offensive, or harmful.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies both within project spaces and in public spaces
|
||||||
|
when an individual is representing the project or its community. Examples of
|
||||||
|
representing a project or community include using an official project e-mail
|
||||||
|
address, posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event. Representation of a project may be
|
||||||
|
further defined and clarified by project maintainers.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported by contacting the project team see [MAINTAINERS.md](MAINTAINERS.md). All
|
||||||
|
complaints will be reviewed and investigated and will result in a response that
|
||||||
|
is deemed necessary and appropriate to the circumstances. The project team is
|
||||||
|
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||||
|
Further details of specific enforcement policies may be posted separately.
|
||||||
|
|
||||||
|
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||||
|
faith may face temporary or permanent repercussions as determined by other
|
||||||
|
members of the project's leadership.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||||
|
available at [http://contributor-covenant.org/version/1/4][version]
|
||||||
|
|
||||||
|
[homepage]: http://contributor-covenant.org
|
||||||
|
[version]: http://contributor-covenant.org/version/1/4/
|
86
CONTRIBUTING.md
Normal file
86
CONTRIBUTING.md
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
# Contributing
|
||||||
|
|
||||||
|
**Thank you for your interest in making the project better and more useful.
|
||||||
|
Your contributions are highly welcome.**
|
||||||
|
|
||||||
|
There are multiple ways of getting involved:
|
||||||
|
|
||||||
|
- [Report a bug](#report-a-bug)
|
||||||
|
- [Suggest a feature](#suggest-a-feature)
|
||||||
|
- [Contribute code](#contribute-code)
|
||||||
|
|
||||||
|
Below are a few guidelines we would like you to follow.
|
||||||
|
If you need help, please reach out to us by opening an issue.
|
||||||
|
|
||||||
|
## Report a bug
|
||||||
|
|
||||||
|
Reporting bugs is one of the best ways to contribute. Before creating a bug
|
||||||
|
report, please check that an [issue](/issues) reporting the same problem does
|
||||||
|
not already exist. If there is such an issue, you may add your information as a
|
||||||
|
comment.
|
||||||
|
|
||||||
|
To report a new bug you should open an issue that summarizes the bug and set
|
||||||
|
the label to "bug".
|
||||||
|
|
||||||
|
If you want to provide a fix along with your bug report: That is great! In this
|
||||||
|
case please send us a pull request as described in section [Contribute
|
||||||
|
Code](#contribute-code).
|
||||||
|
|
||||||
|
## Suggest a feature
|
||||||
|
|
||||||
|
To request a new feature you should open an [issue](../../issues/new) and
|
||||||
|
summarize the desired functionality and its use case. Set the issue label to
|
||||||
|
"feature".
|
||||||
|
|
||||||
|
## Contribute code
|
||||||
|
|
||||||
|
This is an outline of what the workflow for code contributions looks like
|
||||||
|
|
||||||
|
- Check the list of open [issues](../../issues). Either assign an existing
|
||||||
|
issue to yourself, or create a new one that you would like work on and
|
||||||
|
discuss your ideas and use cases.
|
||||||
|
|
||||||
|
It is always best to discuss your plans beforehand, to ensure that your
|
||||||
|
contribution is in line with our goals.
|
||||||
|
|
||||||
|
- Fork the repository on GitHub
|
||||||
|
- Create a topic branch from where you want to base your work. This is usually master.
|
||||||
|
- Open a new pull request, label it `work in progress` and outline what you will be contributing
|
||||||
|
- Make commits of logical units.
|
||||||
|
- Make sure you sign-off on your commits `git commit -s -m "adding X to change Y"`
|
||||||
|
- Write good commit messages (see below).
|
||||||
|
- Push your changes to a topic branch in your fork of the repository.
|
||||||
|
- As you push your changes, update the pull request with new infomation and tasks as you complete them
|
||||||
|
- Project maintainers might comment on your work as you progress
|
||||||
|
- When you are done, remove the `work in progess` label and ping the maintainers for a review
|
||||||
|
- Your pull request must receive a :thumbsup: from two [maintainers](MAINTAINERS)
|
||||||
|
|
||||||
|
Thanks for your contributions!
|
||||||
|
|
||||||
|
### Commit messages
|
||||||
|
|
||||||
|
Your commit messages ideally can answer two questions: what changed and why.
|
||||||
|
The subject line should feature the “what” and the body of the commit should
|
||||||
|
describe the “why”.
|
||||||
|
|
||||||
|
When creating a pull request, its description should reference the corresponding issue id.
|
||||||
|
|
||||||
|
### Sign your work / Developer certificate of origin
|
||||||
|
All contributions (including pull requests) must agree to the Developer
|
||||||
|
Certificate of Origin (DCO) version 1.1. This is exactly the same one created
|
||||||
|
and used by the Linux kernel developers and posted on
|
||||||
|
http://developercertificate.org/. This is a developer's certification that he
|
||||||
|
or she has the right to submit the patch for inclusion into the project. Simply
|
||||||
|
submitting a contribution implies this agreement, however, please include a
|
||||||
|
"Signed-off-by" tag in every patch (this tag is a conventional way to confirm
|
||||||
|
that you agree to the DCO) - you can automate this with a [Git
|
||||||
|
hook](https://stackoverflow.com/questions/15015894/git-add-signed-off-by-line-using-format-signoff-not-working)
|
||||||
|
|
||||||
|
```
|
||||||
|
git commit -s -m "adding X to change Y"
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**Have fun, and happy hacking!**
|
6
CONTRIBUTORS.md
Normal file
6
CONTRIBUTORS.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# Project Contributors
|
||||||
|
|
||||||
|
All external contributors to the project, we are grateful for all their help
|
||||||
|
|
||||||
|
## Contributors sorted alphabetically
|
||||||
|
|
7
Dockerfile
Normal file
7
Dockerfile
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
FROM registry.opensource.zalan.do/stups/alpine:latest
|
||||||
|
MAINTAINER Team Teapot @ Zalando SE <team-teapot@zalando.de>
|
||||||
|
|
||||||
|
# add binary
|
||||||
|
ADD build/linux/kube-metrics-adapter /
|
||||||
|
|
||||||
|
ENTRYPOINT ["/kube-metrics-adapter"]
|
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2018 Zalando SE
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
3
MAINTAINERS
Normal file
3
MAINTAINERS
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Mikkel Larsen <mikkel.larsen@zalando.de>
|
||||||
|
Arjun Naik <arjun.naik@zalando.de>
|
||||||
|
Team Teapot <team-teapot@zalando.de>
|
42
Makefile
Normal file
42
Makefile
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
.PHONY: clean test check build.local build.linux build.osx build.docker build.push
|
||||||
|
|
||||||
|
BINARY ?= kube-metrics-adapter
|
||||||
|
VERSION ?= $(shell git describe --tags --always --dirty)
|
||||||
|
IMAGE ?= registry-write.opensource.zalan.do/teapot/$(BINARY)
|
||||||
|
TAG ?= $(VERSION)
|
||||||
|
SOURCES = $(shell find . -name '*.go')
|
||||||
|
DOCKERFILE ?= Dockerfile
|
||||||
|
GOPKGS = $(shell go list ./...)
|
||||||
|
BUILD_FLAGS ?= -v
|
||||||
|
LDFLAGS ?= -X main.version=$(VERSION) -w -s
|
||||||
|
|
||||||
|
default: build.local
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf build
|
||||||
|
|
||||||
|
test:
|
||||||
|
go test -v $(GOPKGS)
|
||||||
|
|
||||||
|
check:
|
||||||
|
go mod download
|
||||||
|
golangci-lint run --timeout=2m ./...
|
||||||
|
|
||||||
|
build.local: build/$(BINARY)
|
||||||
|
build.linux: build/linux/$(BINARY)
|
||||||
|
build.osx: build/osx/$(BINARY)
|
||||||
|
|
||||||
|
build/$(BINARY): go.mod $(SOURCES)
|
||||||
|
CGO_ENABLED=0 go build -o build/$(BINARY) $(BUILD_FLAGS) -ldflags "$(LDFLAGS)" .
|
||||||
|
|
||||||
|
build/linux/$(BINARY): go.mod $(SOURCES)
|
||||||
|
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build $(BUILD_FLAGS) -o build/linux/$(BINARY) -ldflags "$(LDFLAGS)" .
|
||||||
|
|
||||||
|
build/osx/$(BINARY): go.mod $(SOURCES)
|
||||||
|
GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 go build $(BUILD_FLAGS) -o build/osx/$(BINARY) -ldflags "$(LDFLAGS)" .
|
||||||
|
|
||||||
|
build.docker: build.linux
|
||||||
|
docker build --rm -t "$(IMAGE):$(TAG)" -f $(DOCKERFILE) .
|
||||||
|
|
||||||
|
build.push: build.docker
|
||||||
|
docker push "$(IMAGE):$(TAG)"
|
8
SECURITY.md
Normal file
8
SECURITY.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
We acknowledge that every line of code that we write may potentially contain security issues.
|
||||||
|
We are trying to deal with it responsibly and provide patches as quickly as possible.
|
||||||
|
|
||||||
|
We host our bug bounty program on HackerOne, it is currently private, therefore if you would like to report a vulnerability and get rewarded for it, please ask to join our program by filling this form:
|
||||||
|
|
||||||
|
https://corporate.zalando.com/en/services-and-contact#security-form
|
||||||
|
|
||||||
|
You can also send you report via this form if you do not want to join our bug bounty program and just want to report a vulnerability or security issue.
|
30
delivery.yaml
Normal file
30
delivery.yaml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
version: "2017-09-20"
|
||||||
|
pipeline:
|
||||||
|
- id: build
|
||||||
|
overlay: ci/golang
|
||||||
|
cache:
|
||||||
|
paths:
|
||||||
|
- /go/pkg/mod # pkg cache for Go modules
|
||||||
|
- ~/.cache/go-build # Go build cache
|
||||||
|
type: script
|
||||||
|
env:
|
||||||
|
GOFLAGS: "-mod=readonly"
|
||||||
|
commands:
|
||||||
|
- desc: test
|
||||||
|
cmd: |
|
||||||
|
make test
|
||||||
|
- desc: build
|
||||||
|
cmd: |
|
||||||
|
make build.docker
|
||||||
|
- desc: push
|
||||||
|
cmd: |
|
||||||
|
if [[ $CDP_TARGET_BRANCH == master && ! $CDP_PULL_REQUEST_NUMBER ]]; then
|
||||||
|
IMAGE=registry-write.opensource.zalan.do/teapot/kube-metrics-adapter
|
||||||
|
VERSION=$(git describe --tags --always)
|
||||||
|
else
|
||||||
|
IMAGE=registry-write.opensource.zalan.do/teapot/kube-metrics-adapter-test
|
||||||
|
VERSION=$CDP_BUILD_VERSION
|
||||||
|
fi
|
||||||
|
IMAGE=$IMAGE VERSION=$VERSION make build.docker
|
||||||
|
git diff --stat --exit-code
|
||||||
|
IMAGE=$IMAGE VERSION=$VERSION make build.push
|
13
docs/custom-metrics-apiservice.yaml
Normal file
13
docs/custom-metrics-apiservice.yaml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
apiVersion: apiregistration.k8s.io/v1beta1
|
||||||
|
kind: APIService
|
||||||
|
metadata:
|
||||||
|
name: v1beta1.custom.metrics.k8s.io
|
||||||
|
spec:
|
||||||
|
service:
|
||||||
|
name: kube-metrics-adapter
|
||||||
|
namespace: kube-system
|
||||||
|
group: custom.metrics.k8s.io
|
||||||
|
version: v1beta1
|
||||||
|
insecureSkipTLSVerify: true
|
||||||
|
groupPriorityMinimum: 100
|
||||||
|
versionPriority: 100
|
40
docs/deployment.yaml
Normal file
40
docs/deployment.yaml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: kube-metrics-adapter
|
||||||
|
namespace: kube-system
|
||||||
|
labels:
|
||||||
|
application: kube-metrics-adapter
|
||||||
|
version: latest
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
application: kube-metrics-adapter
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
application: kube-metrics-adapter
|
||||||
|
version: latest
|
||||||
|
annotations:
|
||||||
|
iam.amazonaws.com/role: "kube-aws-test-1-app-zmon"
|
||||||
|
spec:
|
||||||
|
serviceAccountName: custom-metrics-apiserver
|
||||||
|
containers:
|
||||||
|
- name: kube-metrics-adapter
|
||||||
|
image: registry.opensource.zalan.do/teapot/kube-metrics-adapter:latest
|
||||||
|
args:
|
||||||
|
# - --v=9
|
||||||
|
- --prometheus-server=http://prometheus.kube-system.svc.cluster.local
|
||||||
|
- --skipper-ingress-metrics
|
||||||
|
- --aws-external-metrics
|
||||||
|
env:
|
||||||
|
- name: AWS_REGION
|
||||||
|
value: eu-central-1
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 100Mi
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 100Mi
|
13
docs/external-metrics-apiservice.yaml
Normal file
13
docs/external-metrics-apiservice.yaml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
apiVersion: apiregistration.k8s.io/v1beta1
|
||||||
|
kind: APIService
|
||||||
|
metadata:
|
||||||
|
name: v1beta1.external.metrics.k8s.io
|
||||||
|
spec:
|
||||||
|
service:
|
||||||
|
name: kube-metrics-adapter
|
||||||
|
namespace: kube-system
|
||||||
|
group: external.metrics.k8s.io
|
||||||
|
version: v1beta1
|
||||||
|
insecureSkipTLSVerify: true
|
||||||
|
groupPriorityMinimum: 100
|
||||||
|
versionPriority: 100
|
146
docs/rbac.yaml
Normal file
146
docs/rbac.yaml
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
kind: ServiceAccount
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: custom-metrics-apiserver
|
||||||
|
namespace: kube-system
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
name: custom-metrics-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: custom-metrics-resource-reader
|
||||||
|
rules:
|
||||||
|
- apiGroups:
|
||||||
|
- ""
|
||||||
|
resources:
|
||||||
|
- namespaces
|
||||||
|
- pods
|
||||||
|
- services
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
name: custom-metrics-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
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: hpa-controller-custom-metrics
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: custom-metrics-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: custom-metrics-auth-reader
|
||||||
|
namespace: kube-system
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Role
|
||||||
|
name: extension-apiserver-authentication-reader
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: custom-metrics-apiserver
|
||||||
|
namespace: kube-system
|
||||||
|
---
|
||||||
|
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: custom-metrics-apiserver
|
||||||
|
namespace: kube-system
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: custom-metrics-resource-collector
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: custom-metrics-resource-collector
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: custom-metrics-apiserver
|
||||||
|
namespace: kube-system
|
11
docs/service.yaml
Normal file
11
docs/service.yaml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: kube-metrics-adapter
|
||||||
|
namespace: kube-system
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: 443
|
||||||
|
targetPort: 443
|
||||||
|
selector:
|
||||||
|
application: kube-metrics-adapter
|
7
example/Dockerfile
Normal file
7
example/Dockerfile
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
FROM registry.opensource.zalan.do/stups/alpine:latest
|
||||||
|
MAINTAINER Team Teapot @ Zalando SE <team-teapot@zalando.de>
|
||||||
|
|
||||||
|
# add binary
|
||||||
|
ADD build/linux/custom-metrics-consumer /
|
||||||
|
|
||||||
|
ENTRYPOINT ["/custom-metrics-consumer"]
|
42
example/Makefile
Normal file
42
example/Makefile
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
.PHONY: clean test check build.local build.linux build.osx build.docker build.push
|
||||||
|
|
||||||
|
BINARY ?= custom-metrics-consumer
|
||||||
|
VERSION ?= $(shell git describe --tags --always --dirty)
|
||||||
|
IMAGE ?= mikkeloscar/$(BINARY)
|
||||||
|
TAG ?= $(VERSION)
|
||||||
|
SOURCES = $(shell find . -name '*.go')
|
||||||
|
DOCKERFILE ?= Dockerfile
|
||||||
|
GOPKGS = $(shell go list ./...)
|
||||||
|
BUILD_FLAGS ?= -v
|
||||||
|
LDFLAGS ?= -X main.version=$(VERSION) -w -s
|
||||||
|
|
||||||
|
default: build.local
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf build
|
||||||
|
|
||||||
|
test:
|
||||||
|
go test -v $(GOPKGS)
|
||||||
|
|
||||||
|
check:
|
||||||
|
golint $(GOPKGS)
|
||||||
|
go vet -v $(GOPKGS)
|
||||||
|
|
||||||
|
build.local: build/$(BINARY)
|
||||||
|
build.linux: build/linux/$(BINARY)
|
||||||
|
build.osx: build/osx/$(BINARY)
|
||||||
|
|
||||||
|
build/$(BINARY): $(SOURCES)
|
||||||
|
CGO_ENABLED=0 go build -o build/$(BINARY) $(BUILD_FLAGS) -ldflags "$(LDFLAGS)" .
|
||||||
|
|
||||||
|
build/linux/$(BINARY): $(SOURCES)
|
||||||
|
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build $(BUILD_FLAGS) -o build/linux/$(BINARY) -ldflags "$(LDFLAGS)" .
|
||||||
|
|
||||||
|
build/osx/$(BINARY): $(SOURCES)
|
||||||
|
GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 go build $(BUILD_FLAGS) -o build/osx/$(BINARY) -ldflags "$(LDFLAGS)" .
|
||||||
|
|
||||||
|
build.docker: build.linux
|
||||||
|
docker build --rm -t "$(IMAGE):$(TAG)" -f $(DOCKERFILE) .
|
||||||
|
|
||||||
|
build.push: build.docker
|
||||||
|
docker push "$(IMAGE):$(TAG)"
|
29
example/deploy/deployment.yaml
Normal file
29
example/deploy/deployment.yaml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: custom-metrics-consumer
|
||||||
|
labels:
|
||||||
|
application: custom-metrics-consumer
|
||||||
|
version: latest
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
application: custom-metrics-consumer
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
application: custom-metrics-consumer
|
||||||
|
version: latest
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: custom-metrics-consumer
|
||||||
|
image: mikkeloscar/custom-metrics-consumer:latest
|
||||||
|
args:
|
||||||
|
- --fake-queue-length=2000
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 10m
|
||||||
|
memory: 25Mi
|
||||||
|
requests:
|
||||||
|
cpu: 10m
|
||||||
|
memory: 25Mi
|
60
example/deploy/hpa.yaml
Normal file
60
example/deploy/hpa.yaml
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
apiVersion: autoscaling/v2beta2
|
||||||
|
kind: HorizontalPodAutoscaler
|
||||||
|
metadata:
|
||||||
|
name: custom-metrics-consumer
|
||||||
|
namespace: default
|
||||||
|
labels:
|
||||||
|
application: custom-metrics-consumer
|
||||||
|
annotations:
|
||||||
|
# metric-config.<metricType>.<metricName>.<collectorName>/<configKey>
|
||||||
|
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/port: "9090"
|
||||||
|
# metric-config.object.requests-per-second.prometheus/query: |
|
||||||
|
# scalar(sum(rate(skipper_serve_host_duration_seconds_count{host="custom-metrics_example_org"}[1m])))
|
||||||
|
# metric-config.object.requests-per-second.prometheus/per-replica: "true"
|
||||||
|
# metric-config.object.requests-per-second.skipper/interval: "1s"
|
||||||
|
spec:
|
||||||
|
scaleTargetRef:
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
name: custom-metrics-consumer
|
||||||
|
minReplicas: 1
|
||||||
|
maxReplicas: 10
|
||||||
|
metrics:
|
||||||
|
# - type: Resource
|
||||||
|
# resource:
|
||||||
|
# name: cpu
|
||||||
|
# current:
|
||||||
|
# averageUtilization: 50
|
||||||
|
|
||||||
|
- type: Pods
|
||||||
|
pods:
|
||||||
|
metric:
|
||||||
|
name: queue-length
|
||||||
|
target:
|
||||||
|
averageValue: 1k
|
||||||
|
type: AverageValue
|
||||||
|
|
||||||
|
- type: Object
|
||||||
|
object:
|
||||||
|
describedObject:
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: Ingress
|
||||||
|
name: custom-metrics-consumer
|
||||||
|
metric:
|
||||||
|
name: requests-per-second
|
||||||
|
target:
|
||||||
|
averageValue: "10"
|
||||||
|
type: AverageValue
|
||||||
|
- type: External
|
||||||
|
external:
|
||||||
|
metric:
|
||||||
|
name: sqs-queue-length
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
queue-name: foobar
|
||||||
|
region: eu-central-1
|
||||||
|
target:
|
||||||
|
averageValue: "30"
|
||||||
|
type: AverageValue
|
14
example/deploy/ingress.yaml
Normal file
14
example/deploy/ingress.yaml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: custom-metrics-consumer
|
||||||
|
labels:
|
||||||
|
application: custom-metrics-consumer
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: custom-metrics.example.org
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
serviceName: custom-metrics-consumer
|
||||||
|
servicePort: 80
|
14
example/deploy/service.yaml
Normal file
14
example/deploy/service.yaml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: custom-metrics-consumer
|
||||||
|
labels:
|
||||||
|
application: custom-metrics-consumer
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: 80
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: 9090
|
||||||
|
selector:
|
||||||
|
application: custom-metrics-consumer
|
||||||
|
type: ClusterIP
|
35
example/main.go
Normal file
35
example/main.go
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func metricsHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.WriteHeader(200)
|
||||||
|
_, err := w.Write([]byte(fmt.Sprintf(`{"queue": {"length": %d}}`, size)))
|
||||||
|
log.Fatalf("failed to write: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
size int
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
flag.IntVar(&size, "fake-queue-length", 10, "Fake queue length for fake metrics.")
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
mux := http.NewServeMux()
|
||||||
|
mux.HandleFunc("/metrics", metricsHandler)
|
||||||
|
|
||||||
|
server := &http.Server{
|
||||||
|
Addr: ":9090",
|
||||||
|
Handler: mux,
|
||||||
|
ReadTimeout: 5 * time.Second,
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Fatal(server.ListenAndServe())
|
||||||
|
}
|
33
go.mod
Normal file
33
go.mod
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
module github.com/zalando-incubator/kube-metrics-adapter
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/NYTimes/gziphandler v1.0.1 // indirect
|
||||||
|
github.com/aws/aws-sdk-go v1.29.4
|
||||||
|
github.com/coreos/go-systemd v0.0.0-20180705093442-88bfeed483d3 // indirect
|
||||||
|
github.com/golang/groupcache v0.0.0-20180513044358-24b0969c4cb7 // indirect
|
||||||
|
github.com/googleapis/gnostic v0.2.0 // indirect
|
||||||
|
github.com/grpc-ecosystem/grpc-gateway v1.4.1 // indirect
|
||||||
|
github.com/influxdata/influxdb-client-go v0.1.4
|
||||||
|
github.com/kubernetes-incubator/custom-metrics-apiserver v0.0.0-20190918110929-3d9be26a50eb
|
||||||
|
github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852
|
||||||
|
github.com/prometheus/client_golang v0.9.2
|
||||||
|
github.com/prometheus/common v0.0.0-20181126121408-4724e9255275
|
||||||
|
github.com/sirupsen/logrus v1.4.2
|
||||||
|
github.com/soheilhy/cmux v0.1.4 // indirect
|
||||||
|
github.com/spf13/cobra v0.0.3
|
||||||
|
github.com/stretchr/testify v1.4.0
|
||||||
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20171017195756-830351dc03c6 // indirect
|
||||||
|
github.com/zalando-incubator/cluster-lifecycle-manager v0.0.0-20180921141935-824b77fb1f84
|
||||||
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45
|
||||||
|
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||||
|
k8s.io/api v0.0.0-20190918155943-95b840bb6a1f
|
||||||
|
k8s.io/apimachinery v0.0.0-20190913080033-27d36303b655
|
||||||
|
k8s.io/apiserver v0.0.0-20190918160949-bfa5e2e684ad // indirect
|
||||||
|
k8s.io/client-go v0.0.0-20190918160344-1fbdaa4c8d90
|
||||||
|
k8s.io/code-generator v0.17.4
|
||||||
|
k8s.io/component-base v0.0.0-20190918160511-547f6c5d7090
|
||||||
|
k8s.io/klog v1.0.0
|
||||||
|
k8s.io/metrics v0.0.0-20190226180357-f3f09b9076d1
|
||||||
|
)
|
||||||
|
|
||||||
|
go 1.13
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user