-
Notifications
You must be signed in to change notification settings - Fork 2.4k
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
Deploying External Cloud Provider with Helm Controller - Chicken:Egg problem #1807
Comments
Are you using the integrated helm controller, or have you deployed your own? |
Integrated |
FWIW, the helm-install pods come from jobs that are generated by the helm controller which lives in a different repo: I don't see any way to inject tolerations into the job spec. Your best bet at the moment would probably be to simply patch the helm-install pod spec and add an unschedulable toleration. Either that or you could save yourself some heartache and bypass the helm controller entirely. Use |
Ok that's good information. Thanks for digging in to that. I was hoping that there was an easy config change on the k3s side, but sounds like the helm controller is creating the pods and would have to be updated to add the tolerance. I'll put in an issue over there and maybe take a crack at a PR. Can you think of any reason why it would be bad idea to add the tolerance to the helm jobs/pods? My workaround for the moment is to just use the static manifest, but the bytes start to add up when you put the manifests into cloud-init to bootstrap your instances and I don't think static manifests are a good long term solution to maintaining an app. I can use helm remotely to apply the chart, but Terraform Cloud and Gitlab's CI/CD won't have direct access to the kube-api endpoints (not exposed to the public internet), so even if I could get the kubeconfig off the cluster, that's out. I could install helm on my master node and apply from there as part of the instance build, but that seems kinda silly if helm chart functionality is built into k3s. Still might be better than maintaining static manifests 🤷 The goal of all this is to bootstrap k3s with AWS cloud-provider and then manage the rest of the config with Rancher. Unfortunately the rancher agents won't run until the node.cloudprovider taints are removed, so I can't manage the cloud-provider through that interface. |
You could always stick the rendered manifest on s3 somewhere and then just curl it down from the instance bootstrap script? I agree it's not great, but my experience with the embedded helm controller is that it's kind of fragile and doesn't work well for much more than one-time initial load of fairly simple charts. |
We could address this by utilizing the "bootstrap" flag that is now in helm-controller. Here is an example of its usage: |
While not directly related to this issue, you may run into an issue after solving the issue above either with the work around or after the fix. When adding worker nodes that will be added automatically as targets by the ELB, each node must have a valid ProviderID. This can be added to the cluster addition script on each node. Mode info in this issue below: #2083 |
this got accidentally autoclosed. reopening |
Validated using Commit ID:
|
@davidnuzik the Milestone on this issue needs attention. This is currently only fixed on master, which means it would only be in 1.19, 1.18. |
Potentially need to verify with different releases once available |
Yes - see #2140 to track the backport into v1.18 release branch. |
Version:
v1.18.2+k3s1
K3s arguments:
Describe the bug
I would like to install the AWS CCM (external cloud provider) with a helm chart and the helm chart controller by placing a helm manifest in
/var/lib/rancher/k3s/server/manifests
but helm chart controller pod won't initialize on a new cluster because all the nodes are tainted withnode.cloudprovider.kubernetes.io/uninitialized: true
. So I need a cloud-provider to install my cloud-provider.I can remove the taint on one of the nodes, but then that node doesn't get properly initialized.
Is there a way to modify the helm chart controller with a tolerance so it can run on a uninitialized node?
To Reproduce
Launch a new cluster with an external cloud provider and try to install an external cloud provider with a helm chart.
/var/lib/rancher/k3s/server/manifests/00-aws-ccm.yaml
Expected behavior
Helm controller would launch included chart.
Actual behavior
Helm controller pods didn't tolerate
node.cloudprovider.kubernetes.io/uninitialized: true
taint.Additional context / logs
gz#11440
The text was updated successfully, but these errors were encountered: