-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Refactor proxy injection to use Helm charts #3200
Conversation
(This replaces #3195 that had some branch issues) Fixes #3128 A new chart `/charts/patch` was created, that generates the JSON patch payload that is to be returned to the k8s API when doing the injection through the proxy injector, and it's also leveraged by the `linkerd inject --manual` CLI. The VFS was used by `linkerd install` to access the old chart under `/chart`. Now the proxy injection also uses the Helm charts to generate the JSON patch (see above) so we've moved the VFS from `cli/static` to a new common place under `/pkg/charts/static`, and the new root for the VFS is now `/charts`. `linkerd install` hasn't yet migrated to use the new charts (that'll happen in #3127), so the only change in that regard was the creation of `/charts/chart` which is a symlink pointing to `/chart` that `install.go` now uses, so that the VFS contains both the old and new charts, as a temporary measure. You can see that `/bin/Dockerfile-bin`, `/controller/Dockerfile` and `/bin/build-cli-bin` do now `go generate` pointing to the new location (and the `go generate` annotation was moved from `/cli/main.go` to `pkg/charts/static/templates.go`). The symlink trick doesn't work when building the binaries through Docker, so `/bin/Dockerfile-bin` replaces the symlink with an actual copy of `/chart`. Also note that in `/controller/Dockerfile` we now need to include the `prod` tag in `go install` like we do in `/bin/Dockerfile-bin` so that the proxy injector does use the VFS instead of the local file system. - The common logic to parse a chart has been moved from `install.go` to `/pkg/charts/util.go`. - The special ENV var in the proxy for "outbound router capacity" that only applies to the Prometheus pod is now handled directly in the proxy partial and all the associated go code could be removed. - The `patch.go` lib for generating the JSON patch in go along with its tests `patch_test.go` are no longer needed. - Lots of functions in `/pkg/inject/inject.go` got removed/simplified with their logic being moved into the charts themselves. As a consequence lots of things in `inject_test.go` became irrelevant. - Moved `template-values.go` from `/pkg/inject` to `pkg/charts` as that contains the go structs representation of the chart variables that will be leveraged in #3127. Don't forget to run `/bin/helm.sh` whenever you make changes to charts ;-) Signed-off-by: Alejandro Pedraza <alejandro@buoyant.io>
Integration test results for 4e4ab8c: success 🎉 |
Signed-off-by: Alejandro Pedraza <alejandro@buoyant.io>
Integration test results for 0bee203: fail 😕 |
Signed-off-by: Alejandro Pedraza <alejandro@buoyant.io>
Integration test results for 199b602: success 🎉 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm modulo ivan's last question 🚢 👍
…bled Signed-off-by: Alejandro Pedraza <alejandro@buoyant.io>
Signed-off-by: Alejandro Pedraza <alejandro@buoyant.io>
Integration test results for 04085cd: success 🎉 |
Signed-off-by: Alejandro Pedraza <alejandro@buoyant.io>
Integration test results for 7908e1a: fail 😕 |
Signed-off-by: Alejandro Pedraza <alejandro@buoyant.io>
Integration test results for 9d29eeb: success 🎉 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 Let's ship this!
(This replaces #3195 that had some branch issues)
Fixes #3128
New
patch
chartA new chart
/charts/patch
was created, that generates the JSON patchpayload that is to be returned to the k8s API when doing the injection
through the proxy injector, and it's also leveraged by the
linkerd inject --manual
CLI.Virtual File System changes
The VFS was used by
linkerd install
to access the old chart under/chart
. Now the proxy injection also uses the Helm charts to generatethe JSON patch (see above) so we've moved the VFS from
cli/static
to anew common place under
/pkg/charts/static
, and the new root for the VFS isnow
/charts
.linkerd install
hasn't yet migrated to use the new charts (that'llhappen in #3127), so the only change in that regard was the creation of
/charts/chart
which is a symlink pointing to/chart
thatinstall.go
now uses, so that the VFS contains both the old and newcharts, as a temporary measure.
You can see that
/bin/Dockerfile-bin
,/controller/Dockerfile
and/bin/build-cli-bin
do nowgo generate
pointing to the new location(and the
go generate
annotation was moved from/cli/main.go
topkg/charts/static/templates.go
).The symlink trick doesn't work when building the binaries through
Docker, so
/bin/Dockerfile-bin
replaces the symlink with an actualcopy of
/chart
.Also note that in
/controller/Dockerfile
we now need to include theprod
tag ingo install
like we do in/bin/Dockerfile-bin
so thatthe proxy injector does use the VFS instead of the local file system.
Other changes
install.go
to/pkg/charts/util.go
.only applies to the Prometheus pod is now handled directly in the proxy
partial and all the associated go code could be removed.
patch.go
lib for generating the JSON patch in go alongwith its tests
patch_test.go
are no longer needed./pkg/inject/inject.go
got removed/simplifiedwith their logic being moved into the charts themselves. As a
consequence lots of things in
inject_test.go
became irrelevant.template-values.go
from/pkg/inject
topkg/charts
as thatcontains the go structs representation of the chart variables that
will be leveraged in Refactor CLI Install Command To Work With 2.5 Helm Chart #3127.
Testing
Don't forget to run
/bin/helm.sh
whenever you make changes to charts;-)