Disable podCIDR allocation from control-plane when using calico (#10639)
* Disable control plane allocating podCIDR for nodes when using calico Calico does not use the .spec.podCIDR field for its IP address management. Furthermore, it can false positives from the kube controller manager if kube_network_node_prefix and calico_pool_blocksize are unaligned, which is the case with the default shipped by kubespray. If the subnets obtained from using kube_network_node_prefix are bigger, this would result at some point in the control plane thinking it does not have subnets left for a new node, while calico will work without problems. Explicitely set a default value of false for calico_ipam_host_local to facilitate its use in templates. * Don't default to kube_network_node_prefix for calico_pool_blocksize They have different semantics: kube_network_node_prefix is intended to be the size of the subnet for all pods on a node, while there can be more than on calico block of the specified size (they are allocated on demand). Besides, this commit does not actually change anything, because the current code is buggy: we don't ever default to kube_network_node_prefix, since the variable is defined in the role defaults.pull/10725/head
parent
8f2390a120
commit
8abf49ae13
|
@ -9,3 +9,4 @@ dependencies:
|
|||
when:
|
||||
- etcd_deployment_type == "kubeadm"
|
||||
- not (ansible_os_family in ["Flatcar", "Flatcar Container Linux by Kinvolk", "ClearLinux"] or is_fedora_coreos)
|
||||
- role: network_plugin/calico_defaults
|
||||
|
|
|
@ -295,11 +295,15 @@ controllerManager:
|
|||
cluster-cidr: "{{ kube_pods_subnet }}{{ ',' + kube_pods_subnet_ipv6 if enable_dual_stack_networks else '' }}"
|
||||
{% endif %}
|
||||
service-cluster-ip-range: "{{ kube_service_addresses }}{{ ',' + kube_service_addresses_ipv6 if enable_dual_stack_networks else '' }}"
|
||||
{% if kube_network_plugin is defined and kube_network_plugin == "calico" and not calico_ipam_host_local %}
|
||||
allocate-node-cidrs: "false"
|
||||
{% else %}
|
||||
{% if enable_dual_stack_networks %}
|
||||
node-cidr-mask-size-ipv4: "{{ kube_network_node_prefix }}"
|
||||
node-cidr-mask-size-ipv6: "{{ kube_network_node_prefix_ipv6 }}"
|
||||
{% else %}
|
||||
node-cidr-mask-size: "{{ kube_network_node_prefix }}"
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
profiling: "{{ kube_profiling }}"
|
||||
terminated-pod-gc-threshold: "{{ kube_controller_terminated_pod_gc_threshold }}"
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
dependencies:
|
||||
- role: network_plugin/calico_defaults
|
|
@ -168,7 +168,7 @@
|
|||
- name: "Check if inventory match current cluster configuration"
|
||||
assert:
|
||||
that:
|
||||
- calico_pool_conf.spec.blockSize | int == (calico_pool_blocksize | default(kube_network_node_prefix) | int)
|
||||
- calico_pool_conf.spec.blockSize | int == calico_pool_blocksize | int
|
||||
- calico_pool_conf.spec.cidr == (calico_pool_cidr | default(kube_pods_subnet))
|
||||
- not calico_pool_conf.spec.ipipMode is defined or calico_pool_conf.spec.ipipMode == calico_ipip_mode
|
||||
- not calico_pool_conf.spec.vxlanMode is defined or calico_pool_conf.spec.vxlanMode == calico_vxlan_mode
|
||||
|
|
|
@ -223,7 +223,7 @@
|
|||
"name": "{{ calico_pool_name }}",
|
||||
},
|
||||
"spec": {
|
||||
"blockSize": {{ calico_pool_blocksize | default(kube_network_node_prefix) }},
|
||||
"blockSize": {{ calico_pool_blocksize }},
|
||||
"cidr": "{{ calico_pool_cidr | default(kube_pods_subnet) }}",
|
||||
"ipipMode": "{{ calico_ipip_mode }}",
|
||||
"vxlanMode": "{{ calico_vxlan_mode }}",
|
||||
|
@ -274,7 +274,7 @@
|
|||
"name": "{{ calico_pool_name }}-ipv6",
|
||||
},
|
||||
"spec": {
|
||||
"blockSize": {{ calico_pool_blocksize_ipv6 | default(kube_network_node_prefix_ipv6) }},
|
||||
"blockSize": {{ calico_pool_blocksize_ipv6 }},
|
||||
"cidr": "{{ calico_pool_cidr_ipv6 | default(kube_pods_subnet_ipv6) }}",
|
||||
"ipipMode": "{{ calico_ipip_mode_ipv6 }}",
|
||||
"vxlanMode": "{{ calico_vxlan_mode_ipv6 }}",
|
||||
|
|
|
@ -54,7 +54,7 @@ data:
|
|||
"etcd_key_file": "{{ calico_cert_dir }}/key.pem",
|
||||
"etcd_ca_cert_file": "{{ calico_cert_dir }}/ca_cert.crt",
|
||||
{% endif %}
|
||||
{% if calico_ipam_host_local is defined %}
|
||||
{% if calico_ipam_host_local %}
|
||||
"ipam": {
|
||||
"type": "host-local",
|
||||
"subnet": "usePodCidr"
|
||||
|
|
|
@ -16,14 +16,14 @@ calico_vxlan_mode: Always # valid values are 'Always', 'Never' and 'CrossSubnet
|
|||
calico_cni_pool: true
|
||||
calico_cni_pool_ipv6: true
|
||||
|
||||
# add default ippool blockSize (defaults kube_network_node_prefix)
|
||||
# add default ippool blockSize
|
||||
calico_pool_blocksize: 26
|
||||
|
||||
# Calico doesn't support ipip tunneling for the IPv6.
|
||||
calico_ipip_mode_ipv6: Never
|
||||
calico_vxlan_mode_ipv6: Never
|
||||
|
||||
# add default ipv6 ippool blockSize (defaults kube_network_node_prefix_ipv6)
|
||||
# add default ipv6 ippool blockSize
|
||||
calico_pool_blocksize_ipv6: 122
|
||||
|
||||
# Calico network backend can be 'bird', 'vxlan' and 'none'
|
||||
|
@ -161,6 +161,10 @@ calico_ipam_autoallocateblocks: true
|
|||
# Calico IPAM maxBlocksPerHost, default 0
|
||||
calico_ipam_maxblocksperhost: 0
|
||||
|
||||
# Calico host local IPAM (use node .spec.podCIDR)
|
||||
|
||||
calico_ipam_host_local: false
|
||||
|
||||
# Calico apiserver (only with kdd)
|
||||
calico_apiserver_enabled: false
|
||||
|
Loading…
Reference in New Issue