forked from kubernetes/kubernetes
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request kubernetes#63788 from luxas/kubeadm_add_v1alpha2
Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. kubeadm: Add (duplicated) v1alpha2 Config API **What this PR does / why we need it**: Work in progress PR to add a (initially duplicated) `v1alpha2` we can iterate on during the cycle. **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Part of kubernetes/community#2131 **Special notes for your reviewer**: This PR depends on: - [x] kubernetes#63782 - [x] kubernetes#63783 - [x] kubernetes#63787 - [x] kubernetes#63799 The first commit is from kubernetes#63799. The second commit duplicates v1alpha1, but updates timestamps, and doesn't require the `upgrade.go`. The third commit does the mechanical bump of using v1alpha1 -> v1alpha2 The fourth commit updates bazel **Release note**: ```release-note [action required] kubeadm now uses an upgraded API version for the configuration file, `kubeadm.k8s.io/v1alpha2`. kubeadm in v1.11 will still be able to read `v1alpha1` configuration, and will automatically convert the configuration to `v1alpha2` internally and when storing the configuration in the ConfigMap in the cluster. ``` @kubernetes/sig-cluster-lifecycle-pr-reviews @liztio
- Loading branch information
Showing
54 changed files
with
1,774 additions
and
112 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||
|
||
go_library( | ||
name = "go_default_library", | ||
srcs = [ | ||
"defaults.go", | ||
"doc.go", | ||
"register.go", | ||
"types.go", | ||
"zz_generated.conversion.go", | ||
"zz_generated.deepcopy.go", | ||
"zz_generated.defaults.go", | ||
] + select({ | ||
"@io_bazel_rules_go//go/platform:android": [ | ||
"defaults_unix.go", | ||
], | ||
"@io_bazel_rules_go//go/platform:darwin": [ | ||
"defaults_unix.go", | ||
], | ||
"@io_bazel_rules_go//go/platform:dragonfly": [ | ||
"defaults_unix.go", | ||
], | ||
"@io_bazel_rules_go//go/platform:freebsd": [ | ||
"defaults_unix.go", | ||
], | ||
"@io_bazel_rules_go//go/platform:linux": [ | ||
"defaults_unix.go", | ||
], | ||
"@io_bazel_rules_go//go/platform:nacl": [ | ||
"defaults_unix.go", | ||
], | ||
"@io_bazel_rules_go//go/platform:netbsd": [ | ||
"defaults_unix.go", | ||
], | ||
"@io_bazel_rules_go//go/platform:openbsd": [ | ||
"defaults_unix.go", | ||
], | ||
"@io_bazel_rules_go//go/platform:plan9": [ | ||
"defaults_unix.go", | ||
], | ||
"@io_bazel_rules_go//go/platform:solaris": [ | ||
"defaults_unix.go", | ||
], | ||
"@io_bazel_rules_go//go/platform:windows": [ | ||
"defaults_windows.go", | ||
], | ||
"//conditions:default": [], | ||
}), | ||
importpath = "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha2", | ||
visibility = ["//visibility:public"], | ||
deps = [ | ||
"//cmd/kubeadm/app/apis/kubeadm:go_default_library", | ||
"//cmd/kubeadm/app/constants:go_default_library", | ||
"//cmd/kubeadm/app/features:go_default_library", | ||
"//pkg/kubelet/apis/kubeletconfig/scheme:go_default_library", | ||
"//pkg/kubelet/apis/kubeletconfig/v1beta1:go_default_library", | ||
"//pkg/proxy/apis/kubeproxyconfig/scheme:go_default_library", | ||
"//pkg/proxy/apis/kubeproxyconfig/v1alpha1:go_default_library", | ||
"//vendor/k8s.io/api/core/v1:go_default_library", | ||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", | ||
"//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library", | ||
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", | ||
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", | ||
], | ||
) | ||
|
||
filegroup( | ||
name = "package-srcs", | ||
srcs = glob(["**"]), | ||
tags = ["automanaged"], | ||
visibility = ["//visibility:private"], | ||
) | ||
|
||
filegroup( | ||
name = "all-srcs", | ||
srcs = [":package-srcs"], | ||
tags = ["automanaged"], | ||
visibility = ["//visibility:public"], | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,261 @@ | ||
/* | ||
Copyright 2018 The Kubernetes Authors. | ||
Licensed under the Apache License, Version 2.0 (the "License"); | ||
you may not use this file except in compliance with the License. | ||
You may obtain a copy of the License at | ||
http://www.apache.org/licenses/LICENSE-2.0 | ||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. | ||
*/ | ||
|
||
package v1alpha2 | ||
|
||
import ( | ||
"net/url" | ||
"strings" | ||
"time" | ||
|
||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
"k8s.io/apimachinery/pkg/runtime" | ||
"k8s.io/kubernetes/cmd/kubeadm/app/constants" | ||
"k8s.io/kubernetes/cmd/kubeadm/app/features" | ||
kubeletscheme "k8s.io/kubernetes/pkg/kubelet/apis/kubeletconfig/scheme" | ||
kubeletconfigv1beta1 "k8s.io/kubernetes/pkg/kubelet/apis/kubeletconfig/v1beta1" | ||
kubeproxyscheme "k8s.io/kubernetes/pkg/proxy/apis/kubeproxyconfig/scheme" | ||
kubeproxyconfigv1alpha1 "k8s.io/kubernetes/pkg/proxy/apis/kubeproxyconfig/v1alpha1" | ||
) | ||
|
||
const ( | ||
// DefaultServiceDNSDomain defines default cluster-internal domain name for Services and Pods | ||
DefaultServiceDNSDomain = "cluster.local" | ||
// DefaultServicesSubnet defines default service subnet range | ||
DefaultServicesSubnet = "10.96.0.0/12" | ||
// DefaultClusterDNSIP defines default DNS IP | ||
DefaultClusterDNSIP = "10.96.0.10" | ||
// DefaultKubernetesVersion defines default kubernetes version | ||
DefaultKubernetesVersion = "stable-1.10" | ||
// DefaultAPIBindPort defines default API port | ||
DefaultAPIBindPort = 6443 | ||
// DefaultAuthorizationModes defines default authorization modes | ||
DefaultAuthorizationModes = "Node,RBAC" | ||
// DefaultCertificatesDir defines default certificate directory | ||
DefaultCertificatesDir = "/etc/kubernetes/pki" | ||
// DefaultImageRepository defines default image registry | ||
DefaultImageRepository = "k8s.gcr.io" | ||
// DefaultManifestsDir defines default manifests directory | ||
DefaultManifestsDir = "/etc/kubernetes/manifests" | ||
// DefaultCRISocket defines the default cri socket | ||
DefaultCRISocket = "/var/run/dockershim.sock" | ||
// DefaultClusterName defines the default cluster name | ||
DefaultClusterName = "kubernetes" | ||
|
||
// DefaultEtcdDataDir defines default location of etcd where static pods will save data to | ||
DefaultEtcdDataDir = "/var/lib/etcd" | ||
// DefaultEtcdClusterSize defines the default cluster size when using the etcd-operator | ||
DefaultEtcdClusterSize = 3 | ||
// DefaultEtcdOperatorVersion defines the default version of the etcd-operator to use | ||
DefaultEtcdOperatorVersion = "v0.6.0" | ||
// DefaultEtcdCertDir represents the directory where PKI assets are stored for self-hosted etcd | ||
DefaultEtcdCertDir = "/etc/kubernetes/pki/etcd" | ||
// DefaultEtcdClusterServiceName is the default name of the service backing the etcd cluster | ||
DefaultEtcdClusterServiceName = "etcd-cluster" | ||
// DefaultProxyBindAddressv4 is the default bind address when the advertise address is v4 | ||
DefaultProxyBindAddressv4 = "0.0.0.0" | ||
// DefaultProxyBindAddressv6 is the default bind address when the advertise address is v6 | ||
DefaultProxyBindAddressv6 = "::" | ||
// KubeproxyKubeConfigFileName defines the file name for the kube-proxy's KubeConfig file | ||
KubeproxyKubeConfigFileName = "/var/lib/kube-proxy/kubeconfig.conf" | ||
|
||
// DefaultDiscoveryTimeout specifies the default discovery timeout for kubeadm (used unless one is specified in the NodeConfiguration) | ||
DefaultDiscoveryTimeout = 5 * time.Minute | ||
) | ||
|
||
var ( | ||
// DefaultAuditPolicyLogMaxAge is defined as a var so its address can be taken | ||
// It is the number of days to store audit logs | ||
DefaultAuditPolicyLogMaxAge = int32(2) | ||
) | ||
|
||
func addDefaultingFuncs(scheme *runtime.Scheme) error { | ||
return RegisterDefaults(scheme) | ||
} | ||
|
||
// SetDefaults_MasterConfiguration assigns default values to Master node | ||
func SetDefaults_MasterConfiguration(obj *MasterConfiguration) { | ||
if obj.KubernetesVersion == "" { | ||
obj.KubernetesVersion = DefaultKubernetesVersion | ||
} | ||
|
||
if obj.API.BindPort == 0 { | ||
obj.API.BindPort = DefaultAPIBindPort | ||
} | ||
|
||
if obj.Networking.ServiceSubnet == "" { | ||
obj.Networking.ServiceSubnet = DefaultServicesSubnet | ||
} | ||
|
||
if obj.Networking.DNSDomain == "" { | ||
obj.Networking.DNSDomain = DefaultServiceDNSDomain | ||
} | ||
|
||
if len(obj.AuthorizationModes) == 0 { | ||
obj.AuthorizationModes = strings.Split(DefaultAuthorizationModes, ",") | ||
} | ||
|
||
if obj.CertificatesDir == "" { | ||
obj.CertificatesDir = DefaultCertificatesDir | ||
} | ||
|
||
if obj.TokenTTL == nil { | ||
obj.TokenTTL = &metav1.Duration{ | ||
Duration: constants.DefaultTokenDuration, | ||
} | ||
} | ||
|
||
if obj.CRISocket == "" { | ||
obj.CRISocket = DefaultCRISocket | ||
} | ||
|
||
if len(obj.TokenUsages) == 0 { | ||
obj.TokenUsages = constants.DefaultTokenUsages | ||
} | ||
|
||
if len(obj.TokenGroups) == 0 { | ||
obj.TokenGroups = constants.DefaultTokenGroups | ||
} | ||
|
||
if obj.ImageRepository == "" { | ||
obj.ImageRepository = DefaultImageRepository | ||
} | ||
|
||
if obj.Etcd.DataDir == "" { | ||
obj.Etcd.DataDir = DefaultEtcdDataDir | ||
} | ||
|
||
if obj.ClusterName == "" { | ||
obj.ClusterName = DefaultClusterName | ||
} | ||
|
||
SetDefaultsEtcdSelfHosted(obj) | ||
if features.Enabled(obj.FeatureGates, features.DynamicKubeletConfig) { | ||
SetDefaults_KubeletConfiguration(obj) | ||
} | ||
SetDefaults_ProxyConfiguration(obj) | ||
SetDefaults_AuditPolicyConfiguration(obj) | ||
} | ||
|
||
// SetDefaults_ProxyConfiguration assigns default values for the Proxy | ||
func SetDefaults_ProxyConfiguration(obj *MasterConfiguration) { | ||
if obj.KubeProxy.Config == nil { | ||
obj.KubeProxy.Config = &kubeproxyconfigv1alpha1.KubeProxyConfiguration{} | ||
} | ||
if obj.KubeProxy.Config.ClusterCIDR == "" && obj.Networking.PodSubnet != "" { | ||
obj.KubeProxy.Config.ClusterCIDR = obj.Networking.PodSubnet | ||
} | ||
|
||
if obj.KubeProxy.Config.ClientConnection.KubeConfigFile == "" { | ||
obj.KubeProxy.Config.ClientConnection.KubeConfigFile = KubeproxyKubeConfigFileName | ||
} | ||
|
||
kubeproxyscheme.Scheme.Default(obj.KubeProxy.Config) | ||
} | ||
|
||
// SetDefaults_NodeConfiguration assigns default values to a regular node | ||
func SetDefaults_NodeConfiguration(obj *NodeConfiguration) { | ||
if obj.CACertPath == "" { | ||
obj.CACertPath = DefaultCACertPath | ||
} | ||
if len(obj.TLSBootstrapToken) == 0 { | ||
obj.TLSBootstrapToken = obj.Token | ||
} | ||
if len(obj.DiscoveryToken) == 0 && len(obj.DiscoveryFile) == 0 { | ||
obj.DiscoveryToken = obj.Token | ||
} | ||
if obj.CRISocket == "" { | ||
obj.CRISocket = DefaultCRISocket | ||
} | ||
// Make sure file URLs become paths | ||
if len(obj.DiscoveryFile) != 0 { | ||
u, err := url.Parse(obj.DiscoveryFile) | ||
if err == nil && u.Scheme == "file" { | ||
obj.DiscoveryFile = u.Path | ||
} | ||
} | ||
if obj.DiscoveryTimeout == nil { | ||
obj.DiscoveryTimeout = &metav1.Duration{ | ||
Duration: DefaultDiscoveryTimeout, | ||
} | ||
} | ||
if obj.ClusterName == "" { | ||
obj.ClusterName = DefaultClusterName | ||
} | ||
} | ||
|
||
// SetDefaultsEtcdSelfHosted sets defaults for self-hosted etcd if used | ||
func SetDefaultsEtcdSelfHosted(obj *MasterConfiguration) { | ||
if obj.Etcd.SelfHosted != nil { | ||
if obj.Etcd.SelfHosted.ClusterServiceName == "" { | ||
obj.Etcd.SelfHosted.ClusterServiceName = DefaultEtcdClusterServiceName | ||
} | ||
|
||
if obj.Etcd.SelfHosted.EtcdVersion == "" { | ||
obj.Etcd.SelfHosted.EtcdVersion = constants.DefaultEtcdVersion | ||
} | ||
|
||
if obj.Etcd.SelfHosted.OperatorVersion == "" { | ||
obj.Etcd.SelfHosted.OperatorVersion = DefaultEtcdOperatorVersion | ||
} | ||
|
||
if obj.Etcd.SelfHosted.CertificatesDir == "" { | ||
obj.Etcd.SelfHosted.CertificatesDir = DefaultEtcdCertDir | ||
} | ||
} | ||
} | ||
|
||
// SetDefaults_KubeletConfiguration assigns default values to kubelet | ||
func SetDefaults_KubeletConfiguration(obj *MasterConfiguration) { | ||
if obj.KubeletConfiguration.BaseConfig == nil { | ||
obj.KubeletConfiguration.BaseConfig = &kubeletconfigv1beta1.KubeletConfiguration{} | ||
} | ||
if obj.KubeletConfiguration.BaseConfig.StaticPodPath == "" { | ||
obj.KubeletConfiguration.BaseConfig.StaticPodPath = DefaultManifestsDir | ||
} | ||
if obj.KubeletConfiguration.BaseConfig.ClusterDNS == nil { | ||
dnsIP, err := constants.GetDNSIP(obj.Networking.ServiceSubnet) | ||
if err != nil { | ||
obj.KubeletConfiguration.BaseConfig.ClusterDNS = []string{DefaultClusterDNSIP} | ||
} else { | ||
obj.KubeletConfiguration.BaseConfig.ClusterDNS = []string{dnsIP.String()} | ||
} | ||
} | ||
if obj.KubeletConfiguration.BaseConfig.ClusterDomain == "" { | ||
obj.KubeletConfiguration.BaseConfig.ClusterDomain = DefaultServiceDNSDomain | ||
} | ||
if obj.KubeletConfiguration.BaseConfig.Authorization.Mode == "" { | ||
obj.KubeletConfiguration.BaseConfig.Authorization.Mode = kubeletconfigv1beta1.KubeletAuthorizationModeWebhook | ||
} | ||
if obj.KubeletConfiguration.BaseConfig.Authentication.X509.ClientCAFile == "" { | ||
obj.KubeletConfiguration.BaseConfig.Authentication.X509.ClientCAFile = DefaultCACertPath | ||
} | ||
|
||
scheme, _, _ := kubeletscheme.NewSchemeAndCodecs() | ||
if scheme != nil { | ||
scheme.Default(obj.KubeletConfiguration.BaseConfig) | ||
} | ||
} | ||
|
||
// SetDefaults_AuditPolicyConfiguration sets default values for the AuditPolicyConfiguration | ||
func SetDefaults_AuditPolicyConfiguration(obj *MasterConfiguration) { | ||
if obj.AuditPolicyConfiguration.LogDir == "" { | ||
obj.AuditPolicyConfiguration.LogDir = constants.StaticPodAuditPolicyLogDir | ||
} | ||
if obj.AuditPolicyConfiguration.LogMaxAge == nil { | ||
obj.AuditPolicyConfiguration.LogMaxAge = &DefaultAuditPolicyLogMaxAge | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
// +build !windows | ||
|
||
/* | ||
Copyright 2018 The Kubernetes Authors. | ||
Licensed under the Apache License, Version 2.0 (the "License"); | ||
you may not use this file except in compliance with the License. | ||
You may obtain a copy of the License at | ||
http://www.apache.org/licenses/LICENSE-2.0 | ||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. | ||
*/ | ||
|
||
package v1alpha2 | ||
|
||
// DefaultCACertPath defines default location of CA certificate on Linux | ||
const DefaultCACertPath = "/etc/kubernetes/pki/ca.crt" |
Oops, something went wrong.