diff --git a/inventory/sample/group_vars/k8s_cluster/k8s-cluster.yml b/inventory/sample/group_vars/k8s_cluster/k8s-cluster.yml index 22ff3172b..cb9fa2438 100644 --- a/inventory/sample/group_vars/k8s_cluster/k8s-cluster.yml +++ b/inventory/sample/group_vars/k8s_cluster/k8s-cluster.yml @@ -346,7 +346,7 @@ event_ttl_duration: "1h0m0s" ## Automatically renew K8S control plane certificates on first Monday of each month auto_renew_certificates: false # First Monday of each month -# auto_renew_certificates_systemd_calendar: "Mon *-*-1,2,3,4,5,6,7 03:{{ groups['kube_control_plane'].index(inventory_hostname) }}0:00" +# auto_renew_certificates_systemd_calendar: "Mon *-*-1,2,3,4,5,6,7 03:00:00" kubeadm_patches_dir: "{{ kube_config_dir }}/patches" kubeadm_patches: [] diff --git a/roles/kubernetes/control-plane/templates/k8s-certs-renew.sh.j2 b/roles/kubernetes/control-plane/templates/k8s-certs-renew.sh.j2 index b2c7c770f..01408689b 100644 --- a/roles/kubernetes/control-plane/templates/k8s-certs-renew.sh.j2 +++ b/roles/kubernetes/control-plane/templates/k8s-certs-renew.sh.j2 @@ -1,8 +1,26 @@ #!/bin/bash -echo "## Expiration before renewal ##" +echo "## Check Expiration before renewal ##" + {{ bin_dir }}/kubeadm certs check-expiration +days_buffer=7 # set a time margin, because we should not renew at the last moment +calendar={{ auto_renew_certificates_systemd_calendar }} +next_time=$(systemctl show k8s-certs-renew.timer -p NextElapseUSecRealtime --value) + +if [ "${next_time}" == "" ]; then + echo "## Skip expiry comparison due to fail to parse next elapse from systemd calendar,do renewal directly ##" +else + current_time=$(date +%s) + target_time=$(date -d "${next_time} + ${days_buffer} days" +%s) # $next_time - $days_buffer days + expiry_threshold=$(( ${target_time} - ${current_time} )) + expired_certs=$({{ bin_dir }}/kubeadm certs check-expiration -o jsonpath="{.certificates[?(@.residualTime<${expiry_threshold}.0)]}") + if [ "${expired_certs}" == "" ];then + echo "## Skip cert renew and K8S container restart, since all residualTimes are beyond threshold ##" + exit 0 + fi +fi + echo "## Renewing certificates managed by kubeadm ##" {{ bin_dir }}/kubeadm certs renew all