Remove support for CoreOS and Jessie

This commit is contained in:
John Gardiner Myers 2020-05-04 22:30:01 -07:00
parent 5fc7ee69da
commit 06c6ac1bee
16 changed files with 23 additions and 209 deletions

View File

@ -32,6 +32,10 @@
* Terraform users on AWS may need to rename some resources in their state file in order to prepare for Terraform 0.12 support. See Required Actions below.
* Support for the CoreOS OS distribution has been removed. Users should consider Flatcar as a replacement.
* Support for the Debian 8 (Jessie) OS distribution has been removed.
* The Docker `health-check` service is now disabled by default. It shouldn't be needed anymore, but it can still be enabled by setting `spec.docker.healthCheck: true`. It is recommended to also check [node-problem-detector](https://github.com/kubernetes/node-problem-detector) and [draino](https://github.com/planetlabs/draino) as replacements. See Required Actions below.
* Lyft CNI plugin default subnet tags changed from from `Type: pod` to `KubernetesCluster: myclustername.mydns.io`. Subnets intended for use by the plugin will need to be tagged with this new tag and [additional tag filters](https://github.com/lyft/cni-ipvlan-vpc-k8s#other-configuration-flags) may need to be added to the cluster spec in order to achieve the desired set of subnets.

View File

@ -24,7 +24,6 @@ import (
type Distribution string
var (
DistributionJessie Distribution = "jessie"
DistributionDebian9 Distribution = "debian9"
DistributionDebian10 Distribution = "buster"
DistributionXenial Distribution = "xenial"
@ -35,7 +34,6 @@ var (
DistributionCentos7 Distribution = "centos7"
DistributionRhel8 Distribution = "rhel8"
DistributionCentos8 Distribution = "centos8"
DistributionCoreOS Distribution = "coreos"
DistributionFlatcar Distribution = "flatcar"
DistributionContainerOS Distribution = "containeros"
)
@ -44,8 +42,6 @@ func (d Distribution) BuildTags() []string {
var t []string
switch d {
case DistributionJessie:
t = []string{"_jessie"}
case DistributionDebian9, DistributionDebian10:
t = []string{} // trying to move away from tags
case DistributionXenial:
@ -64,8 +60,6 @@ func (d Distribution) BuildTags() []string {
t = []string{"_centos8"}
case DistributionRhel8:
t = []string{"_rhel8"}
case DistributionCoreOS:
t = []string{"_coreos"}
case DistributionFlatcar:
t = []string{"_flatcar"}
case DistributionContainerOS:
@ -90,13 +84,13 @@ func (d Distribution) BuildTags() []string {
func (d Distribution) IsDebianFamily() bool {
switch d {
case DistributionJessie, DistributionDebian9, DistributionDebian10:
case DistributionDebian9, DistributionDebian10:
return true
case DistributionXenial, DistributionBionic, DistributionFocal:
return true
case DistributionCentos7, DistributionRhel7, DistributionCentos8, DistributionRhel8, DistributionAmazonLinux2:
return false
case DistributionCoreOS, DistributionFlatcar, DistributionContainerOS:
case DistributionFlatcar, DistributionContainerOS:
return false
default:
klog.Fatalf("unknown distribution: %s", d)
@ -106,13 +100,13 @@ func (d Distribution) IsDebianFamily() bool {
func (d Distribution) IsUbuntu() bool {
switch d {
case DistributionJessie, DistributionDebian9, DistributionDebian10:
case DistributionDebian9, DistributionDebian10:
return false
case DistributionXenial, DistributionBionic, DistributionFocal:
return true
case DistributionCentos7, DistributionRhel7, DistributionCentos8, DistributionRhel8, DistributionAmazonLinux2:
return false
case DistributionCoreOS, DistributionFlatcar, DistributionContainerOS:
case DistributionFlatcar, DistributionContainerOS:
return false
default:
klog.Fatalf("unknown distribution: %s", d)
@ -124,9 +118,9 @@ func (d Distribution) IsRHELFamily() bool {
switch d {
case DistributionCentos7, DistributionRhel7, DistributionCentos8, DistributionRhel8, DistributionAmazonLinux2:
return true
case DistributionJessie, DistributionXenial, DistributionBionic, DistributionFocal, DistributionDebian9, DistributionDebian10:
case DistributionXenial, DistributionBionic, DistributionFocal, DistributionDebian9, DistributionDebian10:
return false
case DistributionCoreOS, DistributionFlatcar, DistributionContainerOS:
case DistributionFlatcar, DistributionContainerOS:
return false
default:
klog.Fatalf("unknown distribution: %s", d)
@ -136,11 +130,11 @@ func (d Distribution) IsRHELFamily() bool {
func (d Distribution) IsSystemd() bool {
switch d {
case DistributionJessie, DistributionXenial, DistributionBionic, DistributionFocal, DistributionDebian9, DistributionDebian10:
case DistributionXenial, DistributionBionic, DistributionFocal, DistributionDebian9, DistributionDebian10:
return true
case DistributionCentos7, DistributionRhel7, DistributionCentos8, DistributionRhel8, DistributionAmazonLinux2:
return true
case DistributionCoreOS, DistributionFlatcar:
case DistributionFlatcar:
return true
case DistributionContainerOS:
return true

View File

@ -51,7 +51,7 @@ func FindDistribution(rootfs string) (Distribution, error) {
if err == nil {
debianVersion := strings.TrimSpace(string(debianVersionBytes))
if strings.HasPrefix(debianVersion, "8.") {
return DistributionJessie, nil
return "", fmt.Errorf("distribution Degian 8 (Jessie) is no longer supported")
} else if strings.HasPrefix(debianVersion, "9.") {
return DistributionDebian9, nil
} else if strings.HasPrefix(debianVersion, "10.") {
@ -94,7 +94,7 @@ func FindDistribution(rootfs string) (Distribution, error) {
for _, line := range strings.Split(string(usrLibOsRelease), "\n") {
line = strings.TrimSpace(line)
if line == "ID=coreos" {
return DistributionCoreOS, nil
return "", fmt.Errorf("distribution CoreOS is no longer supported")
} else if line == "ID=flatcar" {
return DistributionFlatcar, nil
}

View File

@ -207,13 +207,6 @@ func (b *ContainerdBuilder) Build(c *fi.ModelBuilderContext) error {
// @check: neither coreos or containeros need provision containerd.service, just the containerd daemon options
switch b.Distribution {
case distros.DistributionCoreOS:
klog.Infof("Detected CoreOS; won't install containerd")
if err := b.buildContainerOSConfigurationDropIn(c); err != nil {
return err
}
return nil
case distros.DistributionFlatcar:
klog.Infof("Detected Flatcar; won't install containerd")
if err := b.buildContainerOSConfigurationDropIn(c); err != nil {

View File

@ -79,11 +79,9 @@ func (c *NodeupModelContext) SSLHostPaths() []string {
paths := []string{"/etc/ssl", "/etc/pki/tls", "/etc/pki/ca-trust"}
switch c.Distribution {
case distros.DistributionCoreOS:
// Because /usr is read-only on CoreOS, we can't have any new directories; docker will try (and fail) to create them
// TODO: Just check if the directories exist?
paths = append(paths, "/usr/share/ca-certificates")
case distros.DistributionFlatcar:
// Because /usr is read-only on Flatcar, we can't have any new directories; docker will try (and fail) to create them
// TODO: Just check if the directories exist?
paths = append(paths, "/usr/share/ca-certificates")
case distros.DistributionContainerOS:
paths = append(paths, "/usr/share/ca-certificates")
@ -410,9 +408,6 @@ func (c *NodeupModelContext) UseSecureKubelet() bool {
// KubectlPath returns distro based path for kubectl
func (c *NodeupModelContext) KubectlPath() string {
kubeletCommand := "/usr/local/bin"
if c.Distribution == distros.DistributionCoreOS {
kubeletCommand = "/opt/bin"
}
if c.Distribution == distros.DistributionFlatcar {
kubeletCommand = "/opt/bin"
}

View File

@ -56,30 +56,6 @@ var dockerVersions = []packageVersion{
MarkImmutable: []string{"/usr/bin/docker-runc"},
},
// 17.03.2 - Jessie
{
PackageVersion: "17.03.2",
Name: "docker-ce",
Distros: []distros.Distribution{distros.DistributionJessie},
Architectures: []Architecture{ArchitectureAmd64},
Version: "17.03.2~ce-0~debian-jessie",
Source: "http://download.docker.com/linux/debian/dists/jessie/pool/stable/amd64/docker-ce_17.03.2~ce-0~debian-jessie_amd64.deb",
Hash: "a7ac54aaa7d33122ca5f7a2df817cbefb5cdbfc7",
MarkImmutable: []string{"/usr/bin/docker-runc"},
},
// 17.03.2 - Jessie on ARM
{
PackageVersion: "17.03.2",
Name: "docker-ce",
Distros: []distros.Distribution{distros.DistributionJessie},
Architectures: []Architecture{ArchitectureArm},
Version: "17.03.2~ce-0~debian-jessie",
Source: "http://download.docker.com/linux/debian/dists/jessie/pool/stable/armhf/docker-ce_17.03.2~ce-0~debian-jessie_armhf.deb",
Hash: "71e425b83ce0ef49d6298d61e61c4efbc76b9c65",
MarkImmutable: []string{"/usr/bin/docker-runc"},
},
// 17.03.2 - Xenial
{
PackageVersion: "17.03.2",
@ -123,28 +99,6 @@ var dockerVersions = []packageVersion{
},
// 17.09.0 - k8s 1.8
// 17.09.0 - Jessie
{
PackageVersion: "17.09.0",
Name: "docker-ce",
Distros: []distros.Distribution{distros.DistributionJessie},
Architectures: []Architecture{ArchitectureAmd64},
Version: "17.09.0~ce-0~debian",
Source: "http://download.docker.com/linux/debian/dists/jessie/pool/stable/amd64/docker-ce_17.09.0~ce-0~debian_amd64.deb",
Hash: "430ba87f8aa36fedcac1a48e909cbe1830b53845",
},
// 17.09.0 - Jessie on ARM
{
PackageVersion: "17.09.0",
Name: "docker-ce",
Distros: []distros.Distribution{distros.DistributionJessie},
Architectures: []Architecture{ArchitectureArm},
Version: "17.09.0~ce-0~debian",
Source: "http://download.docker.com/linux/debian/dists/jessie/pool/stable/armhf/docker-ce_17.09.0~ce-0~debian_armhf.deb",
Hash: "5001a1defec7c33aa58ddebbd3eae6ebb5f36479",
},
// 17.09.0 - Debian9 (stretch)
{
PackageVersion: "17.09.0",
@ -257,17 +211,6 @@ var dockerVersions = []packageVersion{
Hash: "05c9b098437bcf1b489c2a3a9764c3b779af7bc4",
},
// 18.06.2 - Jessie
{
PackageVersion: "18.06.2",
Name: "docker-ce",
Distros: []distros.Distribution{distros.DistributionJessie},
Architectures: []Architecture{ArchitectureAmd64},
Version: "18.06.2~ce~3-0~debian",
Source: "https://download.docker.com/linux/debian/dists/jessie/pool/stable/amd64/docker-ce_18.06.2~ce~3-0~debian_amd64.deb",
Hash: "1a2500311230aff37aa81dd1292a88302fb0a2e1",
},
// 18.06.1 - CentOS / Rhel7 (two packages)
{
PackageVersion: "18.06.1",
@ -333,17 +276,6 @@ var dockerVersions = []packageVersion{
Hash: "93b5a055a39462867d79109b00db1367e3d9e32f",
},
// 18.06.3 - Jessie
{
PackageVersion: "18.06.3",
Name: "docker-ce",
Distros: []distros.Distribution{distros.DistributionJessie},
Architectures: []Architecture{ArchitectureAmd64},
Version: "18.06.3~ce~3-0~debian",
Source: "https://download.docker.com/linux/debian/dists/jessie/pool/stable/amd64/docker-ce_18.06.3~ce~3-0~debian_amd64.deb",
Hash: "058bcd4b055560866b8cad978c7aa224694602da",
},
// 18.06.3 - CentOS / Rhel7 (two packages)
{
PackageVersion: "18.06.3",
@ -645,13 +577,6 @@ func (b *DockerBuilder) Build(c *fi.ModelBuilderContext) error {
// @check: neither coreos or containeros need provision docker.service, just the docker daemon options
switch b.Distribution {
case distros.DistributionCoreOS:
klog.Infof("Detected CoreOS; won't install Docker")
if err := b.buildContainerOSConfigurationDropIn(c); err != nil {
return err
}
return nil
case distros.DistributionFlatcar:
klog.Infof("Detected Flatcar; won't install Docker")
if err := b.buildContainerOSConfigurationDropIn(c); err != nil {

View File

@ -38,10 +38,6 @@ func (b *EtcdBuilder) Build(c *fi.ModelBuilderContext) error {
}
switch b.Distribution {
case distros.DistributionCoreOS:
klog.Infof("Detected CoreOS; skipping etcd user installation")
return nil
case distros.DistributionFlatcar:
klog.Infof("Detected Flatcar; skipping etcd user installation")
return nil

View File

@ -152,10 +152,6 @@ func (b *KubeControllerManagerBuilder) buildPod() (*v1.Pod, error) {
// Default is different on ContainerOS, see https://github.com/kubernetes/kubernetes/pull/58171
volumePluginDir = "/home/kubernetes/flexvolume/"
case distros.DistributionCoreOS:
// The /usr directory is read-only for CoreOS
volumePluginDir = "/var/lib/kubelet/volumeplugins/"
case distros.DistributionFlatcar:
// The /usr directory is read-only for Flatcar
volumePluginDir = "/var/lib/kubelet/volumeplugins/"

View File

@ -104,7 +104,7 @@ func (b *KubectlBuilder) Build(c *fi.ModelBuilderContext) error {
func (b *KubectlBuilder) findKubeconfigUser() (*fi.User, *fi.Group, error) {
var users []string
switch b.Distribution {
case distros.DistributionJessie, distros.DistributionDebian9, distros.DistributionDebian10:
case distros.DistributionDebian9, distros.DistributionDebian10:
users = []string{"admin", "root"}
case distros.DistributionXenial, distros.DistributionBionic, distros.DistributionFocal:
users = []string{"ubuntu"}
@ -112,7 +112,7 @@ func (b *KubectlBuilder) findKubeconfigUser() (*fi.User, *fi.Group, error) {
users = []string{"centos"}
case distros.DistributionAmazonLinux2, distros.DistributionRhel7, distros.DistributionRhel8:
users = []string{"ec2-user"}
case distros.DistributionCoreOS, distros.DistributionFlatcar:
case distros.DistributionFlatcar:
users = []string{"core"}
default:
klog.Warningf("Unknown distro; won't write kubeconfig to homedir %s", b.Distribution)

View File

@ -141,13 +141,6 @@ func (b *KubeletBuilder) Build(c *fi.ModelBuilderContext) error {
})
}
if b.Distribution == distros.DistributionCoreOS {
// CoreOS does not ship with socat or conntrack. Install our own (statically linked) version
if err := b.addStaticUtils(c); err != nil {
return err
}
}
if err := b.addContainerizedMounter(c); err != nil {
return err
}
@ -160,9 +153,6 @@ func (b *KubeletBuilder) Build(c *fi.ModelBuilderContext) error {
// kubeletPath returns the path of the kubelet based on distro
func (b *KubeletBuilder) kubeletPath() string {
kubeletCommand := "/usr/local/bin/kubelet"
if b.Distribution == distros.DistributionCoreOS {
kubeletCommand = "/opt/kubernetes/bin/kubelet"
}
if b.Distribution == distros.DistributionFlatcar {
kubeletCommand = "/opt/kubernetes/bin/kubelet"
}
@ -277,10 +267,6 @@ func (b *KubeletBuilder) buildSystemdService() *nodetasks.Service {
klog.Warningf("unknown container runtime %q", b.Cluster.Spec.ContainerRuntime)
}
if b.Distribution == distros.DistributionCoreOS {
// We add /opt/kubernetes/bin for our utilities (socat, conntrack)
manifest.Set("Service", "Environment", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/kubernetes/bin")
}
manifest.Set("Service", "EnvironmentFile", "/etc/sysconfig/kubelet")
// @check if we are using bootstrap tokens and file checker
@ -331,30 +317,6 @@ func (b *KubeletBuilder) buildKubeletConfig() (*kops.KubeletConfigSpec, error) {
return kubeletConfigSpec, nil
}
func (b *KubeletBuilder) addStaticUtils(c *fi.ModelBuilderContext) error {
for _, binary := range []string{"socat", "conntrack"} {
assetName := binary
assetPath := ""
asset, err := b.Assets.Find(assetName, assetPath)
if err != nil {
return fmt.Errorf("error trying to locate asset %q: %v", assetName, err)
}
if asset == nil {
return fmt.Errorf("unable to locate asset %q", assetName)
}
t := &nodetasks.File{
Path: "/opt/kubernetes/bin/" + binary,
Contents: asset,
Type: nodetasks.FileType_File,
Mode: s("0755"),
}
c.AddTask(t)
}
return nil
}
// usesContainerizedMounter returns true if we use the containerized mounter
func (b *KubeletBuilder) usesContainerizedMounter() bool {
switch b.Distribution {
@ -553,10 +515,6 @@ func (b *KubeletBuilder) buildKubeletConfigSpec() (*kops.KubeletConfigSpec, erro
// Default is different on ContainerOS, see https://github.com/kubernetes/kubernetes/pull/58171
c.VolumePluginDirectory = "/home/kubernetes/flexvolume/"
case distros.DistributionCoreOS:
// The /usr directory is read-only for CoreOS
c.VolumePluginDirectory = "/var/lib/kubelet/volumeplugins/"
case distros.DistributionFlatcar:
// The /usr directory is read-only for Flatcar
c.VolumePluginDirectory = "/var/lib/kubelet/volumeplugins/"

View File

@ -43,8 +43,6 @@ func (b *LogrotateBuilder) Build(c *fi.ModelBuilderContext) error {
case distros.DistributionContainerOS:
klog.Infof("Detected ContainerOS; won't install logrotate")
return nil
case distros.DistributionCoreOS:
klog.Infof("Detected CoreOS; won't install logrotate")
case distros.DistributionFlatcar:
klog.Infof("Detected Flatcar; won't install logrotate")
default:
@ -92,7 +90,7 @@ func (b *LogrotateBuilder) Build(c *fi.ModelBuilderContext) error {
// addLogrotateService creates a logrotate systemd task to act as target for the timer, if one is needed
func (b *LogrotateBuilder) addLogrotateService(c *fi.ModelBuilderContext) error {
switch b.Distribution {
case distros.DistributionCoreOS, distros.DistributionFlatcar, distros.DistributionContainerOS:
case distros.DistributionFlatcar, distros.DistributionContainerOS:
// logrotate service already exists
return nil
}
@ -121,12 +119,6 @@ func (b *LogrotateBuilder) addLogRotate(c *fi.ModelBuilderContext, name, path st
options.MaxSize = "100M"
}
// CoreOS sets "dateext" options, and maxsize-based rotation will fail if
// the file has been previously rotated on the same calendar date.
if b.Distribution == distros.DistributionCoreOS {
options.DateFormat = "-%Y%m%d-%s"
}
// Flatcar sets "dateext" options, and maxsize-based rotation will fail if
// the file has been previously rotated on the same calendar date.
if b.Distribution == distros.DistributionFlatcar {

View File

@ -37,9 +37,6 @@ func (b *MiscUtilsBuilder) Build(c *fi.ModelBuilderContext) error {
case distros.DistributionContainerOS:
klog.V(2).Infof("Detected ContainerOS; won't install misc. utils")
return nil
case distros.DistributionCoreOS:
klog.V(2).Infof("Detected CoreOS; won't install misc. utils")
return nil
case distros.DistributionFlatcar:
klog.V(2).Infof("Detected Flatcar; won't install misc. utils")
return nil

View File

@ -38,9 +38,6 @@ func (b *NTPBuilder) Build(c *fi.ModelBuilderContext) error {
case distros.DistributionContainerOS:
klog.Infof("Detected ContainerOS; won't install ntp")
return nil
case distros.DistributionCoreOS:
klog.Infof("Detected CoreOS; won't install ntp")
return nil
case distros.DistributionFlatcar:
klog.Infof("Detected Flatcar; won't install ntp")
return nil

View File

@ -52,11 +52,6 @@ func (b *UpdateServiceBuilder) Build(c *fi.ModelBuilderContext) error {
}
}
if b.Distribution == distros.DistributionCoreOS {
klog.Infof("Detected OS %s; building %s service to disable update scheduler", ServiceName, b.Distribution)
c.AddTask(b.buildCoreOSSystemdService())
}
if b.Distribution == distros.DistributionFlatcar {
klog.Infof("Detected OS %s; building %s service to disable update scheduler", ServiceName, b.Distribution)
c.AddTask(b.buildFlatcarSystemdService())
@ -65,27 +60,6 @@ func (b *UpdateServiceBuilder) Build(c *fi.ModelBuilderContext) error {
return nil
}
func (b *UpdateServiceBuilder) buildCoreOSSystemdService() *nodetasks.Service {
manifest := &systemd.Manifest{}
manifest.Set("Unit", "Description", "Disable OS Update Scheduler")
manifest.Set("Unit", "Before", "locksmithd.service")
manifest.Set("Service", "Type", "oneshot")
manifest.Set("Service", "ExecStart", "/usr/bin/systemctl mask --now locksmithd.service")
manifestString := manifest.Render()
klog.V(8).Infof("Built service manifest %q\n%s", ServiceName, manifestString)
service := &nodetasks.Service{
Name: ServiceName + ".service",
Definition: s(manifestString),
}
service.InitDefaults()
return service
}
func (b *UpdateServiceBuilder) buildFlatcarSystemdService() *nodetasks.Service {
manifest := &systemd.Manifest{}
manifest.Set("Unit", "Description", "Disable OS Update Scheduler")

View File

@ -337,14 +337,8 @@ func (_ *Package) RenderLocal(t *local.LocalTarget, a, e, changes *Package) erro
var args []string
env := os.Environ()
if t.HasTag(tags.TagOSFamilyDebian) {
// Only Debian releases newer than Jessie can install .deb via apt-get
// TODO: Refactor this function when Jessie support is dropped (duplicated code)
if t.HasTag(tags.TagOSDebianJessie) {
args = []string{"dpkg", "-i"}
} else {
args = []string{"apt-get", "install", "--yes", "--no-install-recommends"}
env = append(env, "DEBIAN_FRONTEND=noninteractive")
}
args = []string{"apt-get", "install", "--yes", "--no-install-recommends"}
env = append(env, "DEBIAN_FRONTEND=noninteractive")
} else if t.HasTag(tags.TagOSFamilyRHEL) {
if t.HasTag(tags.TagOSCentOS8) || t.HasTag(tags.TagOSRHEL8) {
args = []string{"/usr/bin/dnf", "install", "-y", "--setopt=install_weak_deps=False"}

View File

@ -20,9 +20,8 @@ const (
TagOSFamilyRHEL = "_rhel_family"
TagOSFamilyDebian = "_debian_family"
TagOSDebianJessie = "_jessie"
TagOSCentOS8 = "_centos8"
TagOSRHEL8 = "_rhel8"
TagOSCentOS8 = "_centos8"
TagOSRHEL8 = "_rhel8"
TagSystemd = "_systemd"