From ecaf682c1d29df28a3000c6fce90e8fb67f2d240 Mon Sep 17 00:00:00 2001
From: Tibi <110664232+TiberiuGC@users.noreply.github.com>
Date: Thu, 26 Sep 2024 18:52:08 +0300
Subject: [PATCH] add support for eks 1.31
---
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.31.json | 379 ++++++++++++++++++
.../eksctl.io/v1alpha5/assets/schema.json | 7 +-
pkg/apis/eksctl.io/v1alpha5/defaults_test.go | 1 +
pkg/apis/eksctl.io/v1alpha5/types.go | 9 +-
userdocs/src/getting-started.md | 2 +-
8 files changed, 396 insertions(+), 10 deletions(-)
create mode 100644 pkg/addons/default/assets/coredns-1.31.json
diff --git a/pkg/actions/cluster/upgrade.go b/pkg/actions/cluster/upgrade.go
index 20293fa384..8a2fb6d2c3 100644
--- a/pkg/actions/cluster/upgrade.go
+++ b/pkg/actions/cluster/upgrade.go
@@ -132,6 +132,8 @@ func getNextVersion(currentVersion string) (string, error) {
return api.Version1_30, nil
case api.Version1_30:
return api.Version1_31, nil
+ case api.Version1_31:
+ return api.Version1_32, 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 cc998cc957..50cac69a2e 100644
--- a/pkg/actions/cluster/upgrade_test.go
+++ b/pkg/actions/cluster/upgrade_test.go
@@ -86,9 +86,9 @@ var _ = Describe("upgrade cluster", func() {
}),
Entry("fails when the version is still not supported", upgradeCase{
- givenVersion: "1.31",
+ givenVersion: "1.32",
eksVersion: api.LatestVersion,
- expectedErrorText: "control plane version \"1.31\" is not known to this version of eksctl",
+ expectedErrorText: "control plane version \"1.32\" 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 6d93868fe0..f8672102b1 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.30-20201212",
+ "ReleaseVersion": "1.31-20201212",
"ScalingConfig": {
"DesiredSize": 4,
"MaxSize": 4,
diff --git a/pkg/addons/default/assets/coredns-1.31.json b/pkg/addons/default/assets/coredns-1.31.json
new file mode 100644
index 0000000000..42753c02bd
--- /dev/null
+++ b/pkg/addons/default/assets/coredns-1.31.json
@@ -0,0 +1,379 @@
+{
+ "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.3-eksbuild.1",
+ "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"
+ }
+ ],
+ "topologySpreadConstraints": [
+ {
+ "labelSelector": {
+ "matchLabels": {
+ "k8s-app": "kube-dns"
+ }
+ },
+ "maxSkew": 1,
+ "topologyKey": "topology.kubernetes.io/zone",
+ "whenUnsatisfiable": "ScheduleAnyway"
+ }
+ ],
+ "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"
+}
diff --git a/pkg/apis/eksctl.io/v1alpha5/assets/schema.json b/pkg/apis/eksctl.io/v1alpha5/assets/schema.json
index aadb45df49..28502cc46b 100755
--- a/pkg/apis/eksctl.io/v1alpha5/assets/schema.json
+++ b/pkg/apis/eksctl.io/v1alpha5/assets/schema.json
@@ -776,8 +776,8 @@
},
"version": {
"type": "string",
- "description": "Valid variants are: `\"1.23\"`, `\"1.24\"`, `\"1.25\"`, `\"1.26\"`, `\"1.27\"`, `\"1.28\"`, `\"1.29\"`, `\"1.30\"` (default).",
- "x-intellij-html-description": "Valid variants are: "1.23"
, "1.24"
, "1.25"
, "1.26"
, "1.27"
, "1.28"
, "1.29"
, "1.30"
(default).",
+ "description": "Valid variants are: `\"1.23\"`, `\"1.24\"`, `\"1.25\"`, `\"1.26\"`, `\"1.27\"`, `\"1.28\"`, `\"1.29\"`, `\"1.30\"` (default), `\"1.31\"`.",
+ "x-intellij-html-description": "Valid variants are: "1.23"
, "1.24"
, "1.25"
, "1.26"
, "1.27"
, "1.28"
, "1.29"
, "1.30"
(default), "1.31"
.",
"default": "1.30",
"enum": [
"1.23",
@@ -787,7 +787,8 @@
"1.27",
"1.28",
"1.29",
- "1.30"
+ "1.30",
+ "1.31"
]
}
},
diff --git a/pkg/apis/eksctl.io/v1alpha5/defaults_test.go b/pkg/apis/eksctl.io/v1alpha5/defaults_test.go
index a0d470275e..e47147e0dc 100644
--- a/pkg/apis/eksctl.io/v1alpha5/defaults_test.go
+++ b/pkg/apis/eksctl.io/v1alpha5/defaults_test.go
@@ -392,6 +392,7 @@ var _ = Describe("ClusterConfig validation", func() {
}, false)
Expect(mng.AMIFamily).To(Equal(expectedAMIFamily))
},
+ Entry("EKS 1.31 uses AL2023", "1.31", NodeImageFamilyAmazonLinux2023),
Entry("EKS 1.30 uses AL2023", "1.30", NodeImageFamilyAmazonLinux2023),
Entry("EKS 1.29 uses AL2", "1.29", NodeImageFamilyAmazonLinux2),
Entry("EKS 1.28 uses AL2", "1.28", NodeImageFamilyAmazonLinux2),
diff --git a/pkg/apis/eksctl.io/v1alpha5/types.go b/pkg/apis/eksctl.io/v1alpha5/types.go
index 9ce8888cc1..0fdbd00fb3 100644
--- a/pkg/apis/eksctl.io/v1alpha5/types.go
+++ b/pkg/apis/eksctl.io/v1alpha5/types.go
@@ -45,10 +45,12 @@ const (
Version1_30 = "1.30"
+ Version1_31 = "1.31"
+
// DefaultVersion (default)
DefaultVersion = Version1_30
- LatestVersion = Version1_30
+ LatestVersion = Version1_31
DockershimDeprecationVersion = Version1_24
)
@@ -97,8 +99,8 @@ const (
// Not yet supported versions
const (
- // Version1_31 represents Kubernetes version 1.31.x
- Version1_31 = "1.31"
+ // Version1_32 represents Kubernetes version 1.32.x
+ Version1_32 = "1.32"
)
const (
@@ -584,6 +586,7 @@ func SupportedVersions() []string {
Version1_28,
Version1_29,
Version1_30,
+ Version1_31,
}
}
diff --git a/userdocs/src/getting-started.md b/userdocs/src/getting-started.md
index 21b4c2cb7c..5bd302c39c 100644
--- a/userdocs/src/getting-started.md
+++ b/userdocs/src/getting-started.md
@@ -124,7 +124,7 @@ eksctl create cluster --name=cluster-1 --nodes=4
### Supported versions
-EKS supports versions `1.23` (extended), `1.24` (extended), `1.25`, `1.26`, `1.27`, `1.28`, `1.29` and **`1.30`** (default).
+EKS supports versions `1.23` (extended), `1.24` (extended), `1.25`, `1.26`, `1.27`, `1.28`, `1.29`, **`1.30`** (default) and `1.31`.
With `eksctl` you can deploy any of the supported versions by passing `--version`.
```sh