Skip to content
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

Remove namespace from linkerd2-viz chart #6638

Merged
merged 4 commits into from
Aug 13, 2021

Conversation

alpeb
Copy link
Member

@alpeb alpeb commented Aug 9, 2021

Second part of #6584, followup of #6635 (and based off of alpeb/no-ns-helm-core)

Stop rendering namespace.yaml in the linkerd-viz chart, same as we did in #6635.

The additional change here is the addition of the namespace-metadata.yaml template (and its RBAC), not rendered in CLI installs, which is a Helm post-install hook, consisting on a Job that executes a script adding the required annotations and labels to the viz namespace using a PATCH request against kube-api. The script first checks if the namespace doesn't already have an annotations/labels entries, in which case it has to add extra ops in that patch.

The Job uses a multiarch curlimages/curl image, which is built by curl.haxx.se. I couldn't find a simple multiarch "kubectl" image that would have allowed us issuing simple kubectl commands. The curlimages/curl image is based on Alpine; it won't have as much CVE-related reports noise as a Debian image, but it'd be better to have something slimmer still. Eventually we could build our own scratch-based binary if deemed worthy.

I'll post in followup PRs the same changes for the other extensions and the CNI chart.

Second part of #6584, followup of #6635 (and based off of alpeb/no-ns-helm-core)

Stop rendering `namespace.yaml` in the `linkerd-viz` chart, same as we did in #6635.

The additional change here is the addition of the `namespace-metadata.yaml` template (and its RBAC), _not_ rendered in CLI installs, which is a Helm `post-install` hook, consisting on a Job that executes a script adding the required annotations and labels to the viz namespace using a PATCH request against kube-api. The script first checks if the namespace doesn't already have an annotations/labels entries, in which case it has to add extra ops in that patch.

The Job uses a multiarch `curlimages/curl` image, which is built by curl.haxx.se. I couldn't find a simple multiarch "kubectl" image that would have allowed us issuing simple kubectl commands. The `curlimages/curl` image is based on Alpine; it won't have as much as CVE-related reports noise as a Debian image, but it'd be better to have something slimmer still. Eventually we could build our own scratch-based binary if deemed worthy.

I'll post in followup PRs the same changes for the other extensions and the CNI chart.
@alpeb alpeb added the area/helm label Aug 9, 2021
@alpeb alpeb requested a review from a team as a code owner August 9, 2021 22:50
@codecov-commenter
Copy link

codecov-commenter commented Aug 9, 2021

Codecov Report

Merging #6638 (5dbcb42) into alpeb/no-ns-helm-core (9f6ee44) will decrease coverage by 0.02%.
The diff coverage is 100.00%.

Impacted file tree graph

@@                    Coverage Diff                    @@
##           alpeb/no-ns-helm-core    #6638      +/-   ##
=========================================================
- Coverage                  45.38%   45.35%   -0.03%     
=========================================================
  Files                        182      182              
  Lines                      24440    24273     -167     
  Branches                     290      290              
=========================================================
- Hits                       11091    11010      -81     
+ Misses                     12560    12488      -72     
+ Partials                     789      775      -14     
Flag Coverage Δ
golang 44.05% <100.00%> (-0.04%) ⬇️
javascript 66.76% <ø> (ø)
unittests 45.35% <100.00%> (-0.03%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files Coverage Δ
viz/cmd/root.go 0.00% <ø> (ø)
viz/cmd/install.go 32.14% <100.00%> (+5.92%) ⬆️
pkg/k8s/labels.go 65.51% <0.00%> (ø)
viz/metrics-api/prometheus.go 82.39% <0.00%> (ø)
controller/api/destination/watcher/test_util.go 76.19% <0.00%> (+1.19%) ⬆️
viz/cmd/stat.go 61.40% <0.00%> (+2.98%) ⬆️
viz/metrics-api/stat_summary.go 87.07% <0.00%> (+4.82%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 9f6ee44...5dbcb42. Read the comment docs.

@alpeb alpeb changed the title Remove namespace for linkerd2-viz chart Remove namespace from linkerd2-viz chart Aug 10, 2021
Copy link
Member

@mateiidavid mateiidavid left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested and it all works well. No comments on the actual manifest changes.

$ helm install linkerd-viz \
   --create-namespace --namespace vizz \ 
   -f charts/linkerd-viz/values.yaml charts/linkerd-viz 
# installed successfully

# job successfully annotated namespace
#
$ k get ns vizz -o yaml
apiVersion: v1
kind: Namespace
metadata:
  annotations:
    config.linkerd.io/proxy-await: enabled
  creationTimestamp: "2021-08-12T15:24:36Z"
  labels:
    kubernetes.io/metadata.name: vizz
    linkerd.io/extension: viz
  name: vizz
  resourceVersion: "10420"
  uid: c21ee6de-b7b5-44c1-bb20-68cece106cd3
spec:
  finalizers:
  - kubernetes
status:
  phase: Active

Copy link
Member

@adleong adleong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This tested great when installing with CLI, installing with helm using --create-namespace, and installing with helm with the extension namespace pre-created. In all cases, the extension label was correctly added to the namespace.

@alpeb alpeb merged commit 57a83eb into alpeb/no-ns-helm-core Aug 13, 2021
@alpeb alpeb deleted the alpeb/no-ns-helm-viz branch August 13, 2021 19:40
alpeb added a commit that referenced this pull request Dec 10, 2021
…inkerd-control-plane` (#6635)

Fixes #6584 #6620 #7405

# Namespace Removal

With this change, the `namespace.yaml` template is rendered only for CLI installs and not Helm, and likewise the `namespace:` entry in the namespace-level objects (using a new `partials.namespace` helper).

The `installNamespace` and `namespace` entries in `values.yaml` have been removed.

There in the templates where the namespace is required, we moved from `.Values.namespace` to `.Release.Namespace` which is filled-in automatically by Helm. For the CLI, `install.go` now explicitly defines the contents of the `Release` map alongside `Values`.

The proxy-injector has a new `linkerd-namespace` argument given the namespace is no longer persisted in the `linkerd-config` ConfigMap, so it has to be passed in. To pass it further down to `injector.Inject()` without modifying the `Handler` signature, a closure was used.

------------
Update: Merged-in #6638: Similar changes for the `linkerd-viz` chart:

Stop rendering `namespace.yaml` in the `linkerd-viz` chart.

The additional change here is the addition of the `namespace-metadata.yaml` template (and its RBAC), _not_ rendered in CLI installs, which is a Helm `post-install` hook, consisting on a Job that executes a script adding the required annotations and labels to the viz namespace using a PATCH request against kube-api. The script first checks if the namespace doesn't already have an annotations/labels entries, in which case it has to add extra ops in that patch.

---------
Update: Merged-in the approved #6643, #6665 and #6669 which address the `linkerd2-cni`, `linkerd-multicluster` and `linkerd-jaeger` charts. 

Additional changes from what's already mentioned above:
- Removes the install-namespace option from `linkerd install-cni`, which isn't found in `linkerd install` nor `linkerd viz install` anyways, and it would add some complexity to support.
- Added a dependency on the `partials` chart to the `linkerd-multicluster-link` chart, so that we can tap on the `partials.namespace` helper.
- We don't have any more the restriction on having the muticluster objects live in a separate namespace than linkerd. It's still good practice, and that's the default for the CLI install, but I removed that validation.


Finally, as a side-effect, the `linkerd mc allow` subcommand was fixed; it has been broken for a while apparently:

```console
$ linkerd mc allow --service-account-name foobar
Error: template: linkerd-multicluster/templates/remote-access-service-mirror-rbac.yaml:16:7: executing "linkerd-multicluster/templates/remote-access-service-mirror-rbac.yaml" at <include "partials.annotations.created-by" $>: error calling include: template: no template "partials.annotations.created-by" associated with template "gotpl"
```
---------
Update: see helm/helm#5465 describing the current best-practice

# Core Helm Charts Split

This removes the `linkerd2` chart, and replaces it with the `linkerd-crds` and `linkerd-control-plane` charts. Note that the viz and other extension charts are not concerned by this change.

Also note the original `values.yaml` file has been split into both charts accordingly.

### UX

```console
$ helm install linkerd-crds --namespace linkerd --create-namespace linkerd/linkerd-crds
...
# certs.yaml should contain identityTrustAnchorsPEM and the identity issuer values
$ helm install linkerd-control-plane --namespace linkerd -f certs.yaml linkerd/linkerd-control-plane
```

### Upgrade

As explained in #6635, this is a breaking change. Users will have to uninstall the `linkerd2` chart and install these two, and eventually rollout the proxies (they should continue to work during the transition anyway).

### CLI

The CLI install/upgrade code was updated to be able to pick the templates from these new charts, but the CLI UX remains identical as before.

### Other changes

- The `linkerd-crds` and `linkerd-control-plane` charts now carry a version scheme independent of linkerd's own versioning, as explained in #7405.
- These charts are Helm v3, which is reflected in the `Chart.yaml` entries and in the removal of the `requirements.yaml` files.
- In the integration tests, replaced the `helm-chart` arg with `helm-charts` containing the path `./charts`, used to build the paths for both charts.

### Followups

- Now it's possible to add a `ServiceProfile` instance for Destination in the `linkerd-control-plane` chart.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants