Add support for Kubernetes 1.24.4

This adds support for Kubernetes 1.24.4 version. This creates symlinks
to previously defined Docker image versions. This yields the same
versions used for 1.23.1.

This makes the following configuration changes to support 1.24.4:
- removed KubeletConfig feature-gates: HugePageStorageMediumSize: true;
  this option was defaulted to true since 1.19, and unconditionally
  true since 1.22
- removed kube-apiserver feature-gates RemoveSelfLink=false;
  this option was deprecated in 1.21 and is now removed
  * NOTE: this breaks RBD-provisioner / PVC (Persistent-Volume-Claims)
    using 'storageClassName: general' since it depends on selfLink;
    this only breaks the existing PVC for version 1.24, the previous
    versions will still have RemoveSelfLink=false and will still work.
- removed kubelet option --cni-bin-dir argument since it is only
  applicable to dockershim (which we don't use)
- NOTE: we have reverted upstream changes in kubeadm for
  'node-role.kubernetes.io/master' to
  'node-role.kubernetes.io/control-plane.
  When we adopt this upstream change, we need to make associated changes
  for node Taint, and pod nodeSelector/Tolerations spanning all repos.
- removed kube-apiserver feature-gates TTLAfterFinished;
  this option has defaulted to "true" since K8s 1.21
- made feature-gates config k8s-version dependent;
  apiserver feature-gates has different setting in 1.24;
  there is still work in RBD to remove selfLink, hence PVC is
  broken in 1.24 until new rbd/ceph app is brought in
- increased wait for controller-0 online state to 150 sec from 50 sec,
  since this step was approximately 55 seconds on QEMU system
- moved the definition of kubernetes_long_version to prepare-env
  and removed duplicated definitions

Test Plan: Debian
PASS: Fresh install ISO with 1.24.4 up to common/push-docker-images
      with successful download/push of k8s.gcr.io/kube-*:v1.24.4.
PASS: Fresh install ISO with 1.23 verify apiserver settings
PASS: Fresh install ISO with 1.23 with custom apiserver settings
PASS: Fresh install ISO with no kubernetes_version override
PASS: AIO-SX Backup and Restore no kubernetes_version override
PASS: AIO-SX Remote replay no kubernetes_version override

Story: 2010301
Task: 46313

Depends-On: https://review.opendev.org/c/starlingx/integ/+/857975
Depends-On: https://review.opendev.org/c/starlingx/integ/+/860206
Depends-On: https://review.opendev.org/c/starlingx/stx-puppet/+/861192

Signed-off-by: Jim Gauld <james.gauld@windriver.com>
Change-Id: Ic925a6178f94a4d6ebd8b285823dd3ad40c8a3c7
This commit is contained in:
Jim Gauld
2022-09-21 18:37:24 -04:00
parent 514858c870
commit f730bfd2f8
15 changed files with 64 additions and 39 deletions

View File

@@ -135,7 +135,8 @@
- name: Check controller-0 is in online state
shell: source /etc/platform/openrc; system host-show controller-0 --column availability --format value
register: check_online
retries: 10
retries: 15
delay: 10
until: check_online.stdout == "online"
- name: Set async parameters

View File

@@ -6,7 +6,7 @@
# to allow room for platform pods. The user apps are in fact
# intended to run after the unlock anyway. During the unlock the correct
# value is used, the one generated by sysinv as hieradata.
KUBELET_EXTRA_ARGS=--cni-bin-dir={{ kubelet_cni_bin_dir }} \
KUBELET_EXTRA_ARGS=\
--node-ip={{ node_ip }} \
--volume-plugin-dir={{ kubelet_vol_plugin_dir }} \
--pod-max-pids 500

View File

@@ -253,10 +253,47 @@
etcd_root_ca_cert: "{{ etcd_root_ca_cert | default('') }}"
etcd_root_ca_key: "{{ etcd_root_ca_key | default('') }}"
# Set the kubernetes_version if the user hasn't overridden it
- name: Check if kubernetes_version is specified
set_fact:
found_kubernetes_version: "{{ kubernetes_version is defined }}"
- block:
- name: Set kubernetes_version for fresh installs.
set_fact:
kubernetes_version: "{{ fresh_install_k8s_version }}"
when: migrate_platform_data is undefined or not migrate_platform_data
- name: Set kubernetes_version for upgrades.
set_fact:
kubernetes_version: "{{ upgrade_k8s_version }}"
when: migrate_platform_data is defined and migrate_platform_data
- name: Set kubernetes_version for restores.
set_fact:
kubernetes_version: "{{ restore_k8s_version }}"
when: restore_k8s_version is defined
when: not found_kubernetes_version
- block:
- name: Set kubernetes long version
set_fact:
kubernetes_long_version: "{{ kubernetes_version if kubernetes_version.startswith('v')
else 'v' + kubernetes_version }}"
- name: Read in kubernetes versioned configuration parameters
include_vars:
dir: "vars/k8s-{{ kubernetes_long_version }}"
extensions: ['yml']
when: kubernetes_version is defined
- name: Combine k8s user overrides and default config parameters
set_fact:
apiserver_extra_args: "{{ apiserver_extra_args_defaults \
| combine(apiserver_extra_args|default({})) }}"
| combine({ 'feature-gates': apiserver_feature_gates|default(omit) }, \
apiserver_extra_args|default({})) }}"
controllermanager_extra_args: "{{ controllermanager_extra_args_defaults \
| combine(controllermanager_extra_args|default({})) }}"
scheduler_extra_args: "{{ scheduler_extra_args_defaults \

View File

@@ -0,0 +1,2 @@
---
apiserver_feature_gates: RemoveSelfLink=false

View File

@@ -0,0 +1,2 @@
---
apiserver_feature_gates: RemoveSelfLink=false

View File

@@ -0,0 +1,2 @@
---
apiserver_feature_gates: RemoveSelfLink=false

View File

@@ -0,0 +1,2 @@
---
# no customizations for this k8s version

View File

@@ -27,7 +27,6 @@ apiserver_extra_args_defaults:
encryption-provider-config: "{{ encryption_provider_config }}"
default-not-ready-toleration-seconds: "30"
default-unreachable-toleration-seconds: "30"
feature-gates: "TTLAfterFinished=true,RemoveSelfLink=false"
event-ttl: "24h"
audit-log-path: "/var/log/kubernetes/audit/audit.log"
audit-log-maxage: "3"
@@ -38,7 +37,6 @@ controllermanager_extra_args_defaults:
node-monitor-period: "2s"
node-monitor-grace-period: "20s"
pod-eviction-timeout: '30s'
feature-gates: "TTLAfterFinished=true"
flex-volume-plugin-dir: "{{ kubelet_vol_plugin_dir }}"
scheduler_extra_args_defaults: { }
@@ -49,8 +47,6 @@ kubelet_extra_args_defaults:
kubelet_configurations_defaults:
nodeStatusUpdateFrequency: "4s"
failSwapOn: false
featureGates:
HugePageStorageMediumSize: true
cgroupDriver: "cgroupfs"
cgroupRoot: "{{ kubelet_cgroup_root }}"
imageGCHighThresholdPercent: 79

View File

@@ -825,29 +825,6 @@
apiserver_oidc.username_claim is defined and
apiserver_oidc.groups_claim is defined))
# Set the kubernetes_version if the user hasn't overridden it
- name: Check if kubernetes_version is specified
set_fact:
found_kubernetes_version: "{{ kubernetes_version is defined }}"
- block:
- name: Set kubernetes_version for fresh installs.
set_fact:
kubernetes_version: "{{ fresh_install_k8s_version }}"
when: migrate_platform_data is undefined or not migrate_platform_data
- name: Set kubernetes_version for upgrades.
set_fact:
kubernetes_version: "{{ upgrade_k8s_version }}"
when: migrate_platform_data is defined and migrate_platform_data
- name: Set kubernetes_version for restores.
set_fact:
kubernetes_version: "{{ restore_k8s_version }}"
when: restore_k8s_version is defined
when: not found_kubernetes_version
- name: Check overridden kubernetes_version matches the backup.
fail:
msg: >

View File

@@ -8,10 +8,13 @@
# This role loads variables containing images.
#
- name: Set kubernetes long version
set_fact:
kubernetes_long_version: "{{ kubernetes_version if kubernetes_version.startswith('v')
else 'v' + kubernetes_version }}"
- name: Fail if kubernetes_version is not defined
fail: msg="The mandatory parameter kubernetes_version is not defined."
when: kubernetes_version is not defined
- name: Fail if kubernetes_long_version is not defined
fail: msg="The mandatory parameter kubernetes_long_version is not defined."
when: kubernetes_long_version is not defined
- block:
- name: Get the list of kubernetes images

View File

@@ -0,0 +1 @@
k8s-v1.22.5

View File

@@ -11,11 +11,6 @@
when: mode is defined
- name: Set kubernetes long version
set_fact:
kubernetes_long_version: "{{ kubernetes_version if kubernetes_version.startswith('v')
else 'v' + kubernetes_version }}"
- name: Initialize variables
set_fact:
overrides_file: "/tmp/upgrade_overrides.yaml"
@@ -25,6 +20,10 @@
fail: msg="The mandatory parameter kubernetes_version is not defined."
when: kubernetes_version is not defined
- name: Fail if kubernetes_long_version is not defined
fail: msg="The mandatory parameter kubernetes_long_version is not defined."
when: kubernetes_long_version is not defined
- name: Create the upgrade overrides file
command: "/usr/bin/sysinv-utils create-host-overrides {{ overrides_file }}"