support kube-proxy ipvs mode for kubeadm

This commit is contained in:
Lion-Wei 2017-10-28 16:24:21 +08:00
parent eff1a84638
commit abe8df611b
5 changed files with 22 additions and 6 deletions

View File

@ -35,15 +35,19 @@ const (
// StoreCertsInSecrets is alpha in v1.8 // StoreCertsInSecrets is alpha in v1.8
StoreCertsInSecrets = "StoreCertsInSecrets" StoreCertsInSecrets = "StoreCertsInSecrets"
// SupportIPVSProxyMode is alpha in v1.8
SupportIPVSProxyMode = "SupportIPVSProxyMode"
) )
var v190 = version.MustParseSemantic("v1.9.0") var v190 = version.MustParseSemantic("v1.9.0-alpha.1")
// InitFeatureGates are the default feature gates for the init command // InitFeatureGates are the default feature gates for the init command
var InitFeatureGates = FeatureList{ var InitFeatureGates = FeatureList{
SelfHosting: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Beta}}, SelfHosting: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Beta}},
StoreCertsInSecrets: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}}, StoreCertsInSecrets: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}},
HighAvailability: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}, MinimumVersion: v190}, HighAvailability: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}, MinimumVersion: v190},
SupportIPVSProxyMode: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}, MinimumVersion: v190},
} }
// Feature represents a feature being gated // Feature represents a feature being gated

View File

@ -31,6 +31,7 @@ go_library(
deps = [ deps = [
"//cmd/kubeadm/app/apis/kubeadm:go_default_library", "//cmd/kubeadm/app/apis/kubeadm:go_default_library",
"//cmd/kubeadm/app/constants:go_default_library", "//cmd/kubeadm/app/constants:go_default_library",
"//cmd/kubeadm/app/features:go_default_library",
"//cmd/kubeadm/app/util:go_default_library", "//cmd/kubeadm/app/util:go_default_library",
"//cmd/kubeadm/app/util/apiclient:go_default_library", "//cmd/kubeadm/app/util/apiclient:go_default_library",
"//pkg/api/legacyscheme:go_default_library", "//pkg/api/legacyscheme:go_default_library",

View File

@ -75,6 +75,7 @@ spec:
command: command:
- /usr/local/bin/kube-proxy - /usr/local/bin/kube-proxy
- --kubeconfig=/var/lib/kube-proxy/kubeconfig.conf - --kubeconfig=/var/lib/kube-proxy/kubeconfig.conf
{{ .ExtraParams }}
{{ .ClusterCIDR }} {{ .ClusterCIDR }}
securityContext: securityContext:
privileged: true privileged: true

View File

@ -28,6 +28,7 @@ import (
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
"k8s.io/kubernetes/cmd/kubeadm/app/features"
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
"k8s.io/kubernetes/cmd/kubeadm/app/util/apiclient" "k8s.io/kubernetes/cmd/kubeadm/app/util/apiclient"
"k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/api/legacyscheme"
@ -62,11 +63,12 @@ func EnsureProxyAddon(cfg *kubeadmapi.MasterConfiguration, client clientset.Inte
return fmt.Errorf("error when parsing kube-proxy configmap template: %v", err) return fmt.Errorf("error when parsing kube-proxy configmap template: %v", err)
} }
proxyDaemonSetBytes, err := kubeadmutil.ParseTemplate(KubeProxyDaemonSet, struct{ ImageRepository, Arch, Version, ImageOverride, ClusterCIDR, MasterTaintKey, CloudTaintKey string }{ proxyDaemonSetBytes, err := kubeadmutil.ParseTemplate(KubeProxyDaemonSet, struct{ ImageRepository, Arch, Version, ImageOverride, ExtraParams, ClusterCIDR, MasterTaintKey, CloudTaintKey string }{
ImageRepository: cfg.GetControlPlaneImageRepository(), ImageRepository: cfg.GetControlPlaneImageRepository(),
Arch: runtime.GOARCH, Arch: runtime.GOARCH,
Version: kubeadmutil.KubernetesVersionToImageTag(cfg.KubernetesVersion), Version: kubeadmutil.KubernetesVersionToImageTag(cfg.KubernetesVersion),
ImageOverride: cfg.UnifiedControlPlaneImage, ImageOverride: cfg.UnifiedControlPlaneImage,
ExtraParams: getParams(cfg.FeatureGates),
ClusterCIDR: getClusterCIDR(cfg.Networking.PodSubnet), ClusterCIDR: getClusterCIDR(cfg.Networking.PodSubnet),
MasterTaintKey: kubeadmconstants.LabelNodeRoleMaster, MasterTaintKey: kubeadmconstants.LabelNodeRoleMaster,
CloudTaintKey: algorithm.TaintExternalCloudProvider, CloudTaintKey: algorithm.TaintExternalCloudProvider,
@ -142,6 +144,13 @@ func createClusterRoleBindings(client clientset.Interface) error {
}) })
} }
func getParams(featureList map[string]bool) string {
if features.Enabled(featureList, features.SupportIPVSProxyMode) {
return "- --proxy-mode=ipvs\n - --feature-gates=SupportIPVSProxyMode=true"
}
return ""
}
func getClusterCIDR(podsubnet string) string { func getClusterCIDR(podsubnet string) string {
if len(podsubnet) == 0 { if len(podsubnet) == 0 {
return "" return ""

View File

@ -115,11 +115,12 @@ func TestCompileManifests(t *testing.T) {
}, },
{ {
manifest: KubeProxyDaemonSet, manifest: KubeProxyDaemonSet,
data: struct{ ImageRepository, Arch, Version, ImageOverride, ClusterCIDR, MasterTaintKey, CloudTaintKey string }{ data: struct{ ImageRepository, Arch, Version, ImageOverride, ExtraParams, ClusterCIDR, MasterTaintKey, CloudTaintKey string }{
ImageRepository: "foo", ImageRepository: "foo",
Arch: "foo", Arch: "foo",
Version: "foo", Version: "foo",
ImageOverride: "foo", ImageOverride: "foo",
ExtraParams: "foo",
ClusterCIDR: "foo", ClusterCIDR: "foo",
MasterTaintKey: "foo", MasterTaintKey: "foo",
CloudTaintKey: "foo", CloudTaintKey: "foo",