From 6574fa1585b4c8c46d45bec6db6f5fe9c40bca93 Mon Sep 17 00:00:00 2001 From: Yu Xiang Zhang Date: Fri, 12 Jan 2024 20:54:49 +0000 Subject: [PATCH] Add support for EKS 1.29 --- pkg/actions/cluster/upgrade.go | 2 + pkg/actions/cluster/upgrade_test.go | 4 +- .../testdata/al2-updated-template.json | 2 +- pkg/addons/default/assets/coredns-1.29.json | 367 ++++++++++++++++++ .../eksctl.io/v1alpha5/assets/schema.json | 7 +- pkg/apis/eksctl.io/v1alpha5/types.go | 9 +- userdocs/src/getting-started.md | 2 +- 7 files changed, 383 insertions(+), 10 deletions(-) create mode 100644 pkg/addons/default/assets/coredns-1.29.json diff --git a/pkg/actions/cluster/upgrade.go b/pkg/actions/cluster/upgrade.go index 4dbc825147..f2bf0e5ad3 100644 --- a/pkg/actions/cluster/upgrade.go +++ b/pkg/actions/cluster/upgrade.go @@ -128,6 +128,8 @@ func getNextVersion(currentVersion string) (string, error) { return api.Version1_28, nil case api.Version1_28: return api.Version1_29, nil + case api.Version1_29: + return api.Version1_30, nil default: // version of control plane is not known to us, maybe we are just too old... return "", fmt.Errorf("control plane version %q is not known to this version of eksctl, try to upgrade eksctl first", currentVersion) diff --git a/pkg/actions/cluster/upgrade_test.go b/pkg/actions/cluster/upgrade_test.go index c3691ad965..cb89e1f975 100644 --- a/pkg/actions/cluster/upgrade_test.go +++ b/pkg/actions/cluster/upgrade_test.go @@ -87,9 +87,9 @@ var _ = Describe("upgrade cluster", func() { }), Entry("fails when the version is still not supported", upgradeCase{ - givenVersion: "1.29", + givenVersion: "1.30", eksVersion: api.LatestVersion, - expectedErrorText: "control plane version \"1.29\" is not known to this version of eksctl", + expectedErrorText: "control plane version \"1.30\" is not known to this version of eksctl", }), ) }) diff --git a/pkg/actions/nodegroup/testdata/al2-updated-template.json b/pkg/actions/nodegroup/testdata/al2-updated-template.json index b076f09e8f..19ebd16bd0 100644 --- a/pkg/actions/nodegroup/testdata/al2-updated-template.json +++ b/pkg/actions/nodegroup/testdata/al2-updated-template.json @@ -140,7 +140,7 @@ ] }, "NodegroupName": "amazonlinux2", - "ReleaseVersion": "1.28-20201212", + "ReleaseVersion": "1.29-20201212", "ScalingConfig": { "DesiredSize": 4, "MaxSize": 4, diff --git a/pkg/addons/default/assets/coredns-1.29.json b/pkg/addons/default/assets/coredns-1.29.json new file mode 100644 index 0000000000..9d1e4a48a9 --- /dev/null +++ b/pkg/addons/default/assets/coredns-1.29.json @@ -0,0 +1,367 @@ +{ + "apiVersion": "v1", + "items": [ + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "annotations": { + "prometheus.io/port": "9153", + "prometheus.io/scrape": "true" + }, + "labels": { + "eks.amazonaws.com/component": "kube-dns", + "k8s-app": "kube-dns", + "kubernetes.io/cluster-service": "true", + "kubernetes.io/name": "CoreDNS" + }, + "name": "kube-dns", + "namespace": "kube-system" + }, + "spec": { + "internalTrafficPolicy": "Cluster", + "ipFamilies": [ + "IPv4" + ], + "ipFamilyPolicy": "SingleStack", + "ports": [ + { + "name": "dns", + "port": 53, + "protocol": "UDP", + "targetPort": 53 + }, + { + "name": "dns-tcp", + "port": 53, + "protocol": "TCP", + "targetPort": 53 + }, + { + "name": "metrics", + "port": 9153, + "protocol": "TCP", + "targetPort": 9153 + } + ], + "selector": { + "k8s-app": "kube-dns" + }, + "sessionAffinity": "None", + "type": "ClusterIP" + } + }, + { + "apiVersion": "v1", + "kind": "ServiceAccount", + "metadata": { + "labels": { + "eks.amazonaws.com/component": "coredns", + "k8s-app": "kube-dns" + }, + "name": "coredns", + "namespace": "kube-system" + } + }, + { + "apiVersion": "v1", + "data": { + "Corefile": ".:53 {\n errors\n health {\n lameduck 5s\n }\n ready\n kubernetes cluster.local in-addr.arpa ip6.arpa {\n pods insecure\n fallthrough in-addr.arpa ip6.arpa\n }\n prometheus :9153\n forward . /etc/resolv.conf\n cache 30\n loop\n reload\n loadbalance\n}\n" + }, + "kind": "ConfigMap", + "metadata": { + "labels": { + "eks.amazonaws.com/component": "coredns", + "k8s-app": "kube-dns" + }, + "name": "coredns", + "namespace": "kube-system" + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "annotations": {}, + "labels": { + "eks.amazonaws.com/component": "coredns", + "k8s-app": "kube-dns", + "kubernetes.io/name": "CoreDNS" + }, + "name": "coredns", + "namespace": "kube-system" + }, + "spec": { + "progressDeadlineSeconds": 600, + "replicas": 2, + "revisionHistoryLimit": 10, + "selector": { + "matchLabels": { + "eks.amazonaws.com/component": "coredns", + "k8s-app": "kube-dns" + } + }, + "strategy": { + "rollingUpdate": { + "maxSurge": "25%", + "maxUnavailable": 1 + }, + "type": "RollingUpdate" + }, + "template": { + "metadata": { + "creationTimestamp": null, + "labels": { + "eks.amazonaws.com/component": "coredns", + "k8s-app": "kube-dns" + } + }, + "spec": { + "affinity": { + "nodeAffinity": { + "requiredDuringSchedulingIgnoredDuringExecution": { + "nodeSelectorTerms": [ + { + "matchExpressions": [ + { + "key": "kubernetes.io/os", + "operator": "In", + "values": [ + "linux" + ] + }, + { + "key": "kubernetes.io/arch", + "operator": "In", + "values": [ + "amd64", + "arm64" + ] + } + ] + } + ] + } + }, + "podAntiAffinity": { + "preferredDuringSchedulingIgnoredDuringExecution": [ + { + "podAffinityTerm": { + "labelSelector": { + "matchExpressions": [ + { + "key": "k8s-app", + "operator": "In", + "values": [ + "kube-dns" + ] + } + ] + }, + "topologyKey": "kubernetes.io/hostname" + }, + "weight": 100 + } + ] + } + }, + "containers": [ + { + "args": [ + "-conf", + "/etc/coredns/Corefile" + ], + "image": "%s.dkr.ecr.%s.%s/eks/coredns:v1.11.1-eksbuild.4", + "imagePullPolicy": "IfNotPresent", + "livenessProbe": { + "failureThreshold": 5, + "httpGet": { + "path": "/health", + "port": 8080, + "scheme": "HTTP" + }, + "initialDelaySeconds": 60, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 5 + }, + "name": "coredns", + "ports": [ + { + "containerPort": 53, + "name": "dns", + "protocol": "UDP" + }, + { + "containerPort": 53, + "name": "dns-tcp", + "protocol": "TCP" + }, + { + "containerPort": 9153, + "name": "metrics", + "protocol": "TCP" + } + ], + "readinessProbe": { + "failureThreshold": 3, + "httpGet": { + "path": "/ready", + "port": 8181, + "scheme": "HTTP" + }, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 1 + }, + "resources": { + "limits": { + "memory": "170Mi" + }, + "requests": { + "cpu": "100m", + "memory": "70Mi" + } + }, + "securityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "add": [ + "NET_BIND_SERVICE" + ], + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true + }, + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/etc/coredns", + "name": "config-volume", + "readOnly": true + } + ] + } + ], + "dnsPolicy": "Default", + "priorityClassName": "system-cluster-critical", + "restartPolicy": "Always", + "schedulerName": "default-scheduler", + "securityContext": {}, + "serviceAccount": "coredns", + "serviceAccountName": "coredns", + "terminationGracePeriodSeconds": 30, + "tolerations": [ + { + "effect": "NoSchedule", + "key": "node-role.kubernetes.io/control-plane" + }, + { + "key": "CriticalAddonsOnly", + "operator": "Exists" + } + ], + "volumes": [ + { + "configMap": { + "defaultMode": 420, + "items": [ + { + "key": "Corefile", + "path": "Corefile" + } + ], + "name": "coredns" + }, + "name": "config-volume" + } + ] + } + } + } + }, + { + "apiVersion": "rbac.authorization.k8s.io/v1", + "kind": "ClusterRole", + "metadata": { + "labels": { + "eks.amazonaws.com/component": "coredns", + "k8s-app": "kube-dns", + "kubernetes.io/bootstrapping": "rbac-defaults" + }, + "name": "system:coredns" + }, + "rules": [ + { + "apiGroups": [ + "" + ], + "resources": [ + "endpoints", + "services", + "pods", + "namespaces" + ], + "verbs": [ + "list", + "watch" + ] + }, + { + "apiGroups": [ + "" + ], + "resources": [ + "nodes" + ], + "verbs": [ + "get" + ] + }, + { + "apiGroups": [ + "discovery.k8s.io" + ], + "resources": [ + "endpointslices" + ], + "verbs": [ + "list", + "watch" + ] + } + ] + }, + { + "apiVersion": "rbac.authorization.k8s.io/v1", + "kind": "ClusterRoleBinding", + "metadata": { + "annotations": { + "rbac.authorization.kubernetes.io/autoupdate": "true" + }, + "labels": { + "eks.amazonaws.com/component": "coredns", + "k8s-app": "kube-dns", + "kubernetes.io/bootstrapping": "rbac-defaults" + }, + "name": "system:coredns" + }, + "roleRef": { + "apiGroup": "rbac.authorization.k8s.io", + "kind": "ClusterRole", + "name": "system:coredns" + }, + "subjects": [ + { + "kind": "ServiceAccount", + "name": "coredns", + "namespace": "kube-system" + } + ] + } + ], + "kind": "List" +} \ No newline at end of file diff --git a/pkg/apis/eksctl.io/v1alpha5/assets/schema.json b/pkg/apis/eksctl.io/v1alpha5/assets/schema.json index c111376dc1..694e01e6ff 100755 --- a/pkg/apis/eksctl.io/v1alpha5/assets/schema.json +++ b/pkg/apis/eksctl.io/v1alpha5/assets/schema.json @@ -715,8 +715,8 @@ }, "version": { "type": "string", - "description": "Valid variants are: `\"1.23\"`, `\"1.24\"`, `\"1.25\"`, `\"1.26\"`, `\"1.27\"` (default), `\"1.28\"`.", - "x-intellij-html-description": "Valid variants are: "1.23", "1.24", "1.25", "1.26", "1.27" (default), "1.28".", + "description": "Valid variants are: `\"1.23\"`, `\"1.24\"`, `\"1.25\"`, `\"1.26\"`, `\"1.27\"` (default), `\"1.28\"`, `\"1.29\"`.", + "x-intellij-html-description": "Valid variants are: "1.23", "1.24", "1.25", "1.26", "1.27" (default), "1.28", "1.29".", "default": "1.27", "enum": [ "1.23", @@ -724,7 +724,8 @@ "1.25", "1.26", "1.27", - "1.28" + "1.28", + "1.29" ] } }, diff --git a/pkg/apis/eksctl.io/v1alpha5/types.go b/pkg/apis/eksctl.io/v1alpha5/types.go index 59f98b8513..e3766f177e 100644 --- a/pkg/apis/eksctl.io/v1alpha5/types.go +++ b/pkg/apis/eksctl.io/v1alpha5/types.go @@ -41,10 +41,12 @@ const ( Version1_28 = "1.28" + Version1_29 = "1.29" + // DefaultVersion (default) DefaultVersion = Version1_27 - LatestVersion = Version1_28 + LatestVersion = Version1_29 DockershimDeprecationVersion = Version1_24 ) @@ -93,8 +95,8 @@ const ( // Not yet supported versions const ( - // Version1_29 represents Kubernetes version 1.29.x - Version1_29 = "1.29" + // Version1_30 represents Kubernetes version 1.30.x + Version1_30 = "1.30" ) const ( @@ -575,6 +577,7 @@ func SupportedVersions() []string { Version1_26, Version1_27, Version1_28, + Version1_29, } } diff --git a/userdocs/src/getting-started.md b/userdocs/src/getting-started.md index 8ce10a2422..8c45422716 100644 --- a/userdocs/src/getting-started.md +++ b/userdocs/src/getting-started.md @@ -109,7 +109,7 @@ To create a basic cluster, but with a different name, run: eksctl create cluster --name=cluster-1 --nodes=4 ``` -EKS supports versions `1.23`, `1.24`, `1.25`, `1.26`, `1.27` (default) and `1.28`. +EKS supports versions `1.23`, `1.24`, `1.25`, `1.26`, `1.27` (default), `1.28` and `1.29`. With `eksctl` you can deploy any of the supported versions by passing `--version`. ```sh