From c2f41356cb57b215b9400ffeab32487c2ccd443f Mon Sep 17 00:00:00 2001 From: George Stykalin Date: Sat, 9 Aug 2025 21:46:23 +0300 Subject: [PATCH] add roles support for worker nodes --- config.sample.yaml | 20 +++++----- internal/config/config.go | 6 ++- internal/kubespray/utility.go | 1 + .../templates/kubespray/inventory/hosts.tmpl | 40 ++++--------------- 4 files changed, 24 insertions(+), 43 deletions(-) diff --git a/config.sample.yaml b/config.sample.yaml index f1caa40..ff8986c 100644 --- a/config.sample.yaml +++ b/config.sample.yaml @@ -4,17 +4,17 @@ credentials: private_key_file: /Users/georgest/.ssh/id_rsa hosts: - - hostname: k8s-master-1 - ip: "172.16.1.136" - roles: [control_plane, etcd] + master: + - hostname: k8s-master-1 + ip: "172.16.1.136" + worker: + - hostname: k8s-worker-1 + ip: "172.16.1.135" + # roles: [infra] - - hostname: k8s-worker-1 - ip: "172.16.1.135" - roles: [node] - - - hostname: k8s-worker-2 - ip: "172.16.1.137" - roles: [node] + - hostname: k8s-worker-2 + ip: "172.16.1.137" + # roles: [ingress] orchestrator: version: "1.32.4" diff --git a/internal/config/config.go b/internal/config/config.go index 2c81d2b..75995a3 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -29,6 +29,7 @@ type Config struct { InventoryDir string Verbose bool KubeconfigFile string + Forks string `yaml:"forks" env-default:"10"` InstallationName string `yaml:"installation_name" env-default:"cluster.local"` Credentials struct { User string `yaml:"user"` @@ -37,7 +38,10 @@ type Config struct { PrivateKeyFile string `yaml:"private_key_file"` } `yaml:"credentials"` - Hosts []Host `yaml:"hosts"` + Hosts struct { + Masters []Host `yaml:"master"` + Workers []Host `yaml:"worker"` + } `yaml:"hosts"` Orchestrator Orchestrator `yaml:"orchestrator"` diff --git a/internal/kubespray/utility.go b/internal/kubespray/utility.go index e2eb00c..0296433 100644 --- a/internal/kubespray/utility.go +++ b/internal/kubespray/utility.go @@ -67,6 +67,7 @@ func runPlaybook(playbookPath string, tags string) { "ANSIBLE_DISPLAY_OK_HOSTS": "false", "ANSIBLE_FORCE_COLOR": "true", "ANSIBLE_HOST_KEY_CHECKING": "false", + "ANSIBLE_FORKS": config.Forks, } playbookOptions := getPlaybookParameters(tags) diff --git a/internal/resources/templates/kubespray/inventory/hosts.tmpl b/internal/resources/templates/kubespray/inventory/hosts.tmpl index 510c08d..c7c67c2 100644 --- a/internal/resources/templates/kubespray/inventory/hosts.tmpl +++ b/internal/resources/templates/kubespray/inventory/hosts.tmpl @@ -1,47 +1,23 @@ -{{- range .Hosts }} +{{- range .Hosts.Masters }} +{{ .Hostname }} ansible_host={{ .Ip }} ip={{ .Ip }} {{ if .User }}ansible_user={{ .User }}{{- end }} {{ if .Password }}ansible_ssh_password={{ .Password }}{{- end }} +{{- end }} +{{- range .Hosts.Workers }} {{ .Hostname }} ansible_host={{ .Ip }} ip={{ .Ip }} {{ if .User }}ansible_user={{ .User }}{{- end }} {{ if .Password }}ansible_ssh_password={{ .Password }}{{- end }} {{- end }} [kube_control_plane] -{{- range .Hosts }} -{{- $search := "control_plane" -}} -{{- $found := false -}} -{{- range .Roles }} -{{- if eq . $search }} -{{- $found = true }} -{{- end }} -{{- end }} -{{- if $found }} +{{- range .Hosts.Masters }} {{ .Hostname }} {{- end }} -{{- end }} [etcd] -{{- range .Hosts }} -{{- $search := "etcd" -}} -{{- $found := false -}} -{{- range .Roles }} -{{- if eq . $search }} -{{- $found = true }} -{{- end }} -{{- end }} -{{- if $found }} +{{- range .Hosts.Masters }} {{ .Hostname }} {{- end }} -{{- end }} [kube_node] -{{- range .Hosts }} -{{- $search := "node" -}} -{{- $found := false -}} -{{- range .Roles }} -{{- if eq . $search }} -{{- $found = true }} -{{- end }} -{{- end }} -{{- if $found }} -{{ .Hostname }} -{{- end }} +{{- range .Hosts.Workers }} +{{ .Hostname }}{{- if .Roles }} node_taints='[{{- range $i, $role := .Roles }}{{- if $i }},{{- end }}"node-role.kubernetes.io/{{ $role }}:NoSchedule"{{- end }}]' node_labels="{ {{- range $i, $role := .Roles }}{{- if $i }},{{- end }}'node-role.kubernetes.io/{{ $role }}': ''{{- end }} }"{{- end }} {{- end }} [all:vars]