Files
home-cluster/bootstrap/templates/kubernetes/talos/talconfig.yaml.j2
T
Devin Buhl b89b7b3ed9 feat: migrate to python for data validation (#1214)
* feat: migrate to python for data validation

Signed-off-by: Devin Buhl <devin@buhl.casa>

* fix: address PR comments

Signed-off-by: Devin Buhl <devin@buhl.casa>

* fix: add unused kwargs to validate functions

Signed-off-by: Devin Buhl <devin@buhl.casa>

* chore: update renovate pip and ansible regex

Signed-off-by: Devin Buhl <devin@buhl.casa>

* feat: add bootstrap_nodes test

Signed-off-by: Devin Buhl <devin@buhl.casa>

* fix: update taskfiles

Signed-off-by: Devin Buhl <devin@buhl.casa>

---------

Signed-off-by: Devin Buhl <devin@buhl.casa>
2024-01-21 08:35:21 -05:00

193 lines
4.9 KiB
YAML

#% if bootstrap_distribution == 'talos' %#
# yaml-language-server: $schema=https://raw.githubusercontent.com/budimanjojo/talhelper/master/pkg/config/schemas/talconfig.json
---
# renovate: datasource=github-releases depName=siderolabs/talos
talosVersion: v1.6.1
# renovate: datasource=github-releases depName=kubernetes/kubernetes extractVersion=^v(?<version>.*)$
kubernetesVersion: 1.29.1
clusterName: &cluster home-kubernetes
#% if bootstrap_kube_api_hostname|default('') %#
endpoint: https://#{ bootstrap_kube_api_hostname }#:6443
#% else %#
endpoint: https://#{ bootstrap_kube_api_addr }#:6443
#% endif %#
clusterPodNets:
- "#{ bootstrap_cluster_cidr.split(',')[0] }#"
clusterSvcNets:
- "#{ bootstrap_service_cidr.split(',')[0] }#"
additionalApiServerCertSans: &sans
- "#{ bootstrap_kube_api_addr }#"
- 127.0.0.1 #KubePrism
#% if bootstrap_kube_api_hostname|default('') %#
- "#{ bootstrap_kube_api_hostname }#"
#% endif %#
additionalMachineCertSans: *sans
cniConfig:
name: none
nodes:
#% for item in bootstrap_nodes.master %#
- hostname: "#{ item.name }#"
ipAddress: "#{ item.address }#"
installDiskSelector:
serial: "#{ item.diskSerial }#"
controlPlane: true
networkInterfaces:
- interface: eth0
dhcp: false
mtu: 1500
routes:
- network: 0.0.0.0/0
gateway: "#{ bootstrap_node_cidr | nthhost(1) }#"
vip:
ip: "#{ bootstrap_kube_api_addr }#"
#% endfor %#
#% if bootstrap_nodes.worker|default([]) | length > 0 %#
#% for item in bootstrap_nodes.worker %#
- hostname: "#{ item.name }#"
ipAddress: "#{ item.address }#"
installDiskSelector:
serial: "#{ item.diskSerial }#"
controlPlane: false
networkInterfaces:
- interface: eth0
dhcp: false
mtu: 1500
routes:
- network: 0.0.0.0/0
gateway: "#{ bootstrap_node_cidr | nthhost(1) }#"
#% endfor %#
#% endif %#
controlPlane:
patches:
# Configure containerd
- &containerdPatch |-
machine:
files:
- op: create
path: /etc/cri/conf.d/20-customization.part
content: |-
[plugins."io.containerd.grpc.v1.cri"]
enable_unprivileged_ports = true
enable_unprivileged_icmp = true
#% if spegel.enabled %#
[plugins."io.containerd.grpc.v1.cri".containerd]
discard_unpacked_layers = false
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
discard_unpacked_layers = false
#% endif %#
# Disable search domain everywhere
- &disableSearchDomainPatch |-
machine:
network:
disableSearchDomain: true
# Enable cluster discovery
- &discoveryPatch |-
cluster:
discovery:
registries:
kubernetes:
disabled: false
service:
disabled: false
# Configure kubelet
- &kubeletPatch |-
machine:
kubelet:
extraArgs:
rotate-server-certificates: true
nodeIP:
validSubnets:
- "#{ bootstrap_node_cidr }#"
# Enable KubePrism
- &kubePrismPatch |-
machine:
features:
kubePrism:
enabled: true
port: 7445
# Force nameserver
- &nameserverPatch |-
machine:
network:
nameservers:
- "#{ bootstrap_dns_server|default('1.1.1.1', true) }#"
# Configure NTP
- &ntpPatch |-
machine:
time:
disabled: false
servers:
- time.cloudflare.com
# Custom sysctl settings
- &sysctlPatch |-
machine:
sysctls:
fs.inotify.max_queued_events: 65536
fs.inotify.max_user_watches: 524288
fs.inotify.max_user_instances: 8192
# Cluster configuration
- |-
cluster:
allowSchedulingOnMasters: true
controllerManager:
extraArgs:
bind-address: 0.0.0.0
proxy:
disabled: true
scheduler:
extraArgs:
bind-address: 0.0.0.0
# ETCD configuration
- |-
cluster:
etcd:
extraArgs:
listen-metrics-urls: http://0.0.0.0:2381
advertisedSubnets:
- "#{ bootstrap_node_cidr }#"
# Disable default API server admission plugins.
- |-
- op: remove
path: /cluster/apiServer/admissionControl
# Enable K8s Talos API Access
- |-
machine:
features:
kubernetesTalosAPIAccess:
enabled: true
allowedRoles:
- os:admin
allowedKubernetesNamespaces:
- kube-system
worker:
patches:
- *containerdPatch
- *disableSearchDomainPatch
- *discoveryPatch
- *kubeletPatch
- *kubePrismPatch
- *nameserverPatch
- *ntpPatch
- *sysctlPatch
#% endif %#