mirror of
https://github.com/kubesphere/kubekey.git
synced 2025-12-26 01:22:51 +00:00
138 lines
4.8 KiB
YAML
138 lines
4.8 KiB
YAML
---
|
|
- hosts:
|
|
- all
|
|
roles:
|
|
- native/root
|
|
- import_playbook: hook/pre_install.yaml
|
|
|
|
# Load default variables and perform prechecks on all hosts
|
|
- hosts:
|
|
- all
|
|
gather_facts: true
|
|
roles:
|
|
- defaults
|
|
- precheck
|
|
|
|
# Download all required software and generate certificates on the localhost
|
|
- hosts:
|
|
- localhost
|
|
gather_facts: true
|
|
roles:
|
|
- certs/init
|
|
- download
|
|
- certs/check
|
|
|
|
# Initialize all nodes and install necessary software packages
|
|
- hosts:
|
|
- etcd
|
|
- k8s_cluster
|
|
- image_registry
|
|
- nfs
|
|
roles:
|
|
- native
|
|
|
|
# Install the etcd cluster
|
|
- hosts:
|
|
- etcd
|
|
gather_facts: true
|
|
roles:
|
|
- role: etcd
|
|
when:
|
|
- .etcd.deployment_type | eq "external"
|
|
|
|
- hosts:
|
|
- kube_control_plane
|
|
tasks:
|
|
- name: AddNodes | Check if should update apiserver certificates
|
|
run_once: true
|
|
add_hostvars:
|
|
hosts: kube_control_plane
|
|
vars:
|
|
need_installed_etcd: >-
|
|
{{- $needInstalled := list -}}
|
|
{{- range .groups.etcd -}}
|
|
{{- if and ((index $.hostvars . "etcd_install_LoadState" "stdout") | eq "not-found") ($.delete_nodes | default list | has . | not) -}}
|
|
{{- $needInstalled = append $needInstalled . -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{ $needInstalled | toJson }}
|
|
- name: AddNodes | Update apiserver etcd certificates
|
|
when:
|
|
- .need_installed_etcd | fromJson | empty | not
|
|
- .etcd.deployment_type | eq "external"
|
|
block:
|
|
- name: AddNodes | Copy etcd CA certificate to control plane node
|
|
copy:
|
|
src: >-
|
|
{{ .etcd.ca_file }}
|
|
dest: /etc/kubernetes/pki/etcd/ca.crt
|
|
- name: AddNodes | Copy etcd client certificate to control plane node
|
|
copy:
|
|
src: >-
|
|
{{ .etcd.cert_file }}
|
|
dest: /etc/kubernetes/pki/etcd/client.crt
|
|
- name: AddNodes | Copy etcd client key to control plane node
|
|
copy:
|
|
src: >-
|
|
{{ .etcd.key_file }}
|
|
dest: /etc/kubernetes/pki/etcd/client.key
|
|
- name: AddNodes | update ks-apiserver
|
|
command: |
|
|
{{- $endpoints := list -}}
|
|
{{- range .groups.etcd | default list -}}
|
|
{{- $endpoints = append $endpoints (printf "https://%s:2379" (index $.hostvars . "internal_ipv4")) -}}
|
|
{{- end -}}
|
|
ETCD_ENDPOINTS="{{ join "," $endpoints }}"
|
|
|
|
if ! grep -q 'ClusterConfiguration' /etc/kubernetes/kubeadm-config.yaml 2>/dev/null; then
|
|
kubectl get cm kubeadm-config -n kube-system -o=jsonpath='{.data.ClusterConfiguration}' > /etc/kubernetes/kubeadm-config.yaml
|
|
fi
|
|
|
|
awk -v ep="$ETCD_ENDPOINTS" '
|
|
BEGIN {
|
|
n = split(ep, arr, ",")
|
|
for (i = 1; i <= n; i++) {
|
|
print " - " arr[i]
|
|
}
|
|
}
|
|
' > /etc/kubernetes/kubeadm_new_endpoints.yaml
|
|
# delete old endpoint
|
|
sed -i '/^[[:space:]]*endpoints:/{
|
|
:loop
|
|
N
|
|
s/\n[[:space:]]\+-.*//; t loop
|
|
s/\n[[:space:]]*\n/\n/g
|
|
P
|
|
D
|
|
}' /etc/kubernetes/kubeadm-config.yaml
|
|
# insert new endpoint
|
|
sed -i "/^[[:space:]]*endpoints:/r /etc/kubernetes/kubeadm_new_endpoints.yaml" /etc/kubernetes/kubeadm-config.yaml
|
|
rm /etc/kubernetes/kubeadm_new_endpoints.yaml
|
|
# update kubeadm-config
|
|
{{- if .kubernetes.kube_version | semverCompare "<v1.27.0" }}
|
|
kubeadm config upload from-file --config /etc/kubernetes/kubeadm-config.yaml
|
|
{{- else }}
|
|
kubeadm init phase upload-config kubeadm --config /etc/kubernetes/kubeadm-config.yaml
|
|
{{- end }}
|
|
# regenerate kube-apiserver
|
|
kubeadm init phase control-plane apiserver --config /etc/kubernetes/kubeadm-config.yaml
|
|
|
|
- hosts:
|
|
- k8s_cluster
|
|
roles:
|
|
- role: cri
|
|
when: or (.add_nodes | default list | empty) (.add_nodes | default list | has .inventory_hostname)
|
|
- role: kubernetes/pre-kubernetes
|
|
when: or (.add_nodes | default list | empty) (.add_nodes | default list | has .inventory_hostname)
|
|
- role: kubernetes/init-kubernetes
|
|
when: or (.add_nodes | default list | empty) (.add_nodes | default list | has .inventory_hostname)
|
|
- role: kubernetes/join-kubernetes
|
|
when:
|
|
- or (.add_nodes | default list | empty) (.add_nodes | default list | has .inventory_hostname)
|
|
- .kubernetes_install_LoadState.stdout | eq "not-found"
|
|
- role: kubernetes/certs
|
|
when:
|
|
- or (.add_nodes | default list | empty) (.add_nodes | default list | has .inventory_hostname)
|
|
- .groups.kube_control_plane | default list | has .inventory_hostname
|
|
- .kubernetes.certs.renew
|