feat(k0s): unsupport it (#1291)

Signed-off-by: Devin Buhl <devin@buhl.casa>
This commit is contained in:
Devin Buhl authored and GitHub committed 2024-02-02 18:02:14 -05:00
1 parent 3e0fb233b6
commit eab63476b7
48 files changed
+22 -505

No files matched your search

-2
View File
@@ -25,7 +25,6 @@ for app in \
"FiloSottile/age!!?as=age&type=script" \
"fluxcd/flux2!!?as=flux&type=script" \
"go-task/task!!?as=task&type=script" \
"k0sproject/k0sctl!!?as=k0sctl&type=script" \
"kubecolor/kubecolor!!?as=kubecolor&type=script" \
"kubernetes-sigs/krew!!?as=krew&type=script" \
"kubernetes-sigs/kustomize!!?as=kustomize&type=script" \
@@ -46,7 +45,6 @@ for tool in cilium flux helm k9s kubectl kustomize talhelper talosctl; do
$tool completion fish > /home/vscode/.config/fish/completions/$tool.fish
done
gh completion --shell fish > /home/vscode/.config/fish/completions/gh.fish
k0sctl completion --shell fish > /home/vscode/.config/fish/completions/k0sctl.fish
stern --completion fish > /home/vscode/.config/fish/completions/stern.fish
yq shell-completion fish > /home/vscode/.config/fish/completions/yq.fish
-3
View File
@@ -12,9 +12,6 @@ export ANSIBLE_VARS_ENABLED="host_group_vars"
export ANSIBLE_LOCALHOST_WARNING="False"
export ANSIBLE_INVENTORY_UNPARSED_WARNING="False"
export K8S_AUTH_KUBECONFIG="$(expand_path ./kubeconfig)"
# k0s
export DISABLE_TELEMETRY="true"
export DISABLE_UPGRADE_CHECK="true"
# Talos
export TALOSCONFIG="$(expand_path ./kubernetes/talos/clusterconfig/talosconfig)"
# Bin
-1
View File
@@ -6,7 +6,6 @@
- { name: "area/kubernetes", color: "0e8a16" }
- { name: "area/taskfile", color: "0e8a16" }
# Distro
- { name: "distro/k0s", color: "ffc300" }
- { name: "distro/k3s", color: "ffc300" }
- { name: "distro/talos", color: "ffc300" }
# Renovate
+2 -2
View File
@@ -75,10 +75,10 @@
},
// custom versioning
{
"description": ["Use custom versioning for k0s/k3s"],
"description": ["Use custom versioning for k3s"],
"matchDatasources": ["github-releases"],
"versioning": "regex:^v(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)(?<compatibility>\\+k.s)\\.?(?<build>\\d+)$",
"matchPackagePatterns": ["k0s", "k3s"]
"matchPackagePatterns": ["k3s"]
},
// commit message topics
{
-55
View File
@@ -1,55 +0,0 @@
---
skip_tests: true
distribution:
type: k0s
timezone: Etc/UTC
nodes:
host_network: 10.10.10.0/24
dns_servers: ["1.1.1.1"]
search_domain: "fake"
inventory:
- name: k8s-controller-0
address: 10.10.10.100
controller: true
ssh_username: fake
- name: k8s-worker-0
address: 10.10.10.101
controller: false
ssh_username: fake
cluster:
pod_network: 10.69.0.0/16
service_network: 10.96.0.0/16
endpoint_vip: 10.10.10.254
tls_sans: ["fake"]
flux:
enabled: true
github:
username: onedr0p
address: https://github.com/onedr0p/cluster-template
branch: main
webhook:
enabled: true
token: fake
private:
enabled: false
sops_age_public_key: $BOOTSTRAP_AGE_PUBLIC_KEY
cloudflare:
enabled: true
domain: fake
token: take
acme:
email: fake@example.com
production: false
tunnel:
account_id: fake
id: fake
secret: fake
ingress_vip: 10.10.10.252
ingress_vip: 10.10.10.251
gateway_vip: 10.10.10.253
+1 -2
View File
@@ -19,7 +19,6 @@ jobs:
fail-fast: false
matrix:
config-files:
- k0s
- k3s-ipv4
- k3s-ipv6
- talos
@@ -94,7 +93,7 @@ jobs:
task talos:genconfig
- name: Run Ansible tasks
if: ${{ startsWith(matrix.config-files, 'k0s') || startsWith(matrix.config-files, 'k3s') }}
if: ${{ startsWith(matrix.config-files, 'k3s') }}
shell: bash
run: |
task ansible:deps force=false
-46
View File
@@ -1,46 +0,0 @@
---
# yaml-language-server: $schema=https://taskfile.dev/schema.json
version: "3"
vars:
K0S_DIR: "{{.KUBERNETES_DIR}}/k0s"
K0S_CONFIG_FILE: "{{.K0S_DIR}}/k0sctl.yaml"
env:
DISABLE_TELEMETRY: "true"
DISABLE_UPGRADE_CHECK: "true"
tasks:
apply:
desc: Apply k0s cluster config
dir: "{{.K0S_DIR}}"
cmds:
- k0sctl apply --config {{.K0S_CONFIG_FILE}}
- task: kubeconfig
preconditions:
- { msg: "Missing K0s config file", sh: "test -f {{.K0S_CONFIG_FILE}}" }
nuke:
desc: Nuke the k0s cluster
dir: "{{.K0S_DIR}}"
cmd: k0sctl reset --config {{.K0S_CONFIG_FILE}}
preconditions:
- { msg: "Missing K0s config file", sh: "test -f {{.K0S_CONFIG_FILE}}" }
kubeconfig:
desc: Gets k0s kubeconfig
dir: "{{.K0S_DIR}}"
prompt: This will overwrite the existing kubeconfig... continue?
cmds:
- k0sctl kubeconfig --config {{.K0S_CONFIG_FILE}} > {{.KUBECONFIG_FILE}}
- sed -i {{if eq OS "darwin"}}''{{end}} 's|https://.+:6443|https://{{.endpoint}}:6443|g' {{.KUBECONFIG_FILE}}
vars:
endpoint:
sh: "yq '.cluster.endpoint_vip' {{.BOOTSTRAP_CONFIG_FILE}}"
preconditions:
- { msg: "Missing K0s config file", sh: "test -f {{.K0S_CONFIG_FILE}}" }
.reset:
internal: true
cmd: rm -rf {{.K0S_CONFIG_FILE}}
-1
View File
@@ -25,7 +25,6 @@ tasks:
prompt: Reset templated configuration files... continue?
cmds:
- task: :ansible:.reset
- task: :k0s:.reset
- task: :kubernetes:.reset
- task: :sops:.reset
- task: :talos:.reset
-1
View File
@@ -6,7 +6,6 @@ go-task
go-yq
helm
jq
k0sctl-bin
kubeconform
kubectl-bin
kustomize
-2
View File
@@ -1,6 +1,5 @@
tap "fluxcd/tap"
tap "go-task/tap"
tap "k0sproject/tap"
tap "siderolabs/talos"
brew "age"
brew "cloudflared"
@@ -9,7 +8,6 @@ brew "fluxcd/tap/flux"
brew "go-task/tap/go-task"
brew "helm"
brew "jq"
brew "k0sproject/tap/k0sctl"
brew "kubeconform"
brew "kubernetes-cli"
brew "kustomize"
-1
View File
@@ -57,7 +57,6 @@ tasks:
- fluxcd/flux2?as=flux&type=script
- getsops/sops?as=sops&type=script
- jqlang/jq?as=jq&type=script
- k0sproject/k0sctl?as=k0sctl&type=script
- kubernetes-sigs/kustomize?as=kustomize&type=script
- siderolabs/talos?as=talosctl&type=script
- yannh/kubeconform?as=kubeconform&type=script
+9 -13
View File
@@ -8,10 +8,10 @@ At a high level this project makes use of [makejinja](https://github.com/mirkole
The features included will depend on the type of configuration you want to use. There are currently **3 different types** of **configurations** available with this template.
1. **"Bare cluster"** - a Kubernetes distribution of your choosing: [k0s](https://github.com/k0sproject/k0s), [k3s](https://github.com/k3s-io/k3s) or [Talos](https://github.com/siderolabs/talos)
1. **"Bare cluster"** - a Kubernetes distribution of your choosing: [k3s](https://github.com/k3s-io/k3s) or [Talos](https://github.com/siderolabs/talos)
- **Required:** Debian 12 or Talos Linux installed on bare metal (or VMs) and some knowledge of [Containers](https://opencontainers.org/) and [YAML](https://yaml.org/).
- **Components:** [Cilium](https://github.com/cilium/cilium) and [kube-vip](https://github.com/kube-vip/kube-vip) _(k0s/k3s)_
- **Components:** [Cilium](https://github.com/cilium/cilium) and [kube-vip](https://github.com/kube-vip/kube-vip) _(k3s)_
2. **"Flux cluster"** - An addition to "**Bare cluster**" that deploys an opinionated implementation of [Flux](https://github.com/fluxcd/flux2) using [GitHub](https://github.com/) as the Git provider and [sops](https://github.com/getsops/sops) to manage secrets.
@@ -30,12 +30,12 @@ The features included will depend on the type of configuration you want to use.
## 💻 Machine Preparation
Hopefully some of this peeked your interests! If you are marching forward, now is a good time to choose whether you will deploy a Kubernetes cluster with [k0s](https://github.com/k0sproject/k0s), [k3s](https://github.com/k3s-io/k3s) or [Talos](https://github.com/siderolabs/talos).
Hopefully some of this peeked your interests! If you are marching forward, now is a good time to choose whether you will deploy a Kubernetes cluster with [k3s](https://github.com/k3s-io/k3s) or [Talos](https://github.com/siderolabs/talos).
### System requirements
> [!NOTE]
> 1. The included behaviour of Talos, k3s or k0s is that all nodes are able to run workloads, **including** the controller nodes. **Worker nodes** are therefore **optional**.
> 1. The included behaviour of Talos or k3s is that all nodes are able to run workloads, **including** the controller nodes. **Worker nodes** are therefore **optional**.
> 2. Do you have 3 or more nodes? It is highly recommended to make 3 of them controller nodes for a highly available control plane.
> 3. Running the cluster on Proxmox VE? My thoughts and recommendations about that are documented [here](https://onedr0p.github.io/home-ops/notes/proxmox-considerations.html).
@@ -55,7 +55,7 @@ Hopefully some of this peeked your interests! If you are marching forward, now
4. Continue on to 🚀 [**Getting Started**](#-getting-started)
### k3s or k0s (AMD64)
### k3s (AMD64)
1. Download the latest stable release of Debian from [here](https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd), then follow [this guide](https://www.linuxtechi.com/how-to-install-debian-12-step-by-step) to get it installed. Deviations from the guide:
@@ -99,7 +99,7 @@ Hopefully some of this peeked your interests! If you are marching forward, now
chmod 600 ~/.ssh/authorized_keys
```
### k3s or k0s (RasPi4)
### k3s (RasPi4)
<details>
<summary><i>Click <b>here</b> to read about using a RasPi4</i></summary>
@@ -126,7 +126,7 @@ Hopefully some of this peeked your interests! If you are marching forward, now
5. [Post install] SSH into the device with the `root` user and then create a normal user account with `adduser ${username}`
6. [Post install] Follow steps 3 and 4 from [k3s or k0s (AMD64)](##k3s-or-k0s-amd64).
6. [Post install] Follow steps 3 and 4 from [k3s (AMD64)](##k3s-amd64).
7. [Post install] Install `python3` which is needed by Ansible.
@@ -245,7 +245,7 @@ You have two different options for setting up your local workstation.
### ⚡ Stage 4: Prepare your nodes for Kubernetes
> [!NOTE]
> For **Talos** or **k0s** skip ahead to ⛵ [**Stage 5**](#-stage-5-install-kubernetes)
> For **Talos** skip ahead to ⛵ [**Stage 5**](#-stage-5-install-kubernetes)
#### k3s
@@ -309,15 +309,13 @@ You have two different options for setting up your local workstation.
task talos:apply-extras
```
#### k3s or k0s
#### k3s
1. Install Kubernetes depending on the distribution you chose
```sh
# Install k3s
task ansible:run playbook=cluster-installation
# or, install k0s
task k0s:apply
```
#### Cluster validation
@@ -452,8 +450,6 @@ There might be a situation where you want to destroy your Kubernetes cluster. Th
```sh
# Nuke k3s
task ansible:run playbook=cluster-nuke
# or, Nuke k0s
task k0s:reset
```
## 🤖 Renovate
-1
View File
@@ -30,7 +30,6 @@ includes:
aliases: ["k8s"]
taskfile: .taskfiles/Kubernetes/Taskfile.yaml
flux: .taskfiles/Flux/Taskfile.yaml
k0s: .taskfiles/K0s/Taskfile.yaml
repository:
aliases: ["repo"]
taskfile: .taskfiles/Repository/Taskfile.yaml
+1 -5
View File
@@ -5,10 +5,9 @@ from zoneinfo import available_timezones
import netaddr
import sys
DISTRIBUTIONS = ["k0s", "k3s", "talos"]
DISTRIBUTIONS = ["k3s", "talos"]
GLOBAL_CLI_TOOLS = ["age", "cloudflared", "flux", "sops", "jq", "kubeconform", "kustomize"]
TALOS_CLI_TOOLS = ["talosctl", "talhelper"]
K0S_CLI_TOOLS = ["k0sctl"]
def required(*keys: str):
def wrapper_outter(func: Callable):
@@ -48,9 +47,6 @@ def validate_cli_tools(distribution: dict, **_) -> None:
for tool in TALOS_CLI_TOOLS if distribution in ["talos"] else []:
if not which(tool):
raise ValueError(f"Missing required CLI tool {tool}")
for tool in K0S_CLI_TOOLS if distribution in ["k0s"] else []:
if not which(tool):
raise ValueError(f"Missing required CLI tool {tool}")
@required("distribution")
+1 -1
View File
@@ -13,7 +13,7 @@ creation_rules:
key_groups:
- age:
- "{{ flux.sops_age_public_key }}"
{% if distribution.type in ["k0s", "k3s"] %}
{% if distribution.type in ["k3s"] %}
- path_regex: ansible/.*\.sops\.ya?ml
key_groups:
- age:
+1 -1
View File
@@ -1 +1 @@
main = lambda data: data.get("distribution", {}).get("type", "k3s") in ["k0s", "k3s"]
main = lambda data: data.get("distribution", {}).get("type", "k3s") in ["k3s"]
@@ -1 +0,0 @@
main = lambda data: data.get("distribution", {}).get("type", "k3s") in ["k0s", "k3s"]
@@ -1 +0,0 @@
main = lambda data: data.get("distribution", {}).get("type", "k3s") in ["k3s"]
@@ -1 +0,0 @@
main = lambda data: data.get("distribution", {}).get("type", "k3s") in ["k3s"]
@@ -1,4 +1,3 @@
{% if distribution.type in ["k3s"] %}
---
- name: Cluster Installation
hosts: kubernetes
@@ -59,4 +58,3 @@
- name: Cruft
when: k3s_primary_control_node
ansible.builtin.include_tasks: tasks/cruft.yaml
{% endif %}
@@ -10,20 +10,15 @@
ansible.builtin.pause:
seconds: 5
tasks:
{% if distribution.type in ["k3s"] %}
- name: Ensure Kubernetes is running
ansible.builtin.include_role:
name: xanmanning.k3s
public: true
vars:
k3s_state: started
{% endif %}
- name: Upgrade kube-vip
ansible.builtin.template:
src: templates/kube-vip-ds.yaml.j2
{% if distribution.type in ["k3s"] %}
dest: "{% raw %}{{ k3s_server_manifests_dir }}{% endraw %}/kube-vip-ds.yaml"
{% elif distribution.type in ["k0s"] %}
dest: "/var/lib/k0s/manifests/kube-vip/kube-vip-ds.yaml"
{% endif %}
mode: preserve
@@ -1,4 +1,3 @@
{% if distribution.type in ["k3s"] %}
---
- name: Cluster Nuke
hosts: kubernetes
@@ -100,4 +99,3 @@
ansible.builtin.reboot:
msg: Rebooting hosts
reboot_timeout: 3600
{% endif %}
@@ -1,4 +1,3 @@
{% if distribution.type in ["k3s"] %}
---
- name: Prepare System
hosts: kubernetes
@@ -112,4 +111,3 @@
ansible.builtin.reboot:
msg: Rebooting hosts
reboot_timeout: 3600
{% endif %}
@@ -1,5 +1,4 @@
---
# https://github.com/kevincoakley/ansible-role-k8s-rolling-update
- name: Cluster rollout update
hosts: kubernetes
become: true
@@ -12,11 +11,7 @@
seconds: 5
tasks:
- name: Details
{% if distribution.type in ["k3s"] %}
ansible.builtin.command: "k3s kubectl get node {% raw %}{{ inventory_hostname }}{% endraw %} -o json"
{% elif distribution.type in ["k0s"] %}
ansible.builtin.command: "k0s kubectl get node {% raw %}{{ inventory_hostname }}{% endraw %} -o json"
{% endif %}
register: kubectl_get_node
delegate_to: "{% raw %}{{ groups['master'][0] }}{% endraw %}"
failed_when: false
@@ -32,22 +27,14 @@
- name: Cordon
kubernetes.core.k8s_drain:
name: "{% raw %}{{ inventory_hostname }}{% endraw %}"
{% if distribution.type in ["k3s"] %}
kubeconfig: /etc/rancher/k3s/k3s.yaml
{% elif distribution.type in ["k0s"] %}
kubeconfig: /var/lib/k0s/pki/admin.conf
{% endif %}
state: cordon
delegate_to: "{% raw %}{{ groups['master'][0] }}{% endraw %}"
- name: Drain
kubernetes.core.k8s_drain:
name: "{% raw %}{{ inventory_hostname }}{% endraw %}"
{% if distribution.type in ["k3s"] %}
kubeconfig: /etc/rancher/k3s/k3s.yaml
{% elif distribution.type in ["k0s"] %}
kubeconfig: /var/lib/k0s/pki/admin.conf
{% endif %}
state: drain
delete_options:
delete_emptydir_data: true
@@ -78,10 +65,6 @@
- name: Uncordon
kubernetes.core.k8s_drain:
name: "{% raw %}{{ inventory_hostname }}{% endraw %}"
{% if distribution.type in ["k3s"] %}
kubeconfig: /etc/rancher/k3s/k3s.yaml
{% elif distribution.type in ["k0s"] %}
kubeconfig: /var/lib/k0s/pki/admin.conf
{% endif %}
state: uncordon
delegate_to: "{% raw %}{{ groups['master'][0] }}{% endraw %}"
@@ -1 +0,0 @@
main = lambda data: data.get("distribution", {}).get("type", "k3s") in ["k3s"]
@@ -1 +0,0 @@
main = lambda data: data.get("distribution", {}).get("type", "k3s") in ["k3s"]
@@ -1,5 +1,4 @@
---
# https://docs.k3s.io/helm
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
@@ -1,4 +1,3 @@
# Ansible
ansible-lint==6.22.2
ansible==9.2.0
jmespath==1.0.1
@@ -8,9 +8,7 @@ collections:
version: 8.3.0
- name: kubernetes.core
version: 3.0.0
{% if distribution.type in ["k3s"] %}
roles:
- name: xanmanning.k3s
src: https://github.com/PyratLabs/ansible-role-k3s
version: v3.4.4
{% endif %}
@@ -8,7 +8,7 @@ resources:
- ./kubelet-csr-approver/ks.yaml
{% endif %}
- ./metrics-server/ks.yaml
{% if distribution.type in ["k0s", "talos"] %}
{% if distribution.type in ["talos"] %}
- ./spegel/ks.yaml
{% endif %}
- ./reloader/ks.yaml
@@ -1 +1 @@
main = lambda data: data.get("distribution", {}).get("type", "k3s") in ["k0s", "talos"]
main = lambda data: data.get("distribution", {}).get("type", "k3s") in ["talos"]
@@ -24,13 +24,8 @@ spec:
keepHistory: false
values:
spegel:
{% if distribution.type in ["k0s"] %}
containerdSock: /run/k0s/containerd.sock
containerdRegistryConfigPath: /var/lib/k0s/containerd/certs.d
{% elif distribution.type in ["talos"] %}
containerdSock: /run/containerd/containerd.sock
containerdRegistryConfigPath: /etc/cri/conf.d/hosts
{% endif %}
service:
registry:
hostPort: 29999
@@ -1 +0,0 @@
main = lambda data: data.get("distribution", {}).get("type", "k3s") in ["k0s"]
@@ -1,5 +0,0 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./plan.yaml
@@ -1,25 +0,0 @@
---
apiVersion: autopilot.k0sproject.io/v1beta2
kind: Plan
metadata:
name: autopilot
spec:
id: not-used
timestamp: not-used
commands:
- k0supdate:
version: "${KUBE_VERSION}"
platforms:
linux-amd64:
url: "https://get.k0sproject.io/${KUBE_VERSION}/k0s-${KUBE_VERSION}-amd64"
linux-arm64:
url: "https://get.k0sproject.io/${KUBE_VERSION}/k0s-${KUBE_VERSION}-arm64"
targets:
controllers:
discovery:
selector: {}
{% if nodes.inventory | selectattr('controller', 'equalto', False) | list | length %}
workers:
discovery:
selector: {}
{% endif %}
@@ -1,24 +0,0 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: &app system-upgrade-k0s
namespace: flux-system
spec:
targetNamespace: system-upgrade
commonMetadata:
labels:
app.kubernetes.io/name: *app
path: ./kubernetes/apps/system-upgrade/k0s/app
prune: true
sourceRef:
kind: GitRepository
name: home-kubernetes
wait: false
interval: 30m
retryInterval: 1m
timeout: 5m
postBuild:
substitute:
# renovate: datasource=github-releases depName=k0sproject/k0s
KUBE_VERSION: v1.29.1+k0s.0
@@ -6,9 +6,6 @@ resources:
{% if distribution.type in ['k3s', 'talos'] %}
- ./system-upgrade-controller/ks.yaml
{% endif %}
{% if distribution.type in ["k0s"] %}
- ./k0s/ks.yaml
{% endif %}
{% if distribution.type in ["k3s"] %}
- ./k3s/ks.yaml
{% endif %}
@@ -16,6 +16,6 @@ resources:
- ./postfinance.yaml
{% endif %}
- ./stakater.yaml
{% if distribution.type in ["k0s", "talos"] %}
{% if distribution.type in ["talos"] %}
- ./xenitab.yaml
{% endif %}
@@ -1,4 +1,4 @@
{% if distribution.type in ["k0s", "talos"] %}
{% if distribution.type in ["talos"] %}
---
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
@@ -1 +0,0 @@
main = lambda data: data.get("distribution", {}).get("type", "k3s") in ["k0s"]
@@ -1,97 +0,0 @@
---
apiVersion: k0sctl.k0sproject.io/v1beta1
kind: Cluster
metadata:
name: home-kubernetes
spec:
hosts:
{% for item in nodes.inventory %}
{% if item.controller %}
- role: controller+worker
{% else %}
- role: worker
{% endif %}
ssh:
address: "{{ item.address }}"
user: "{{ item.ssh_username }}"
installFlags:
{% if item.controller %}
- --disable-components=metrics-server
- --no-taints
{% endif %}
- --kubelet-extra-args="--image-gc-low-threshold=50 --image-gc-high-threshold=60"
files:
- name: bootstrap-scripts
src: scripts
hooks:
apply:
before:
- bash ~/apply-system.sh "{{ item.name }}"
{% if item.controller %}
- bash ~/apply-kube-vip.sh
{% endif %}
reset:
before:
- bash ~/reset-cilium.sh
after:
- bash ~/reset-system.sh
{% endfor %}
k0s:
# renovate: datasource=github-releases depName=k0sproject/k0s
version: v1.29.1+k0s.0
config:
apiVersion: k0s.k0sproject.io/v1beta1
kind: ClusterConfig
metadata:
name: home-kubernetes
spec:
telemetry:
enabled: false
controllerManager:
extraArgs:
bind-address: "0.0.0.0"
scheduler:
extraArgs:
bind-address: "0.0.0.0"
storage:
etcd:
extraArgs:
listen-metrics-urls: http://0.0.0.0:2381
api:
sans:
{% if cluster.endpoint_vip %}
- "{{ cluster.endpoint_vip }}"
{% endif %}
{% for item in cluster.tls_sans %}
- "{{ item }}"
{% endfor %}
{% for item in controllers %}
{% if item.controller %}
- "{{ item.address }}"
- "{{ item.name }}"
{% endif %}
{% endfor %}
network:
podCIDR: "{{ cluster.pod_network.split(',')[0] }}"
serviceCIDR: "{{ cluster.service_network.split(',')[0] }}"
provider: custom
kubeProxy:
disabled: true
nodeLocalLoadBalancing:
enabled: true
type: EnvoyProxy
extensions:
helm:
repositories:
- name: cilium
url: https://helm.cilium.io
charts:
- name: cilium
chartname: cilium/cilium
# renovate: datasource=helm depName=cilium repository=https://helm.cilium.io
version: 1.15.0
namespace: kube-system
values: |2
{% filter indent(width=18, first=True) %}
{% include 'partials/cilium-values-init.partial.yaml.j2' %}
{% endfilter %}
@@ -1,18 +0,0 @@
#!/usr/bin/env bash
set -e
set -o noglob
[ $(id -u) -eq 0 ] || exec sudo $0 $@
# Create kube-vip directory
mkdir -p /var/lib/k0s/manifests/kube-vip
# Create kube-vip rbac
cat <<EOF > /var/lib/k0s/manifests/kube-vip/rbac.yaml
{% include 'partials/kube-vip-rbac.partial.yaml.j2' %}
EOF
# Create kube-vip daemonset
cat <<EOF > /var/lib/k0s/manifests/kube-vip/ds.yaml
{% include 'partials/kube-vip-ds.partial.yaml.j2' %}
EOF
@@ -1,81 +0,0 @@
#!/usr/bin/env bash
set -e
set -o noglob
[ $(id -u) -eq 0 ] || exec sudo $0 $@
K0S_HOSTNAME="$1"
# Prepare
sudo apt-get update -y
# Hostname
if [ -n "${K0S_HOSTNAME}" ] && [ "$(hostnamectl hostname)" != "${K0S_HOSTNAME}" ]; then
hostnamectl set-hostname "${K0S_HOSTNAME}"
cat >/etc/hosts <<EOF
127.0.0.1 localhost
127.0.1.1 $K0S_HOSTNAME
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
EOF
fi
# Timezone
timedatectl set-timezone "{{ timezone }}"
# Install Packages
apt-get install -y --no-install-recommends \
apt-transport-https ca-certificates conntrack curl dirmngr gdisk gnupg hdparm htop \
iptables iputils-ping ipvsadm libseccomp2 lm-sensors net-tools nfs-common \
nvme-cli open-iscsi parted psmisc python3 python3-apt python3-kubernetes python3-yaml \
smartmontools socat software-properties-common unzip util-linux
# Update DNS
chattr -i /etc/resolv.conf
rm -f /etc/resolv.conf
cat <<EOF > /etc/resolv.conf
search {{ nodes.search_domain|default('.', true) }}
{% for item in nodes.dns_servers | default(['1.1.1.1', '1.0.0.1']) %}
nameserver {{ item }}
{% endfor %}
EOF
chattr +i /etc/resolv.conf
# Kernel Modules
for module in br_netfilter ceph ip_vs ip_vs_rr nbd overlay rbd; do
if ! test -f /etc/modules-load.d/$module.conf; then
echo $module > /etc/modules-load.d/$module.conf
fi
done
systemctl restart systemd-modules-load.service
# Sysctls
cat <<EOF > /etc/sysctl.d/99-kubernetes.conf
fs.inotify.max_queued_events = 65536
fs.inotify.max_user_watches = 524288
fs.inotify.max_user_instances = 8192
EOF
sysctl -p /etc/sysctl.d/99-kubernetes.conf
# Disable swap
swapoff -a
# Disable AppArmor
if systemctl is-enabled apparmor.service; then
systemctl mask apparmor.service
fi
# Create containerd config
mkdir -p /etc/k0s/containerd.d
cat <<EOF > /etc/k0s/containerd.d/default.toml
[plugins."io.containerd.grpc.v1.cri"]
enable_unprivileged_ports = true
enable_unprivileged_icmp = true
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = "/var/lib/k0s/containerd/certs.d"
[plugins."io.containerd.grpc.v1.cri".containerd]
discard_unpacked_layers = false
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
discard_unpacked_layers = false
EOF
@@ -1,40 +0,0 @@
#!/usr/bin/env bash
set -e
set -o noglob
[ $(id -u) -eq 0 ] || exec sudo $0 $@
remove_interfaces() {
ip link show 2>/dev/null | grep 'cilium' | while read ignore iface ignore; do
iface=${iface%%@*}
[ -z "$iface" ] || (ip link delete $iface || true)
done
}
reset_iptables() {
iptables -t nat -F
iptables -t mangle -F
iptables -t filter -F
iptables -t raw -F
iptables -X
ip6tables -t nat -F
ip6tables -t mangle -F
ip6tables -t filter -F
ip6tables -t raw -F
ip6tables -X
}
do_unmount_and_remove() {
set +x
while read -r _ path _; do
case "$path" in $1*) echo "$path" ;; esac
done < /proc/self/mounts | sort -r | xargs -r -t -n 1 sh -c 'umount -f "$0" && rm -rf "$0"'
set -x
}
do_unmount_and_remove '/run/netns/cni-'
ip netns show 2>/dev/null | grep cni- | xargs -r -t -n 1 ip netns delete
remove_interfaces
reset_iptables
rm -rf /var/lib/cni
rm -rf /etc/cni/net.d
@@ -1,14 +0,0 @@
#!/usr/bin/env bash
set -e
set -o noglob
[ $(id -u) -eq 0 ] || exec sudo $0 $@
# Remove containerd config
rm -rf /etc/k0s/containerd.d
# Remove local storage data
rm -rf /var/openebs/local
# Reboot
(sleep 30 && systemctl reboot)&
@@ -8,8 +8,6 @@ containerRuntime:
integration: containerd
{% if distribution.type in ["k3s"] %}
socketPath: /var/run/k3s/containerd/containerd.sock
{% elif distribution.type in ["k0s"] %}
socketPath: /var/run/k0s/containerd.sock
{% endif %}
endpointRoutes:
enabled: true
@@ -63,9 +61,6 @@ ipv6:
{% if distribution.type in ["k3s"] %}
k8sServiceHost: 127.0.0.1
k8sServicePort: 6444
{% elif distribution.type in ["k0s"] %}
k8sServiceHost: localhost
k8sServicePort: 7443
{% elif distribution.type in ["talos"] %}
k8sServiceHost: 127.0.0.1
k8sServicePort: 7445
@@ -8,8 +8,6 @@ containerRuntime:
integration: containerd
{% if distribution.type in ["k3s"] %}
socketPath: /var/run/k3s/containerd/containerd.sock
{% elif distribution.type in ["k0s"] %}
socketPath: /var/run/k0s/containerd.sock
{% endif %}
endpointRoutes:
enabled: true
@@ -26,9 +24,6 @@ ipv6:
{% if distribution.type in ["k3s"] %}
k8sServiceHost: 127.0.0.1
k8sServicePort: 6444
{% elif distribution.type in ["k0s"] %}
k8sServiceHost: localhost
k8sServicePort: 7443
{% elif distribution.type in ["talos"] %}
k8sServiceHost: 127.0.0.1
k8sServicePort: 7445
+2 -2
View File
@@ -5,7 +5,7 @@
#
distribution:
# (Required) Distribution can either be k3s, k0s, or talos
# (Required) Distribution can either be k3s, or talos
type: k3s
# (Optional) Talos Specific Options
talos: {}
@@ -62,7 +62,7 @@ nodes:
# - name: "" # Name of the node (must match [a-z0-9-\.]+)
# address: "" # IP address of the node
# controller: true # (Required) Set to true if this is a controller node
# ssh_username: "" # (Required: k3s/k0s) SSH username of the node
# ssh_username: "" # (Required: k3s) SSH username of the node
# talos_disk_device: "" # (Required: Talos) Device path or serial number of the disk for this node
# ...