fix: address talos comments (#1253)

* fix: update cni to cilium in taskfile

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

* fix: more updates

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

* fix: more cleanup

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

* chore: housekeeping

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

---------

Signed-off-by: Devin Buhl <devin@buhl.casa>
This commit is contained in:
Devin Buhl authored and GitHub committed 2024-01-26 14:59:11 -05:00
1 parent ab93b0e44e
commit 90ca5f026f
16 files changed
+126 -101

No files matched your search

+2
View File
@@ -15,5 +15,7 @@ export K8S_AUTH_KUBECONFIG="$(expand_path ./kubeconfig)"
# k0s # k0s
export DISABLE_TELEMETRY="true" export DISABLE_TELEMETRY="true"
export DISABLE_UPGRADE_CHECK="true" export DISABLE_UPGRADE_CHECK="true"
# Talos
export TALOSCONFIG="$(expand_path ./kubernetes/talos/clusterconfig/talosconfig)"
# Bin # Bin
PATH_add "$(expand_path ./.bin)" PATH_add "$(expand_path ./.bin)"
+12 -6
View File
@@ -27,20 +27,26 @@ bootstrap_nodes:
master: master:
- name: k8s-0 - name: k8s-0
address: 10.10.10.100 address: 10.10.10.100
username: fake ssh:
username: fake
- name: k8s-1 - name: k8s-1
address: 10.10.10.101 address: 10.10.10.101
username: fake ssh:
username: fake
- name: k8s-2 - name: k8s-2
address: 10.10.10.102 address: 10.10.10.102
username: fake ssh:
username: fake
worker: worker:
- name: k8s-3 - name: k8s-3
address: 10.10.10.103 address: 10.10.10.103
username: fake ssh:
username: fake
- name: k8s-4 - name: k8s-4
address: 10.10.10.104 address: 10.10.10.104
username: fake ssh:
username: fake
- name: k8s-5 - name: k8s-5
address: 10.10.10.105 address: 10.10.10.105
username: fake ssh:
username: fake
+12 -6
View File
@@ -27,20 +27,26 @@ bootstrap_nodes:
master: master:
- name: k8s-0 - name: k8s-0
address: 10.10.10.100 address: 10.10.10.100
username: fake ssh:
username: fake
- name: k8s-1 - name: k8s-1
address: 10.10.10.101 address: 10.10.10.101
username: fake ssh:
username: fake
- name: k8s-2 - name: k8s-2
address: 10.10.10.102 address: 10.10.10.102
username: fake ssh:
username: fake
worker: worker:
- name: k8s-3 - name: k8s-3
address: 10.10.10.103 address: 10.10.10.103
username: fake ssh:
username: fake
- name: k8s-4 - name: k8s-4
address: 10.10.10.104 address: 10.10.10.104
username: fake ssh:
username: fake
- name: k8s-5 - name: k8s-5
address: 10.10.10.105 address: 10.10.10.105
username: fake ssh:
username: fake
+12 -6
View File
@@ -29,20 +29,26 @@ bootstrap_nodes:
master: master:
- name: k8s-0 - name: k8s-0
address: 10.10.10.100 address: 10.10.10.100
username: fake ssh:
username: fake
- name: k8s-1 - name: k8s-1
address: 10.10.10.101 address: 10.10.10.101
username: fake ssh:
username: fake
- name: k8s-2 - name: k8s-2
address: 10.10.10.102 address: 10.10.10.102
username: fake ssh:
username: fake
worker: worker:
- name: k8s-3 - name: k8s-3
address: 10.10.10.103 address: 10.10.10.103
username: fake ssh:
username: fake
- name: k8s-4 - name: k8s-4
address: 10.10.10.104 address: 10.10.10.104
username: fake ssh:
username: fake
- name: k8s-5 - name: k8s-5
address: 10.10.10.105 address: 10.10.10.105
username: fake ssh:
username: fake
+12 -12
View File
@@ -27,26 +27,26 @@ bootstrap_nodes:
master: master:
- name: k8s-0 - name: k8s-0
address: 10.10.10.100 address: 10.10.10.100
username: fake talos:
diskSerial: fake disk_device: fake
- name: k8s-1 - name: k8s-1
address: 10.10.10.101 address: 10.10.10.101
username: fake talos:
diskSerial: fake disk_device: fake
- name: k8s-2 - name: k8s-2
address: 10.10.10.102 address: 10.10.10.102
username: fake talos:
diskSerial: fake disk_device: fake
worker: worker:
- name: k8s-3 - name: k8s-3
address: 10.10.10.103 address: 10.10.10.103
username: fake talos:
diskSerial: fake disk_device: fake
- name: k8s-4 - name: k8s-4
address: 10.10.10.104 address: 10.10.10.104
username: fake talos:
diskSerial: fake disk_device: fake
- name: k8s-5 - name: k8s-5
address: 10.10.10.105 address: 10.10.10.105
username: fake talos:
diskSerial: fake disk_device: fake
+7 -2
View File
@@ -7,6 +7,9 @@ vars:
TALHELPER_SECRET_FILE: "{{.TALOS_DIR}}/talhelper.sops.yaml" TALHELPER_SECRET_FILE: "{{.TALOS_DIR}}/talhelper.sops.yaml"
TALHELPER_CONFIG_FILE: "{{.TALOS_DIR}}/talconfig.yaml" TALHELPER_CONFIG_FILE: "{{.TALOS_DIR}}/talconfig.yaml"
env:
TALOSCONFIG: "{{.TALOS_DIR}}/clusterconfig/talosconfig"
tasks: tasks:
gensecret: gensecret:
@@ -46,13 +49,15 @@ tasks:
desc: Generate talos kubeconfig desc: Generate talos kubeconfig
prompt: This will overwrite the existing kubeconfig... continue? prompt: This will overwrite the existing kubeconfig... continue?
dir: "{{.TALOS_DIR}}" dir: "{{.TALOS_DIR}}"
cmd: talosctl kubeconfig {{.ROOT_DIR}} --force cmd: talosctl --nodes {{.node}} kubeconfig {{.ROOT_DIR}} --force
requires:
vars: ["node"]
apply-extras: apply-extras:
desc: Apply extras desc: Apply extras
dir: "{{.TALOS_DIR}}" dir: "{{.TALOS_DIR}}"
cmds: cmds:
- kubectl --kubeconfig {{.KUBECONFIG_FILE}} kustomize --enable-helm ./cni | kubectl apply --kubeconfig {{.KUBECONFIG_FILE}} --server-side --filename - - kubectl --kubeconfig {{.KUBECONFIG_FILE}} kustomize --enable-helm ./cilium | kubectl apply --kubeconfig {{.KUBECONFIG_FILE}} --server-side --filename -
- kubectl --kubeconfig {{.KUBECONFIG_FILE}} kustomize --enable-helm ./kubelet-csr-approver | kubectl apply --kubeconfig {{.KUBECONFIG_FILE}} --server-side --filename - - kubectl --kubeconfig {{.KUBECONFIG_FILE}} kustomize --enable-helm ./kubelet-csr-approver | kubectl apply --kubeconfig {{.KUBECONFIG_FILE}} --server-side --filename -
preconditions: preconditions:
- { msg: "Missing kubeconfig", sh: "test -f {{.KUBECONFIG_FILE}}" } - { msg: "Missing kubeconfig", sh: "test -f {{.KUBECONFIG_FILE}}" }
+1 -1
View File
@@ -362,7 +362,7 @@ You have two different options for setting up your local workstation. First one
```sh ```sh
task talos:bootstrap task talos:bootstrap
task talos:kubeconfig task talos:kubeconfig node=$master_node_ip_address
``` ```
4. Install Cilium and kubelet-csr-approver into the cluster 4. Install Cilium and kubelet-csr-approver into the cluster
+4 -4
View File
@@ -58,10 +58,10 @@ def _validate_distribution(distribution: str) -> None:
def _validate_node(node: dict, node_cidr: str, distribution: str) -> None: def _validate_node(node: dict, node_cidr: str, distribution: str) -> None:
if not node.get("name"): if not node.get("name"):
raise ValueError(f"A node is missing a name") raise ValueError(f"A node is missing a name")
if not node.get("username") and distribution not in ["k0s", "k3s"]: if not node.get("ssh", {}).get("username") and distribution in ["k0s", "k3s"]:
raise ValueError(f"Node {node.get('name')} is missing a username") raise ValueError(f"Node {node.get('name')} is missing a SSH username")
if not node.get("diskSerial") and distribution in ["talos"]: if not node.get("disk_device") and distribution in ["talos"]:
raise ValueError(f"Node {node.get('name')} is missing a disk serial") raise ValueError(f"Node {node.get('name')} is missing a disk device")
if not re.match(r"^[a-z0-9-\.]+$", node.get('name')): if not re.match(r"^[a-z0-9-\.]+$", node.get('name')):
raise ValueError(f"Node {node.get('name')} has an invalid name") raise ValueError(f"Node {node.get('name')} has an invalid name")
ip = _validate_ip(node.get("address")) ip = _validate_ip(node.get("address"))
@@ -1,14 +1,12 @@
--- ---
# https://github.com/PyratLabs/ansible-role-k3s
# renovate: datasource=github-releases depName=k3s-io/k3s
k3s_release_version: v1.29.0+k3s1
k3s_install_hard_links: true
k3s_become: true k3s_become: true
k3s_etcd_datastore: true k3s_etcd_datastore: true
k3s_use_unsupported_config: true k3s_install_hard_links: true
k3s_registration_address: "#{ bootstrap_kube_api_addr }#" k3s_registration_address: "#{ bootstrap_kube_api_addr }#"
# /var/lib/rancher/k3s/server/manifests # renovate: datasource=github-releases depName=k3s-io/k3s
k3s_release_version: v1.29.0+k3s1
k3s_server_manifests_templates: k3s_server_manifests_templates:
- custom-cilium-helmchart.yaml - custom-cilium-helmchart.yaml
- kube-vip-ds.yaml - kube-vip-ds.yaml
- kube-vip-rbac.yaml - kube-vip-rbac.yaml
k3s_use_unsupported_config: true
@@ -1,27 +1,6 @@
--- ---
# https://rancher.com/docs/k3s/latest/en/installation/install-options/server-config/
# https://github.com/PyratLabs/ansible-role-k3s
k3s_control_node: true k3s_control_node: true
k3s_server: k3s_server:
#% if bootstrap_advanced_flags.dual_stack_ipv4_first|default(false) %#
node-ip: "{{ ansible_host }},{{ ansible_default_ipv6.address }}"
#% else %#
node-ip: "{{ ansible_host }}"
#% endif %#
tls-san:
- "#{ bootstrap_kube_api_addr }#"
#% for item in bootstrap_kube_additional_tls_sans %#
- "{{ item }}"
#% endfor %#
docker: false
flannel-backend: "none" # quote
disable: ["flannel", "local-storage", "metrics-server", "servicelb", "traefik"]
disable-network-policy: true
disable-cloud-controller: true
disable-kube-proxy: true
write-kubeconfig-mode: "644"
pause-image: registry.k8s.io/pause:3.9
secrets-encryption: true
#% if bootstrap_advanced_flags.dual_stack_ipv4_first|default(false) %# #% if bootstrap_advanced_flags.dual_stack_ipv4_first|default(false) %#
cluster-cidr: "#{ bootstrap_cluster_cidr.split(',')[0] }#,#{ bootstrap_cluster_cidr.split(',')[1] }#" cluster-cidr: "#{ bootstrap_cluster_cidr.split(',')[0] }#,#{ bootstrap_cluster_cidr.split(',')[1] }#"
service-cidr: "#{ bootstrap_service_cidr.split(',')[0] }#,#{ bootstrap_service_cidr.split(',')[1] }#" service-cidr: "#{ bootstrap_service_cidr.split(',')[0] }#,#{ bootstrap_service_cidr.split(',')[1] }#"
@@ -29,13 +8,32 @@ k3s_server:
cluster-cidr: "#{ bootstrap_cluster_cidr }#" cluster-cidr: "#{ bootstrap_cluster_cidr }#"
service-cidr: "#{ bootstrap_service_cidr }#" service-cidr: "#{ bootstrap_service_cidr }#"
#% endif %# #% endif %#
etcd-expose-metrics: true # Required to monitor etcd with kube-prometheus-stack disable: ["flannel", "local-storage", "metrics-server", "servicelb", "traefik"]
kube-controller-manager-arg: disable-cloud-controller: true
- "bind-address=0.0.0.0" # Required to monitor kube-controller-manager with kube-prometheus-stack disable-kube-proxy: true
kube-scheduler-arg: disable-network-policy: true
- "bind-address=0.0.0.0" # Required to monitor kube-scheduler with kube-prometheus-stack docker: false
etcd-expose-metrics: true
flannel-backend: "none"
kube-apiserver-arg: kube-apiserver-arg:
- "anonymous-auth=true" # Required for external LB health-checks - "anonymous-auth=true"
kube-controller-manager-arg:
- "bind-address=0.0.0.0"
kube-scheduler-arg:
- "bind-address=0.0.0.0"
kubelet-arg: kubelet-arg:
- "image-gc-high-threshold=55" - "image-gc-high-threshold=55"
- "image-gc-low-threshold=50" - "image-gc-low-threshold=50"
#% if bootstrap_advanced_flags.dual_stack_ipv4_first|default(false) %#
node-ip: "{{ ansible_host }},{{ ansible_default_ipv6.address }}"
#% else %#
node-ip: "{{ ansible_host }}"
#% endif %#
pause-image: registry.k8s.io/pause:3.9
secrets-encryption: true
tls-san:
- "#{ bootstrap_kube_api_addr }#"
#% for item in bootstrap_kube_additional_tls_sans %#
- "{{ item }}"
#% endfor %#
write-kubeconfig-mode: "644"
@@ -1,14 +1,12 @@
--- ---
# https://rancher.com/docs/k3s/latest/en/installation/install-options/agent-config/
# https://github.com/PyratLabs/ansible-role-k3s
k3s_control_node: false k3s_control_node: false
k3s_agent: k3s_agent:
kubelet-arg:
- "image-gc-high-threshold=55"
- "image-gc-low-threshold=50"
#% if bootstrap_advanced_flags.dual_stack_ipv4_first|default(false) %# #% if bootstrap_advanced_flags.dual_stack_ipv4_first|default(false) %#
node-ip: "{{ ansible_host }},{{ ansible_default_ipv6.address }}" node-ip: "{{ ansible_host }},{{ ansible_default_ipv6.address }}"
#% else %# #% else %#
node-ip: "{{ ansible_host }}" node-ip: "{{ ansible_host }}"
#% endif %# #% endif %#
pause-image: registry.k8s.io/pause:3.9 pause-image: registry.k8s.io/pause:3.9
kubelet-arg:
- "image-gc-high-threshold=55"
- "image-gc-low-threshold=50"
@@ -5,15 +5,15 @@ kubernetes:
hosts: hosts:
#% for item in bootstrap_nodes.master %# #% for item in bootstrap_nodes.master %#
"#{ item.name }#": "#{ item.name }#":
ansible_user: "#{ item.username }#" ansible_user: "#{ item.ssh.username }#"
ansible_host: "#{ item.address }#" ansible_host: "#{ item.address }#"
#% endfor %# #% endfor %#
#% if bootstrap_nodes.worker | length > 0 %# #% if bootstrap_nodes.worker|length > 0 %#
worker: worker:
hosts: hosts:
#% for item in bootstrap_nodes.worker %# #% for item in bootstrap_nodes.worker %#
"#{ item.name }#": "#{ item.name }#":
ansible_user: "#{ item.username }#" ansible_user: "#{ item.ssh.username }#"
ansible_host: "#{ item.address }#" ansible_host: "#{ item.address }#"
#% endfor %# #% endfor %#
#% endif %# #% endif %#
@@ -30,10 +30,6 @@
- name: User Configuration - name: User Configuration
block: block:
- name: User Configuration | SSH keys
ansible.posix.authorized_key:
user: "{{ ansible_user }}"
key: "https://github.com/#{ bootstrap_github_username }#.keys"
- name: User Configuration | Silence login - name: User Configuration | Silence login
ansible.builtin.file: ansible.builtin.file:
dest: "{{ '/home/' + ansible_user if ansible_user != 'root' else '/root' }}/.hushlogin" dest: "{{ '/home/' + ansible_user if ansible_user != 'root' else '/root' }}/.hushlogin"
@@ -9,7 +9,7 @@ spec:
- role: controller+worker - role: controller+worker
ssh: ssh:
address: "#{ item.address }#" address: "#{ item.address }#"
user: "#{ item.username }#" user: "#{ item.ssh.username }#"
installFlags: installFlags:
- --disable-components=metrics-server - --disable-components=metrics-server
- --no-taints - --no-taints
@@ -24,12 +24,11 @@ spec:
after: after:
- curl -sfL https://raw.githubusercontent.com/#{ bootstrap_github_username }#/#{ bootstrap_github_repository_name }#/#{ bootstrap_advanced_flags.github_repository_branch|default('main', true) }#/kubernetes/k0s/resources/reset-system.sh | bash -s - - curl -sfL https://raw.githubusercontent.com/#{ bootstrap_github_username }#/#{ bootstrap_github_repository_name }#/#{ bootstrap_advanced_flags.github_repository_branch|default('main', true) }#/kubernetes/k0s/resources/reset-system.sh | bash -s -
#% endfor %# #% endfor %#
#% if bootstrap_nodes.worker | length > 0 %#
#% for item in bootstrap_nodes.worker %# #% for item in bootstrap_nodes.worker %#
- role: worker - role: worker
ssh: ssh:
address: "#{ item.address }#" address: "#{ item.address }#"
user: "#{ item.username }#" user: "#{ item.ssh.username }#"
hooks: hooks:
apply: apply:
before: before:
@@ -40,7 +39,6 @@ spec:
after: after:
- curl -sfL https://raw.githubusercontent.com/#{ bootstrap_github_username }#/#{ bootstrap_github_repository_name }#/#{ bootstrap_advanced_flags.github_repository_branch|default('main', true) }#/kubernetes/k0s/resources/reset-system.sh | bash -s - - curl -sfL https://raw.githubusercontent.com/#{ bootstrap_github_username }#/#{ bootstrap_github_repository_name }#/#{ bootstrap_advanced_flags.github_repository_branch|default('main', true) }#/kubernetes/k0s/resources/reset-system.sh | bash -s -
#% endfor %# #% endfor %#
#% endif %#
k0s: k0s:
# renovate: datasource=github-releases depName=k0sproject/k0s # renovate: datasource=github-releases depName=k0sproject/k0s
version: v1.28.6+k0s.0 version: v1.28.6+k0s.0
@@ -51,16 +49,14 @@ spec:
enabled: false enabled: false
controllerManager: controllerManager:
extraArgs: extraArgs:
# Required to monitor kube-controller-manager with kube-prometheus-stack
bind-address: "0.0.0.0" bind-address: "0.0.0.0"
scheduler: scheduler:
extraArgs: extraArgs:
# Required to monitor kube-scheduler with kube-prometheus-stack
bind-address: "0.0.0.0" bind-address: "0.0.0.0"
storage: storage:
etcd: etcd:
extraArgs: extraArgs:
listen-metrics-urls: http://0.0.0.0:2381 # Required to monitor etcd with kube-prometheus-stack listen-metrics-urls: http://0.0.0.0:2381
api: api:
sans: sans:
#% if bootstrap_kube_api_addr %# #% if bootstrap_kube_api_addr %#
@@ -25,12 +25,18 @@ nodes:
#% for item in bootstrap_nodes.master %# #% for item in bootstrap_nodes.master %#
- hostname: "#{ item.name }#" - hostname: "#{ item.name }#"
ipAddress: "#{ item.address }#" ipAddress: "#{ item.address }#"
#% if item.talos.disk_device.startswith('/') %#
installDisk: "#{ item.talos.disk_device }#"
#% else %#
installDiskSelector: installDiskSelector:
serial: "#{ item.diskSerial }#" serial: "#{ item.talos.disk_device }#"
#% endif %#
controlPlane: true controlPlane: true
networkInterfaces: networkInterfaces:
- interface: eth0 - interface: eth0
dhcp: false dhcp: false
addresses:
- "#{ item.address }#/#{ bootstrap_node_cidr.split('/') | last }#"
mtu: 1500 mtu: 1500
routes: routes:
- network: 0.0.0.0/0 - network: 0.0.0.0/0
@@ -38,22 +44,26 @@ nodes:
vip: vip:
ip: "#{ bootstrap_kube_api_addr }#" ip: "#{ bootstrap_kube_api_addr }#"
#% endfor %# #% endfor %#
#% if bootstrap_nodes.worker | length > 0 %#
#% for item in bootstrap_nodes.worker %# #% for item in bootstrap_nodes.worker %#
- hostname: "#{ item.name }#" - hostname: "#{ item.name }#"
ipAddress: "#{ item.address }#" ipAddress: "#{ item.address }#"
#% if item.talos.disk_device.startswith('/') %#
installDisk: "#{ item.talos.disk_device }#"
#% else %#
installDiskSelector: installDiskSelector:
serial: "#{ item.diskSerial }#" serial: "#{ item.talos.disk_device }#"
#% endif %#
controlPlane: false controlPlane: false
networkInterfaces: networkInterfaces:
- interface: eth0 - interface: eth0
dhcp: false dhcp: false
addresses:
- "#{ item.address }#/#{ bootstrap_node_cidr.split('/') | last }#"
mtu: 1500 mtu: 1500
routes: routes:
- network: 0.0.0.0/0 - network: 0.0.0.0/0
gateway: "#{ bootstrap_node_cidr | nthhost(1) }#" gateway: "#{ bootstrap_node_cidr | nthhost(1) }#"
#% endfor %# #% endfor %#
#% endif %#
controlPlane: controlPlane:
patches: patches:
+12 -8
View File
@@ -74,16 +74,20 @@ bootstrap_service_cidr: 10.43.0.0/16
bootstrap_nodes: bootstrap_nodes:
# Use only 1, 3 or more odd master nodes, recommended is 3 # Use only 1, 3 or more odd master nodes, recommended is 3
master: master:
# - name: # name or hostname of the master node (must match [a-z0-9-\.]+) # - name: # name or hostname of the node (must match [a-z0-9-\.]+)
# address: # ip address of the master node # address: # ip address of the node
# username: # ssh username of the master node # ssh:
# diskSerial: # (Required: Talos) Serial number of Disk for this master node # username: # (Required: k3s/k0s) SSH username of the node
# talos:
# disk_device: # (Required: Talos) Device Path or Serial number of Disk for this node
# ... # ...
worker: # set to [] or omit if no workers are needed worker: # set to [] or omit if no workers are needed
# - name: # name or hostname of the worker node (must match [a-z0-9-\.]+) # - name: # name or hostname of the node (must match [a-z0-9-\.]+)
# address: # ip address of the worker node # address: # ip address of the node
# username: # ssh username of the worker node # ssh:
# diskSerial: # (Required: Talos) Serial number of Disk for this worker node # username: # (Required: k3s/k0s) SSH username of the node
# talos:
# disk_device: # (Required: Talos) Device Path or Serial number of Disk for this node
# ... # ...
# #