I create this ticket by request from Slack where the issue has been tracked so far. Unfortunately, history of this issue has been lost due to age on Slack, but I'll try to recreate information as well as possible.
I run two bare metal clusters set up for HA operation using the still current recommendation for kubeadm clusters:
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/
where you find a link to
https://github.com/kubernetes/kubeadm/blob/main/docs/ha-considerations.md#options-for-software-load-balancing
The latter document pretty describes what I've done: One cluster has four nodes, the other eight nodes, both with three control plane nodes. The small cluster has a single host running HA Proxy in front, the larger cluster has two hosts running HA Proxy with yet another hardware load balancer in front.
For both clusters, I've created an external DNS name for the API server like https://api.mycluster.mydomain.dk. During setup with kubeadm this DNS name was specified as recommended in the document above. This setup has been working flawlessly with Calico for a very long time - the small cluster has been in use for more than six years.
However, with a Calico upgrade this setup breaks: I cannot remember the exact version anymore, but I believe it was with 3.30.0, though the specific change that triggers the problem cannot be found in the release notes.
I had a long session on Slack with primarily Brian McMahon were we did a lot of troubleshooting and found a workaround - but not without downtime in a production cluster. I still have part of the conversation available, but unfortunately the part where Brian McMahon showed me an undocumented flag to the operator has been lost - and that's required for the hack to work.
What happens is basically that the operator deploys a deamonset for the Calico nodes: I've forgotten the specific DNS settings, but with the settings provided by the operator, one of the initContainers fail as it cannot lookup the external name for the K8s API host. I need to modify the DNS settings in the daemonset by hand to get things running - and here the "secret" flag is required in order to prevent the operator from resetting the values.
My custom values, on the other hand, prevents Goldmane from working - however, we can live with that.
We would love to see this issue resolved - and maybe it already is? I just hope for the same level of support as we received last summer - we cannot afford to have a production cluster go down for a prolonged period.
Both clusters are on Kubernetes 1.36.4 and has upgraded since last year without hickups. Calico is maintained using the Tigera operator and installed using the Helm chart. Current version is 3.30.3 for the large cluster, the small cluster is still at 3.29.1 which works fine without hacks.
I create this ticket by request from Slack where the issue has been tracked so far. Unfortunately, history of this issue has been lost due to age on Slack, but I'll try to recreate information as well as possible.
I run two bare metal clusters set up for HA operation using the still current recommendation for
kubeadmclusters:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/
where you find a link to
https://github.com/kubernetes/kubeadm/blob/main/docs/ha-considerations.md#options-for-software-load-balancing
The latter document pretty describes what I've done: One cluster has four nodes, the other eight nodes, both with three control plane nodes. The small cluster has a single host running HA Proxy in front, the larger cluster has two hosts running HA Proxy with yet another hardware load balancer in front.
For both clusters, I've created an external DNS name for the API server like
https://api.mycluster.mydomain.dk. During setup withkubeadmthis DNS name was specified as recommended in the document above. This setup has been working flawlessly with Calico for a very long time - the small cluster has been in use for more than six years.However, with a Calico upgrade this setup breaks: I cannot remember the exact version anymore, but I believe it was with
3.30.0, though the specific change that triggers the problem cannot be found in the release notes.I had a long session on Slack with primarily Brian McMahon were we did a lot of troubleshooting and found a workaround - but not without downtime in a production cluster. I still have part of the conversation available, but unfortunately the part where Brian McMahon showed me an undocumented flag to the operator has been lost - and that's required for the hack to work.
What happens is basically that the operator deploys a deamonset for the Calico nodes: I've forgotten the specific DNS settings, but with the settings provided by the operator, one of the initContainers fail as it cannot lookup the external name for the K8s API host. I need to modify the DNS settings in the daemonset by hand to get things running - and here the "secret" flag is required in order to prevent the operator from resetting the values.
My custom values, on the other hand, prevents Goldmane from working - however, we can live with that.
We would love to see this issue resolved - and maybe it already is? I just hope for the same level of support as we received last summer - we cannot afford to have a production cluster go down for a prolonged period.
Both clusters are on Kubernetes
1.36.4and has upgraded since last year without hickups. Calico is maintained using the Tigera operator and installed using the Helm chart. Current version is3.30.3for the large cluster, the small cluster is still at3.29.1which works fine without hacks.