Skip to content

Commit 2519b13

Browse files
committed
Refine IPv6 Supported
Signed-off-by: pixiake <[email protected]>
1 parent 5f8c6cf commit 2519b13

File tree

10 files changed

+86
-28
lines changed

10 files changed

+86
-28
lines changed

cmd/kk/apis/kubekey/v1alpha2/default.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ const (
6363
DefaultMaxPods = 110
6464
DefaultPodPidsLimit = 10000
6565
DefaultNodeCidrMaskSize = 24
66+
DefaultNodeCidrMaskSizeIPv6 = 120
6667
DefaultIPIPMode = "Always"
6768
DefaultVXLANMode = "Never"
6869
DefaultVethMTU = 0
@@ -139,6 +140,9 @@ func (cfg *ClusterSpec) SetDefaultClusterSpec() (*ClusterSpec, map[string][]*Kub
139140
if cfg.Kubernetes.NodeCidrMaskSize == 0 {
140141
clusterCfg.Kubernetes.NodeCidrMaskSize = DefaultNodeCidrMaskSize
141142
}
143+
if cfg.Kubernetes.NodeCidrMaskSizeIPv6 == 0 {
144+
clusterCfg.Kubernetes.NodeCidrMaskSizeIPv6 = DefaultNodeCidrMaskSizeIPv6
145+
}
142146
if cfg.Kubernetes.ProxyMode == "" {
143147
clusterCfg.Kubernetes.ProxyMode = DefaultProxyMode
144148
}

cmd/kk/apis/kubekey/v1alpha2/kubernetes_types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ type Kubernetes struct {
3232
MaxPods int `yaml:"maxPods" json:"maxPods,omitempty"`
3333
PodPidsLimit int `yaml:"podPidsLimit" json:"podPidsLimit,omitempty"`
3434
NodeCidrMaskSize int `yaml:"nodeCidrMaskSize" json:"nodeCidrMaskSize,omitempty"`
35+
NodeCidrMaskSizeIPv6 int `yaml:"nodeCidrMaskSizeIPv6" json:"nodeCidrMaskSizeIPv6,omitempty"`
3536
ApiserverCertExtraSans []string `yaml:"apiserverCertExtraSans" json:"apiserverCertExtraSans,omitempty"`
3637
ProxyMode string `yaml:"proxyMode" json:"proxyMode,omitempty"`
3738
AutoRenewCerts *bool `yaml:"autoRenewCerts" json:"autoRenewCerts,omitempty"`

cmd/kk/apis/kubekey/v1alpha2/network_types.go

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,24 @@ type NetworkConfig struct {
2828
}
2929

3030
type CalicoCfg struct {
31-
IPIPMode string `yaml:"ipipMode" json:"ipipMode,omitempty"`
32-
VXLANMode string `yaml:"vxlanMode" json:"vxlanMode,omitempty"`
33-
VethMTU int `yaml:"vethMTU" json:"vethMTU,omitempty"`
34-
Ipv4NatOutgoing *bool `yaml:"ipv4NatOutgoing" json:"ipv4NatOutgoing,omitempty"`
35-
DefaultIPPOOL *bool `yaml:"defaultIPPOOL" json:"defaultIPPOOL,omitempty"`
36-
EnableTypha *bool `yaml:"enableTypha" json:"enableTypha,omitempty"`
37-
Replicas int `yaml:"replicas" json:"replicas,omitempty"`
38-
NodeSelector map[string]string `yaml:"nodeSelector" json:"nodeSelector,omitempty"`
31+
IPIPMode string `yaml:"ipipMode" json:"ipipMode,omitempty"`
32+
VXLANMode string `yaml:"vxlanMode" json:"vxlanMode,omitempty"`
33+
VethMTU int `yaml:"vethMTU" json:"vethMTU,omitempty"`
34+
Ipv4NatOutgoing *bool `yaml:"ipv4NatOutgoing" json:"ipv4NatOutgoing,omitempty"`
35+
DefaultIPPOOL *bool `yaml:"defaultIPPOOL" json:"defaultIPPOOL,omitempty"`
36+
Typha Typha `yaml:"typha" json:"typha,omitempty"`
37+
Controller Controller `yaml:"controller" json:"controller,omitempty"`
38+
}
39+
40+
type Typha struct {
41+
Replicas int `yaml:"replicas" json:"replicas,omitempty"`
42+
NodeSelector map[string]string `yaml:"nodeSelector" json:"nodeSelector,omitempty"`
43+
Enabled *bool `yaml:"enabled" json:"enabled,omitempty"`
44+
}
45+
46+
type Controller struct {
47+
Replicas int `yaml:"replicas" json:"replicas,omitempty"`
48+
NodeSelector map[string]string `yaml:"nodeSelector" json:"nodeSelector,omitempty"`
3949
}
4050

4151
type FlannelCfg struct {
@@ -186,12 +196,12 @@ func (c *CalicoCfg) EnableDefaultIPPOOL() bool {
186196
return *c.DefaultIPPOOL
187197
}
188198

189-
// Typha is used to determine whether to enable calico Typha
190-
func (c *CalicoCfg) Typha() bool {
191-
if c.EnableTypha == nil {
199+
// EnableTypha is used to determine whether to enable calico Typha
200+
func (c *CalicoCfg) EnableTypha() bool {
201+
if c.Typha.Enabled == nil {
192202
return false
193203
}
194-
return *c.EnableTypha
204+
return *c.Typha.Enabled
195205
}
196206

197207
// EnableInit is used to determine whether to create default network

cmd/kk/pkg/bootstrap/os/module.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ func (c *ConfigureOSModule) Init() {
6464
Template: templates.InitOsScriptTmpl,
6565
Dst: filepath.Join(common.KubeScriptDir, "initOS.sh"),
6666
Data: util.Data{
67-
"Hosts": templates.GenerateHosts(c.Runtime, c.KubeConf),
67+
"Hosts": templates.GenerateHosts(c.Runtime, c.KubeConf),
68+
"IPv6Support": templates.EnabledIPv6(c.KubeConf),
6869
},
6970
},
7071
Parallel: true,

cmd/kk/pkg/bootstrap/os/templates/init_script.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,16 @@ echo 'kernel.pid_max = 65535' >> /etc/sysctl.conf
9999
echo 'kernel.watchdog_thresh = 5' >> /etc/sysctl.conf
100100
echo 'kernel.hung_task_timeout_secs = 5' >> /etc/sysctl.conf
101101
102+
{{- if .IPv6Support }}
102103
#add for ipv6
103104
echo 'net.ipv6.conf.all.disable_ipv6 = 0' >> /etc/sysctl.conf
104105
echo 'net.ipv6.conf.default.disable_ipv6 = 0' >> /etc/sysctl.conf
105106
echo 'net.ipv6.conf.lo.disable_ipv6 = 0' >> /etc/sysctl.conf
106107
echo 'net.ipv6.conf.all.forwarding=1' >> /etc/sysctl.conf
108+
echo 'net.ipv6.conf.default.accept_dad=0' >> /etc/sysctl.conf
109+
echo 'net.ipv6.route.max_size=65536' >> /etc/sysctl.conf
110+
echo 'net.ipv6.neigh.default.retrans_time_ms=1000' >> /etc/sysctl.conf
111+
{{- end}}
107112
108113
#See https://help.aliyun.com/document_detail/118806.html#uicontrol-e50-ddj-w0y
109114
sed -r -i "s@#{0,}?net.ipv4.tcp_tw_recycle ?= ?(0|1|2)@net.ipv4.tcp_tw_recycle = 0@g" /etc/sysctl.conf
@@ -145,6 +150,18 @@ sed -r -i "s@#{0,}?net.ipv4.conf.default.arp_ignore ?= ??(0|1|2)@net.ipv4.conf.d
145150
sed -r -i "s@#{0,}?kernel.watchdog_thresh ?= ?([0-9]{1,})@kernel.watchdog_thresh = 5@g" /etc/sysctl.conf
146151
sed -r -i "s@#{0,}?kernel.hung_task_timeout_secs ?= ?([0-9]{1,})@kernel.hung_task_timeout_secs = 5@g" /etc/sysctl.conf
147152
153+
{{- if .IPv6Support }}
154+
#add for ipv6
155+
sed -r -i "s@#{0,}?net.ipv6.conf.all.disable_ipv6 ?= ?([0-9]{1,})@net.ipv6.conf.all.disable_ipv6 = 0@g" /etc/sysctl.conf
156+
sed -r -i "s@#{0,}?net.ipv6.conf.default.disable_ipv6 ?= ?([0-9]{1,})@net.ipv6.conf.default.disable_ipv6 = 0@g" /etc/sysctl.conf
157+
sed -r -i "s@#{0,}?net.ipv6.conf.lo.disable_ipv6 ?= ?([0-9]{1,})@net.ipv6.conf.lo.disable_ipv6 = 0@g" /etc/sysctl.conf
158+
sed -r -i "s@#{0,}?net.ipv6.conf.all.forwarding ?= ?([0-9]{1,})@net.ipv6.conf.all.forwarding = 1@g" /etc/sysctl.conf
159+
sed -r -i "s@#{0,}?net.ipv6.conf.default.accept_dad ?= ?([0-9]{1,})@net.ipv6.conf.default.accept_dad = 0@g" /etc/sysctl.conf
160+
sed -r -i "s@#{0,}?net.ipv6.route.max_size ?= ?([0-9]{1,})@net.ipv6.route.max_size = 65536@g" /etc/sysctl.conf
161+
sed -r -i "s@#{0,}?net.ipv6.neigh.default.retrans_time_ms ?= ?([0-9]{1,})@net.ipv6.neigh.default.retrans_time_ms = 1000@g" /etc/sysctl.conf
162+
{{- end}}
163+
164+
148165
tmpfile="$$.tmp"
149166
awk ' !x[$0]++{print > "'$tmpfile'"}' /etc/sysctl.conf
150167
mv $tmpfile /etc/sysctl.conf
@@ -287,3 +304,10 @@ func GenerateHosts(runtime connector.ModuleRuntime, kubeConf *common.KubeConf) [
287304
hostsList = append(hostsList, lbHost)
288305
return hostsList
289306
}
307+
308+
func EnabledIPv6(kubeConf *common.KubeConf) bool {
309+
if len(strings.Split(kubeConf.Cluster.Network.KubePodsCIDR, ",")) == 2 {
310+
return true
311+
}
312+
return false
313+
}

cmd/kk/pkg/kubernetes/tasks.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ func (g *GenerateKubeadmConfig) Execute(runtime connector.Runtime) error {
307307
"BootstrapToken": bootstrapToken,
308308
"CertificateKey": certificateKey,
309309
"IPv6Support": host.GetInternalIPv6Address() != "",
310+
"NodeCidrMaskSizeIPv6": g.KubeConf.Cluster.Kubernetes.NodeCidrMaskSizeIPv6,
310311
},
311312
}
312313

cmd/kk/pkg/kubernetes/templates/kubeadm_config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ controllerManager:
9898
extraArgs:
9999
{{- if .IPv6Support }}
100100
node-cidr-mask-size-ipv4: "{{ .NodeCidrMaskSize }}"
101-
node-cidr-mask-size-ipv6: "64"
101+
node-cidr-mask-size-ipv6: "{{ .NodeCidrMaskSizeIPv6 }}"
102102
{{- else }}
103103
node-cidr-mask-size: "{{ .NodeCidrMaskSize }}"
104104
{{- end }}

cmd/kk/pkg/plugins/network/tasks.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ func (g *GenerateCalicoManifests) Execute(runtime connector.Runtime) error {
460460
"CalicoFlexvolImage": images.GetImage(runtime, g.KubeConf, "calico-flexvol").ImageName(),
461461
"CalicoControllersImage": images.GetImage(runtime, g.KubeConf, "calico-kube-controllers").ImageName(),
462462
"CalicoTyphaImage": images.GetImage(runtime, g.KubeConf, "calico-typha").ImageName(),
463-
"TyphaEnabled": len(runtime.GetHostsByRole(common.K8s)) > 50 || g.KubeConf.Cluster.Network.Calico.Typha(),
463+
"TyphaEnabled": len(runtime.GetHostsByRole(common.K8s)) > 50 || g.KubeConf.Cluster.Network.Calico.EnableTypha(),
464464
"VethMTU": g.KubeConf.Cluster.Network.Calico.VethMTU,
465465
"NodeCidrMaskSize": g.KubeConf.Cluster.Kubernetes.NodeCidrMaskSize,
466466
"IPIPMode": g.KubeConf.Cluster.Network.Calico.IPIPMode,
@@ -469,8 +469,11 @@ func (g *GenerateCalicoManifests) Execute(runtime connector.Runtime) error {
469469
"IPV4POOLNATOUTGOING": g.KubeConf.Cluster.Network.Calico.EnableIPV4POOL_NAT_OUTGOING(),
470470
"DefaultIPPOOL": g.KubeConf.Cluster.Network.Calico.EnableDefaultIPPOOL(),
471471
"IPv6Support": IPv6Support,
472-
"Replicas": g.KubeConf.Cluster.Network.Calico.Replicas,
473-
"NodeSelector": g.KubeConf.Cluster.Network.Calico.NodeSelector,
472+
"NodeCidrMaskSizeIPv6": g.KubeConf.Cluster.Kubernetes.NodeCidrMaskSizeIPv6,
473+
"TyphaReplicas": g.KubeConf.Cluster.Network.Calico.Typha.Replicas,
474+
"TyphaNodeSelector": g.KubeConf.Cluster.Network.Calico.Typha.NodeSelector,
475+
"ControllerReplicas": g.KubeConf.Cluster.Network.Calico.Controller.Replicas,
476+
"ControllerNodeSelector": g.KubeConf.Cluster.Network.Calico.Controller.NodeSelector,
474477
},
475478
}
476479
templateAction.Init(nil, nil)

cmd/kk/pkg/plugins/network/templates/calico.tmpl

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,17 @@ data:
8888
"datastore_type": "kubernetes",
8989
"nodename": "__KUBERNETES_NODE_NAME__",
9090
"mtu": __CNI_MTU__,
91+
{{- if .IPv6Support }}
92+
"ipam": {
93+
"type": "calico-ipam",
94+
"assign_ipv4": "true",
95+
"assign_ipv6": "true"
96+
},
97+
{{- else }}
9198
"ipam": {
9299
"type": "calico-ipam"
93100
},
101+
{{- end }}
94102
"policy": {
95103
"type": "k8s"
96104
},
@@ -5023,7 +5031,7 @@ spec:
50235031
- name: CALICO_IPV6POOL_CIDR
50245032
value: "{{ .KubePodsV6CIDR }}"
50255033
- name: CALICO_IPV6POOL_BLOCK_SIZE
5026-
value: "120"
5034+
value: "{{ .NodeCidrMaskSizeIPv6 }}"
50275035
{{- end }}
50285036
{{- else }}
50295037
- name: NO_DEFAULT_POOLS
@@ -5072,6 +5080,9 @@ spec:
50725080
- /bin/calico-node
50735081
- -felix-live
50745082
- -bird-live
5083+
{{- if .IPv6Support }}
5084+
- -bird6-live
5085+
{{- end }}
50755086
periodSeconds: 10
50765087
initialDelaySeconds: 10
50775088
failureThreshold: 6
@@ -5082,6 +5093,9 @@ spec:
50825093
- /bin/calico-node
50835094
- -felix-ready
50845095
- -bird-ready
5096+
{{- if .IPv6Support }}
5097+
- -bird6-ready
5098+
{{- end }}
50855099
periodSeconds: 10
50865100
timeoutSeconds: 10
50875101
volumeMounts:
@@ -5171,7 +5185,7 @@ metadata:
51715185
k8s-app: calico-kube-controllers
51725186
spec:
51735187
# The controllers can only have a single active instance.
5174-
replicas: {{ if .Replicas }}{{ .Replicas }}{{ else }}1{{ end }}
5188+
replicas: {{ if .ControllerReplicas }}{{ .ControllerReplicas }}{{ else }}1{{ end }}
51755189
selector:
51765190
matchLabels:
51775191
k8s-app: calico-kube-controllers
@@ -5186,8 +5200,8 @@ spec:
51865200
spec:
51875201
nodeSelector:
51885202
kubernetes.io/os: linux
5189-
{{ if .NodeSelector }}
5190-
{{- toYaml .NodeSelector | indent 8 }}
5203+
{{ if .ControllerNodeSelector }}
5204+
{{- toYaml .ControllerNodeSelector | indent 8 }}
51915205
{{- end }}
51925206
tolerations:
51935207
# Mark the pod as a critical add-on for rescheduling.
@@ -5197,7 +5211,7 @@ spec:
51975211
effect: NoSchedule
51985212
- key: node-role.kubernetes.io/control-plane
51995213
effect: NoSchedule
5200-
{{ if .NodeSelector }}
5214+
{{ if .ControllerNodeSelector }}
52015215
affinity:
52025216
podAntiAffinity:
52035217
preferredDuringSchedulingIgnoredDuringExecution:
@@ -5258,7 +5272,7 @@ spec:
52585272
# We recommend using Typha if you have more than 50 nodes. Above 100 nodes it is essential
52595273
# (when using the Kubernetes datastore). Use one replica for every 100-200 nodes. In
52605274
# production, we recommend running at least 3 replicas to reduce the impact of rolling upgrade.
5261-
replicas: {{ if .Replicas }}{{ .Replicas }}{{ else }}1{{ end }}
5275+
replicas: {{ if .TyphaReplicas }}{{ .TyphaReplicas }}{{ else }}1{{ end }}
52625276
revisionHistoryLimit: 2
52635277
selector:
52645278
matchLabels:
@@ -5285,14 +5299,14 @@ spec:
52855299
spec:
52865300
nodeSelector:
52875301
kubernetes.io/os: linux
5288-
{{ if .NodeSelector }}
5289-
{{- toYaml .NodeSelector | indent 8 }}
5302+
{{ if .TyphaNodeSelector }}
5303+
{{- toYaml .TyphaNodeSelector | indent 8 }}
52905304
{{- end }}
52915305
hostNetwork: true
52925306
# Typha supports graceful shut down, disconnecting clients slowly during the grace period.
52935307
# The TYPHA_SHUTDOWNTIMEOUTSECS env var should be kept in sync with this value.
52945308
terminationGracePeriodSeconds: 300
5295-
{{ if .NodeSelector }}
5309+
{{ if .TyphaNodeSelector }}
52965310
affinity:
52975311
podAntiAffinity:
52985312
preferredDuringSchedulingIgnoredDuringExecution:

docs/config-example.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,8 @@ spec:
148148
ipipMode: Always # IPIP Mode to use for the IPv4 POOL created at start up. If set to a value other than Never, vxlanMode should be set to "Never". [Always | CrossSubnet | Never] [Default: Always]
149149
vxlanMode: Never # VXLAN Mode to use for the IPv4 POOL created at start up. If set to a value other than Never, ipipMode should be set to "Never". [Always | CrossSubnet | Never] [Default: Never]
150150
vethMTU: 0 # The maximum transmission unit (MTU) setting determines the largest packet size that can be transmitted through your network. By default, MTU is auto-detected. [Default: 0]
151-
kubePodsCIDR: 10.233.64.0/18,fc00::/48
152-
kubeServiceCIDR: 10.233.0.0/18,fd00::/108
151+
kubePodsCIDR: 10.233.64.0/18,fd85:ee78:d8a6:8607::1:0000/112
152+
kubeServiceCIDR: 10.233.0.0/18,fd85:ee78:d8a6:8607::1000/116
153153
storage:
154154
openebs:
155155
basePath: /var/openebs/local # base path of the local PV provisioner

0 commit comments

Comments
 (0)