feat!: for a single master node do not use etcd and add option to not use kube-vip

Signed-off-by: Devin Buhl <devin@buhl.casa>
This commit is contained in:
Devin Buhl committed 2023-12-29 19:21:26 -05:00
1 parent 5d4b0f52c3
commit ec8c19a24e
5 files changed
+63 -11

No files matched your search

+6
View File
@@ -17,6 +17,12 @@
ansible.builtin.set_fact: ansible.builtin.set_fact:
repository_path: "{{ repository.stdout }}" repository_path: "{{ repository.stdout }}"
- name: Override kube-vip address when there is a single master node and no address is defined
when: bootstrap_nodes.master | length == 1 and not bootstrap_kube_vip_addr
ansible.builtin.set_fact:
bootstrap_kube_vip_enabled: false
bootstrap_kube_vip_addr: "{{ bootstrap_nodes.master[0].address }}"
- name: Verify configuration - name: Verify configuration
ansible.builtin.include_tasks: tasks/validation/main.yaml ansible.builtin.include_tasks: tasks/validation/main.yaml
+41 -1
View File
@@ -1,6 +1,6 @@
--- ---
- name: Set reachable address - name: Set reachable address
set_fact: ansible.builtin.set_fact:
current_address: "{{ item.external_address | default(item.address) }}" current_address: "{{ item.external_address | default(item.address) }}"
loop: "{{ bootstrap_nodes.master + bootstrap_nodes.worker | default([]) }}" loop: "{{ bootstrap_nodes.master + bootstrap_nodes.worker | default([]) }}"
loop_control: loop_control:
@@ -122,7 +122,19 @@
success_msg: All IP addresses are unique. success_msg: All IP addresses are unique.
fail_msg: All IP addresses are not unique. fail_msg: All IP addresses are not unique.
- name: Verify nodes are not the same IPs as k8s_gateway or ingress external/internal
when: not bootstrap_kube_vip_enabled | default(true)
ansible.builtin.assert:
that: item.address not in (bootstrap_k8s_gateway_addr, bootstrap_external_ingress_addr, bootstrap_internal_ingress_addr)
success_msg: Node address {{ item.address }} is different than k8s_gateway or ingress-nginx.
fail_msg: Node address {{ item.address }} is not different than k8s_gateway or ingress-nginx.
quiet: true
loop: "{{ bootstrap_nodes.master + bootstrap_nodes.worker | default([]) }}"
loop_control:
label: "{{ item.address }}"
- name: Verify nodes are not the same IPs as k8s_gateway, ingress external/internal or kube-vip - name: Verify nodes are not the same IPs as k8s_gateway, ingress external/internal or kube-vip
when: bootstrap_kube_vip_enabled | default(true)
ansible.builtin.assert: ansible.builtin.assert:
that: item.address not in (bootstrap_k8s_gateway_addr, bootstrap_external_ingress_addr, bootstrap_internal_ingress_addr, bootstrap_kube_vip_addr) that: item.address not in (bootstrap_k8s_gateway_addr, bootstrap_external_ingress_addr, bootstrap_internal_ingress_addr, bootstrap_kube_vip_addr)
success_msg: Node address {{ item.address }} is different than k8s_gateway, ingress-nginx or kube-vip. success_msg: Node address {{ item.address }} is different than k8s_gateway, ingress-nginx or kube-vip.
@@ -153,6 +165,34 @@
loop_control: loop_control:
label: "{{ item.address }}" label: "{{ item.address }}"
- name: Verify node IP addresses are unique
ansible.builtin.assert:
that: >
(
(bootstrap_nodes.master + bootstrap_nodes.worker | default([])) | map(attribute='address') | list
) | unique | length
==
(
(bootstrap_nodes.master + bootstrap_nodes.worker | default([])) | map(attribute='address') | list
) | length
success_msg: All node IP addresses are unique.
fail_msg: All node IP addresses are not unique.
quiet: true
- name: Verify node names are unique
ansible.builtin.assert:
that: >
(
(bootstrap_nodes.master + bootstrap_nodes.worker | default([])) | map(attribute='name') | list
) | unique | length
==
(
(bootstrap_nodes.master + bootstrap_nodes.worker | default([])) | map(attribute='name') | list
) | length
success_msg: All node names are unique.
fail_msg: All node names are not unique.
quiet: true
- name: Verify SSH port is reachable - name: Verify SSH port is reachable
ansible.builtin.wait_for: ansible.builtin.wait_for:
host: "{{ current_address }}" host: "{{ current_address }}"
@@ -61,7 +61,7 @@ data:
regex: (apiserver_response_sizes_bucket|apiserver_watch_events_sizes_bucket) regex: (apiserver_response_sizes_bucket|apiserver_watch_events_sizes_bucket)
kubeControllerManager: kubeControllerManager:
enabled: true enabled: true
endpoints: endpoints: &endpoints
{% for item in bootstrap_nodes.master %} {% for item in bootstrap_nodes.master %}
- {{ item.address }} - {{ item.address }}
{% endfor %} {% endfor %}
@@ -72,17 +72,15 @@ data:
sourceLabels: ["__name__"] sourceLabels: ["__name__"]
regex: "(apiserver_audit|apiserver_client|apiserver_delegated|apiserver_envelope|apiserver_storage|apiserver_webhooks|attachdetach_controller|authenticated_user|authentication|cronjob_controller|disabled_metric|endpoint_slice|ephemeral_volume|garbagecollector_controller|get_token|go|hidden_metric|job_controller|kubernetes_build|kubernetes_feature|leader_election|node_collector|node_ipam|process_cpu|process_max|process_open|process_resident|process_start|process_virtual|pv_collector|registered_metric|replicaset_controller|rest_client|retroactive_storageclass|root_ca|running_managed|scrape_duration|scrape_samples|scrape_series|service_controller|storage_count|storage_operation|ttl_after|volume_operation|workqueue)_(.+)" regex: "(apiserver_audit|apiserver_client|apiserver_delegated|apiserver_envelope|apiserver_storage|apiserver_webhooks|attachdetach_controller|authenticated_user|authentication|cronjob_controller|disabled_metric|endpoint_slice|ephemeral_volume|garbagecollector_controller|get_token|go|hidden_metric|job_controller|kubernetes_build|kubernetes_feature|leader_election|node_collector|node_ipam|process_cpu|process_max|process_open|process_resident|process_start|process_virtual|pv_collector|registered_metric|replicaset_controller|rest_client|retroactive_storageclass|root_ca|running_managed|scrape_duration|scrape_samples|scrape_series|service_controller|storage_count|storage_operation|ttl_after|volume_operation|workqueue)_(.+)"
kubeEtcd: kubeEtcd:
{% if bootstrap_nodes.master | length > 1 %}
enabled: true enabled: true
endpoints: {% else %}
{% for item in bootstrap_nodes.master %} enabled: false
- {{ item.address }} {% endif %}
{% endfor %} endpoints: *endpoints
kubeScheduler: kubeScheduler:
enabled: true enabled: true
endpoints: endpoints: *endpoints
{% for item in bootstrap_nodes.master %}
- {{ item.address }}
{% endfor %}
serviceMonitor: serviceMonitor:
metricRelabelings: metricRelabelings:
# Remove duplicate labels provided by k3s # Remove duplicate labels provided by k3s
@@ -9,13 +9,18 @@
k3s_release_version: "v1.29.0+k3s1" k3s_release_version: "v1.29.0+k3s1"
k3s_install_hard_links: true k3s_install_hard_links: true
k3s_become: true k3s_become: true
{% if bootstrap_nodes.master | length > 1 %}
k3s_etcd_datastore: true k3s_etcd_datastore: true
k3s_use_unsupported_config: true {% else %}
k3s_etcd_datastore: false
{% endif %}
k3s_registration_address: "{% raw %}{{ kube_vip_addr }}{% endraw %}" k3s_registration_address: "{% raw %}{{ kube_vip_addr }}{% endraw %}"
k3s_server_manifests_urls: k3s_server_manifests_urls:
{% if bootstrap_kube_vip_enabled | default(true) %}
# Kube-vip RBAC # Kube-vip RBAC
- url: https://raw.githubusercontent.com/kube-vip/kube-vip/main/docs/manifests/rbac.yaml - url: https://raw.githubusercontent.com/kube-vip/kube-vip/main/docs/manifests/rbac.yaml
filename: kube-vip-rbac.yaml filename: kube-vip-rbac.yaml
{% endif %}
# Essential Prometheus Operator CRDs (the rest are installed with the kube-prometheus-stack helm release) # Essential Prometheus Operator CRDs (the rest are installed with the kube-prometheus-stack helm release)
- url: https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.70.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml - url: https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.70.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml
filename: custom-prometheus-podmonitors.yaml filename: custom-prometheus-podmonitors.yaml
@@ -32,6 +37,8 @@ k3s_server_manifests_templates:
- custom-cilium-l2.yaml.j2 - custom-cilium-l2.yaml.j2
{% endif %} {% endif %}
- custom-coredns-helmchart.yaml.j2 - custom-coredns-helmchart.yaml.j2
{% if bootstrap_kube_vip_enabled | default(true) %}
# /var/lib/rancher/k3s/agent/pod-manifests # /var/lib/rancher/k3s/agent/pod-manifests
k3s_server_pod_manifests_templates: k3s_server_pod_manifests_templates:
- kube-vip-static-pod.yaml.j2 - kube-vip-static-pod.yaml.j2
{% endif %}
+1
View File
@@ -39,6 +39,7 @@ bootstrap_cloudflare_tunnel_id:
# CIDR your nodes are on (e.g. 192.168.1.0/24) # CIDR your nodes are on (e.g. 192.168.1.0/24)
bootstrap_node_cidr: bootstrap_node_cidr:
# The IP address to use with kube-vip, choose an available IP in your nodes network that is not being used # The IP address to use with kube-vip, choose an available IP in your nodes network that is not being used
# (Optional) Leave this blank if you are deploying a single master node, this will disable kube-vip and use the master node IP instead
bootstrap_kube_vip_addr: bootstrap_kube_vip_addr:
# The Load balancer IP for k8s_gateway, choose an available IP in your nodes network that is not being used # The Load balancer IP for k8s_gateway, choose an available IP in your nodes network that is not being used
bootstrap_k8s_gateway_addr: bootstrap_k8s_gateway_addr: