feat(k0s): unsupport it (#1291)
Signed-off-by: Devin Buhl <devin@buhl.casa>
This commit is contained in:
1 parent
3e0fb233b6
commit
eab63476b7
48 files changed
+22
-505
No files matched your search
@@ -25,7 +25,6 @@ for app in \
|
|||||||
"FiloSottile/age!!?as=age&type=script" \
|
"FiloSottile/age!!?as=age&type=script" \
|
||||||
"fluxcd/flux2!!?as=flux&type=script" \
|
"fluxcd/flux2!!?as=flux&type=script" \
|
||||||
"go-task/task!!?as=task&type=script" \
|
"go-task/task!!?as=task&type=script" \
|
||||||
"k0sproject/k0sctl!!?as=k0sctl&type=script" \
|
|
||||||
"kubecolor/kubecolor!!?as=kubecolor&type=script" \
|
"kubecolor/kubecolor!!?as=kubecolor&type=script" \
|
||||||
"kubernetes-sigs/krew!!?as=krew&type=script" \
|
"kubernetes-sigs/krew!!?as=krew&type=script" \
|
||||||
"kubernetes-sigs/kustomize!!?as=kustomize&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
|
$tool completion fish > /home/vscode/.config/fish/completions/$tool.fish
|
||||||
done
|
done
|
||||||
gh completion --shell fish > /home/vscode/.config/fish/completions/gh.fish
|
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
|
stern --completion fish > /home/vscode/.config/fish/completions/stern.fish
|
||||||
yq shell-completion fish > /home/vscode/.config/fish/completions/yq.fish
|
yq shell-completion fish > /home/vscode/.config/fish/completions/yq.fish
|
||||||
|
|
||||||
|
|||||||
@@ -12,9 +12,6 @@ export ANSIBLE_VARS_ENABLED="host_group_vars"
|
|||||||
export ANSIBLE_LOCALHOST_WARNING="False"
|
export ANSIBLE_LOCALHOST_WARNING="False"
|
||||||
export ANSIBLE_INVENTORY_UNPARSED_WARNING="False"
|
export ANSIBLE_INVENTORY_UNPARSED_WARNING="False"
|
||||||
export K8S_AUTH_KUBECONFIG="$(expand_path ./kubeconfig)"
|
export K8S_AUTH_KUBECONFIG="$(expand_path ./kubeconfig)"
|
||||||
# k0s
|
|
||||||
export DISABLE_TELEMETRY="true"
|
|
||||||
export DISABLE_UPGRADE_CHECK="true"
|
|
||||||
# Talos
|
# Talos
|
||||||
export TALOSCONFIG="$(expand_path ./kubernetes/talos/clusterconfig/talosconfig)"
|
export TALOSCONFIG="$(expand_path ./kubernetes/talos/clusterconfig/talosconfig)"
|
||||||
# Bin
|
# Bin
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
- { name: "area/kubernetes", color: "0e8a16" }
|
- { name: "area/kubernetes", color: "0e8a16" }
|
||||||
- { name: "area/taskfile", color: "0e8a16" }
|
- { name: "area/taskfile", color: "0e8a16" }
|
||||||
# Distro
|
# Distro
|
||||||
- { name: "distro/k0s", color: "ffc300" }
|
|
||||||
- { name: "distro/k3s", color: "ffc300" }
|
- { name: "distro/k3s", color: "ffc300" }
|
||||||
- { name: "distro/talos", color: "ffc300" }
|
- { name: "distro/talos", color: "ffc300" }
|
||||||
# Renovate
|
# Renovate
|
||||||
|
|||||||
@@ -75,10 +75,10 @@
|
|||||||
},
|
},
|
||||||
// custom versioning
|
// custom versioning
|
||||||
{
|
{
|
||||||
"description": ["Use custom versioning for k0s/k3s"],
|
"description": ["Use custom versioning for k3s"],
|
||||||
"matchDatasources": ["github-releases"],
|
"matchDatasources": ["github-releases"],
|
||||||
"versioning": "regex:^v(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)(?<compatibility>\\+k.s)\\.?(?<build>\\d+)$",
|
"versioning": "regex:^v(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)(?<compatibility>\\+k.s)\\.?(?<build>\\d+)$",
|
||||||
"matchPackagePatterns": ["k0s", "k3s"]
|
"matchPackagePatterns": ["k3s"]
|
||||||
},
|
},
|
||||||
// commit message topics
|
// commit message topics
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
|
||||||
@@ -19,7 +19,6 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
config-files:
|
config-files:
|
||||||
- k0s
|
|
||||||
- k3s-ipv4
|
- k3s-ipv4
|
||||||
- k3s-ipv6
|
- k3s-ipv6
|
||||||
- talos
|
- talos
|
||||||
@@ -94,7 +93,7 @@ jobs:
|
|||||||
task talos:genconfig
|
task talos:genconfig
|
||||||
|
|
||||||
- name: Run Ansible tasks
|
- name: Run Ansible tasks
|
||||||
if: ${{ startsWith(matrix.config-files, 'k0s') || startsWith(matrix.config-files, 'k3s') }}
|
if: ${{ startsWith(matrix.config-files, 'k3s') }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
task ansible:deps force=false
|
task ansible:deps force=false
|
||||||
|
|||||||
@@ -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}}
|
|
||||||
@@ -25,7 +25,6 @@ tasks:
|
|||||||
prompt: Reset templated configuration files... continue?
|
prompt: Reset templated configuration files... continue?
|
||||||
cmds:
|
cmds:
|
||||||
- task: :ansible:.reset
|
- task: :ansible:.reset
|
||||||
- task: :k0s:.reset
|
|
||||||
- task: :kubernetes:.reset
|
- task: :kubernetes:.reset
|
||||||
- task: :sops:.reset
|
- task: :sops:.reset
|
||||||
- task: :talos:.reset
|
- task: :talos:.reset
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ go-task
|
|||||||
go-yq
|
go-yq
|
||||||
helm
|
helm
|
||||||
jq
|
jq
|
||||||
k0sctl-bin
|
|
||||||
kubeconform
|
kubeconform
|
||||||
kubectl-bin
|
kubectl-bin
|
||||||
kustomize
|
kustomize
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
tap "fluxcd/tap"
|
tap "fluxcd/tap"
|
||||||
tap "go-task/tap"
|
tap "go-task/tap"
|
||||||
tap "k0sproject/tap"
|
|
||||||
tap "siderolabs/talos"
|
tap "siderolabs/talos"
|
||||||
brew "age"
|
brew "age"
|
||||||
brew "cloudflared"
|
brew "cloudflared"
|
||||||
@@ -9,7 +8,6 @@ brew "fluxcd/tap/flux"
|
|||||||
brew "go-task/tap/go-task"
|
brew "go-task/tap/go-task"
|
||||||
brew "helm"
|
brew "helm"
|
||||||
brew "jq"
|
brew "jq"
|
||||||
brew "k0sproject/tap/k0sctl"
|
|
||||||
brew "kubeconform"
|
brew "kubeconform"
|
||||||
brew "kubernetes-cli"
|
brew "kubernetes-cli"
|
||||||
brew "kustomize"
|
brew "kustomize"
|
||||||
|
|||||||
@@ -57,7 +57,6 @@ tasks:
|
|||||||
- fluxcd/flux2?as=flux&type=script
|
- fluxcd/flux2?as=flux&type=script
|
||||||
- getsops/sops?as=sops&type=script
|
- getsops/sops?as=sops&type=script
|
||||||
- jqlang/jq?as=jq&type=script
|
- jqlang/jq?as=jq&type=script
|
||||||
- k0sproject/k0sctl?as=k0sctl&type=script
|
|
||||||
- kubernetes-sigs/kustomize?as=kustomize&type=script
|
- kubernetes-sigs/kustomize?as=kustomize&type=script
|
||||||
- siderolabs/talos?as=talosctl&type=script
|
- siderolabs/talos?as=talosctl&type=script
|
||||||
- yannh/kubeconform?as=kubeconform&type=script
|
- yannh/kubeconform?as=kubeconform&type=script
|
||||||
|
|||||||
@@ -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.
|
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/).
|
- **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.
|
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
|
## 💻 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
|
### System requirements
|
||||||
|
|
||||||
> [!NOTE]
|
> [!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.
|
> 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).
|
> 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)
|
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:
|
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
|
chmod 600 ~/.ssh/authorized_keys
|
||||||
```
|
```
|
||||||
|
|
||||||
### k3s or k0s (RasPi4)
|
### k3s (RasPi4)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><i>Click <b>here</b> to read about using a RasPi4</i></summary>
|
<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}`
|
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.
|
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
|
### ⚡ Stage 4: Prepare your nodes for Kubernetes
|
||||||
|
|
||||||
> [!NOTE]
|
> [!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
|
#### k3s
|
||||||
|
|
||||||
@@ -309,15 +309,13 @@ You have two different options for setting up your local workstation.
|
|||||||
task talos:apply-extras
|
task talos:apply-extras
|
||||||
```
|
```
|
||||||
|
|
||||||
#### k3s or k0s
|
#### k3s
|
||||||
|
|
||||||
1. Install Kubernetes depending on the distribution you chose
|
1. Install Kubernetes depending on the distribution you chose
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# Install k3s
|
# Install k3s
|
||||||
task ansible:run playbook=cluster-installation
|
task ansible:run playbook=cluster-installation
|
||||||
# or, install k0s
|
|
||||||
task k0s:apply
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Cluster validation
|
#### Cluster validation
|
||||||
@@ -452,8 +450,6 @@ There might be a situation where you want to destroy your Kubernetes cluster. Th
|
|||||||
```sh
|
```sh
|
||||||
# Nuke k3s
|
# Nuke k3s
|
||||||
task ansible:run playbook=cluster-nuke
|
task ansible:run playbook=cluster-nuke
|
||||||
# or, Nuke k0s
|
|
||||||
task k0s:reset
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 🤖 Renovate
|
## 🤖 Renovate
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ includes:
|
|||||||
aliases: ["k8s"]
|
aliases: ["k8s"]
|
||||||
taskfile: .taskfiles/Kubernetes/Taskfile.yaml
|
taskfile: .taskfiles/Kubernetes/Taskfile.yaml
|
||||||
flux: .taskfiles/Flux/Taskfile.yaml
|
flux: .taskfiles/Flux/Taskfile.yaml
|
||||||
k0s: .taskfiles/K0s/Taskfile.yaml
|
|
||||||
repository:
|
repository:
|
||||||
aliases: ["repo"]
|
aliases: ["repo"]
|
||||||
taskfile: .taskfiles/Repository/Taskfile.yaml
|
taskfile: .taskfiles/Repository/Taskfile.yaml
|
||||||
|
|||||||
@@ -5,10 +5,9 @@ from zoneinfo import available_timezones
|
|||||||
import netaddr
|
import netaddr
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
DISTRIBUTIONS = ["k0s", "k3s", "talos"]
|
DISTRIBUTIONS = ["k3s", "talos"]
|
||||||
GLOBAL_CLI_TOOLS = ["age", "cloudflared", "flux", "sops", "jq", "kubeconform", "kustomize"]
|
GLOBAL_CLI_TOOLS = ["age", "cloudflared", "flux", "sops", "jq", "kubeconform", "kustomize"]
|
||||||
TALOS_CLI_TOOLS = ["talosctl", "talhelper"]
|
TALOS_CLI_TOOLS = ["talosctl", "talhelper"]
|
||||||
K0S_CLI_TOOLS = ["k0sctl"]
|
|
||||||
|
|
||||||
def required(*keys: str):
|
def required(*keys: str):
|
||||||
def wrapper_outter(func: Callable):
|
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 []:
|
for tool in TALOS_CLI_TOOLS if distribution in ["talos"] else []:
|
||||||
if not which(tool):
|
if not which(tool):
|
||||||
raise ValueError(f"Missing required CLI tool {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")
|
@required("distribution")
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ creation_rules:
|
|||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
- "{{ flux.sops_age_public_key }}"
|
- "{{ flux.sops_age_public_key }}"
|
||||||
{% if distribution.type in ["k0s", "k3s"] %}
|
{% if distribution.type in ["k3s"] %}
|
||||||
- path_regex: ansible/.*\.sops\.ya?ml
|
- path_regex: ansible/.*\.sops\.ya?ml
|
||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
|
|||||||
@@ -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
|
- name: Cluster Installation
|
||||||
hosts: kubernetes
|
hosts: kubernetes
|
||||||
@@ -59,4 +58,3 @@
|
|||||||
- name: Cruft
|
- name: Cruft
|
||||||
when: k3s_primary_control_node
|
when: k3s_primary_control_node
|
||||||
ansible.builtin.include_tasks: tasks/cruft.yaml
|
ansible.builtin.include_tasks: tasks/cruft.yaml
|
||||||
{% endif %}
|
|
||||||
@@ -10,20 +10,15 @@
|
|||||||
ansible.builtin.pause:
|
ansible.builtin.pause:
|
||||||
seconds: 5
|
seconds: 5
|
||||||
tasks:
|
tasks:
|
||||||
{% if distribution.type in ["k3s"] %}
|
|
||||||
- name: Ensure Kubernetes is running
|
- name: Ensure Kubernetes is running
|
||||||
ansible.builtin.include_role:
|
ansible.builtin.include_role:
|
||||||
name: xanmanning.k3s
|
name: xanmanning.k3s
|
||||||
public: true
|
public: true
|
||||||
vars:
|
vars:
|
||||||
k3s_state: started
|
k3s_state: started
|
||||||
{% endif %}
|
|
||||||
- name: Upgrade kube-vip
|
- name: Upgrade kube-vip
|
||||||
ansible.builtin.template:
|
ansible.builtin.template:
|
||||||
src: templates/kube-vip-ds.yaml.j2
|
src: templates/kube-vip-ds.yaml.j2
|
||||||
{% if distribution.type in ["k3s"] %}
|
|
||||||
dest: "{% raw %}{{ k3s_server_manifests_dir }}{% endraw %}/kube-vip-ds.yaml"
|
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
|
mode: preserve
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
{% if distribution.type in ["k3s"] %}
|
|
||||||
---
|
---
|
||||||
- name: Cluster Nuke
|
- name: Cluster Nuke
|
||||||
hosts: kubernetes
|
hosts: kubernetes
|
||||||
@@ -100,4 +99,3 @@
|
|||||||
ansible.builtin.reboot:
|
ansible.builtin.reboot:
|
||||||
msg: Rebooting hosts
|
msg: Rebooting hosts
|
||||||
reboot_timeout: 3600
|
reboot_timeout: 3600
|
||||||
{% endif %}
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
{% if distribution.type in ["k3s"] %}
|
|
||||||
---
|
---
|
||||||
- name: Prepare System
|
- name: Prepare System
|
||||||
hosts: kubernetes
|
hosts: kubernetes
|
||||||
@@ -112,4 +111,3 @@
|
|||||||
ansible.builtin.reboot:
|
ansible.builtin.reboot:
|
||||||
msg: Rebooting hosts
|
msg: Rebooting hosts
|
||||||
reboot_timeout: 3600
|
reboot_timeout: 3600
|
||||||
{% endif %}
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
---
|
---
|
||||||
# https://github.com/kevincoakley/ansible-role-k8s-rolling-update
|
|
||||||
- name: Cluster rollout update
|
- name: Cluster rollout update
|
||||||
hosts: kubernetes
|
hosts: kubernetes
|
||||||
become: true
|
become: true
|
||||||
@@ -12,11 +11,7 @@
|
|||||||
seconds: 5
|
seconds: 5
|
||||||
tasks:
|
tasks:
|
||||||
- name: Details
|
- name: Details
|
||||||
{% if distribution.type in ["k3s"] %}
|
|
||||||
ansible.builtin.command: "k3s kubectl get node {% raw %}{{ inventory_hostname }}{% endraw %} -o json"
|
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
|
register: kubectl_get_node
|
||||||
delegate_to: "{% raw %}{{ groups['master'][0] }}{% endraw %}"
|
delegate_to: "{% raw %}{{ groups['master'][0] }}{% endraw %}"
|
||||||
failed_when: false
|
failed_when: false
|
||||||
@@ -32,22 +27,14 @@
|
|||||||
- name: Cordon
|
- name: Cordon
|
||||||
kubernetes.core.k8s_drain:
|
kubernetes.core.k8s_drain:
|
||||||
name: "{% raw %}{{ inventory_hostname }}{% endraw %}"
|
name: "{% raw %}{{ inventory_hostname }}{% endraw %}"
|
||||||
{% if distribution.type in ["k3s"] %}
|
|
||||||
kubeconfig: /etc/rancher/k3s/k3s.yaml
|
kubeconfig: /etc/rancher/k3s/k3s.yaml
|
||||||
{% elif distribution.type in ["k0s"] %}
|
|
||||||
kubeconfig: /var/lib/k0s/pki/admin.conf
|
|
||||||
{% endif %}
|
|
||||||
state: cordon
|
state: cordon
|
||||||
delegate_to: "{% raw %}{{ groups['master'][0] }}{% endraw %}"
|
delegate_to: "{% raw %}{{ groups['master'][0] }}{% endraw %}"
|
||||||
|
|
||||||
- name: Drain
|
- name: Drain
|
||||||
kubernetes.core.k8s_drain:
|
kubernetes.core.k8s_drain:
|
||||||
name: "{% raw %}{{ inventory_hostname }}{% endraw %}"
|
name: "{% raw %}{{ inventory_hostname }}{% endraw %}"
|
||||||
{% if distribution.type in ["k3s"] %}
|
|
||||||
kubeconfig: /etc/rancher/k3s/k3s.yaml
|
kubeconfig: /etc/rancher/k3s/k3s.yaml
|
||||||
{% elif distribution.type in ["k0s"] %}
|
|
||||||
kubeconfig: /var/lib/k0s/pki/admin.conf
|
|
||||||
{% endif %}
|
|
||||||
state: drain
|
state: drain
|
||||||
delete_options:
|
delete_options:
|
||||||
delete_emptydir_data: true
|
delete_emptydir_data: true
|
||||||
@@ -78,10 +65,6 @@
|
|||||||
- name: Uncordon
|
- name: Uncordon
|
||||||
kubernetes.core.k8s_drain:
|
kubernetes.core.k8s_drain:
|
||||||
name: "{% raw %}{{ inventory_hostname }}{% endraw %}"
|
name: "{% raw %}{{ inventory_hostname }}{% endraw %}"
|
||||||
{% if distribution.type in ["k3s"] %}
|
|
||||||
kubeconfig: /etc/rancher/k3s/k3s.yaml
|
kubeconfig: /etc/rancher/k3s/k3s.yaml
|
||||||
{% elif distribution.type in ["k0s"] %}
|
|
||||||
kubeconfig: /var/lib/k0s/pki/admin.conf
|
|
||||||
{% endif %}
|
|
||||||
state: uncordon
|
state: uncordon
|
||||||
delegate_to: "{% raw %}{{ groups['master'][0] }}{% endraw %}"
|
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
|
apiVersion: helm.cattle.io/v1
|
||||||
kind: HelmChart
|
kind: HelmChart
|
||||||
metadata:
|
metadata:
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
# Ansible
|
|
||||||
ansible-lint==6.22.2
|
ansible-lint==6.22.2
|
||||||
ansible==9.2.0
|
ansible==9.2.0
|
||||||
jmespath==1.0.1
|
jmespath==1.0.1
|
||||||
|
|||||||
@@ -8,9 +8,7 @@ collections:
|
|||||||
version: 8.3.0
|
version: 8.3.0
|
||||||
- name: kubernetes.core
|
- name: kubernetes.core
|
||||||
version: 3.0.0
|
version: 3.0.0
|
||||||
{% if distribution.type in ["k3s"] %}
|
|
||||||
roles:
|
roles:
|
||||||
- name: xanmanning.k3s
|
- name: xanmanning.k3s
|
||||||
src: https://github.com/PyratLabs/ansible-role-k3s
|
src: https://github.com/PyratLabs/ansible-role-k3s
|
||||||
version: v3.4.4
|
version: v3.4.4
|
||||||
{% endif %}
|
|
||||||
@@ -8,7 +8,7 @@ resources:
|
|||||||
- ./kubelet-csr-approver/ks.yaml
|
- ./kubelet-csr-approver/ks.yaml
|
||||||
{% endif %}
|
{% endif %}
|
||||||
- ./metrics-server/ks.yaml
|
- ./metrics-server/ks.yaml
|
||||||
{% if distribution.type in ["k0s", "talos"] %}
|
{% if distribution.type in ["talos"] %}
|
||||||
- ./spegel/ks.yaml
|
- ./spegel/ks.yaml
|
||||||
{% endif %}
|
{% endif %}
|
||||||
- ./reloader/ks.yaml
|
- ./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
|
keepHistory: false
|
||||||
values:
|
values:
|
||||||
spegel:
|
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
|
containerdSock: /run/containerd/containerd.sock
|
||||||
containerdRegistryConfigPath: /etc/cri/conf.d/hosts
|
containerdRegistryConfigPath: /etc/cri/conf.d/hosts
|
||||||
{% endif %}
|
|
||||||
service:
|
service:
|
||||||
registry:
|
registry:
|
||||||
hostPort: 29999
|
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'] %}
|
{% if distribution.type in ['k3s', 'talos'] %}
|
||||||
- ./system-upgrade-controller/ks.yaml
|
- ./system-upgrade-controller/ks.yaml
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if distribution.type in ["k0s"] %}
|
|
||||||
- ./k0s/ks.yaml
|
|
||||||
{% endif %}
|
|
||||||
{% if distribution.type in ["k3s"] %}
|
{% if distribution.type in ["k3s"] %}
|
||||||
- ./k3s/ks.yaml
|
- ./k3s/ks.yaml
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -16,6 +16,6 @@ resources:
|
|||||||
- ./postfinance.yaml
|
- ./postfinance.yaml
|
||||||
{% endif %}
|
{% endif %}
|
||||||
- ./stakater.yaml
|
- ./stakater.yaml
|
||||||
{% if distribution.type in ["k0s", "talos"] %}
|
{% if distribution.type in ["talos"] %}
|
||||||
- ./xenitab.yaml
|
- ./xenitab.yaml
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
{% if distribution.type in ["k0s", "talos"] %}
|
{% if distribution.type in ["talos"] %}
|
||||||
---
|
---
|
||||||
apiVersion: source.toolkit.fluxcd.io/v1beta2
|
apiVersion: source.toolkit.fluxcd.io/v1beta2
|
||||||
kind: HelmRepository
|
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
|
integration: containerd
|
||||||
{% if distribution.type in ["k3s"] %}
|
{% if distribution.type in ["k3s"] %}
|
||||||
socketPath: /var/run/k3s/containerd/containerd.sock
|
socketPath: /var/run/k3s/containerd/containerd.sock
|
||||||
{% elif distribution.type in ["k0s"] %}
|
|
||||||
socketPath: /var/run/k0s/containerd.sock
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
endpointRoutes:
|
endpointRoutes:
|
||||||
enabled: true
|
enabled: true
|
||||||
@@ -63,9 +61,6 @@ ipv6:
|
|||||||
{% if distribution.type in ["k3s"] %}
|
{% if distribution.type in ["k3s"] %}
|
||||||
k8sServiceHost: 127.0.0.1
|
k8sServiceHost: 127.0.0.1
|
||||||
k8sServicePort: 6444
|
k8sServicePort: 6444
|
||||||
{% elif distribution.type in ["k0s"] %}
|
|
||||||
k8sServiceHost: localhost
|
|
||||||
k8sServicePort: 7443
|
|
||||||
{% elif distribution.type in ["talos"] %}
|
{% elif distribution.type in ["talos"] %}
|
||||||
k8sServiceHost: 127.0.0.1
|
k8sServiceHost: 127.0.0.1
|
||||||
k8sServicePort: 7445
|
k8sServicePort: 7445
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ containerRuntime:
|
|||||||
integration: containerd
|
integration: containerd
|
||||||
{% if distribution.type in ["k3s"] %}
|
{% if distribution.type in ["k3s"] %}
|
||||||
socketPath: /var/run/k3s/containerd/containerd.sock
|
socketPath: /var/run/k3s/containerd/containerd.sock
|
||||||
{% elif distribution.type in ["k0s"] %}
|
|
||||||
socketPath: /var/run/k0s/containerd.sock
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
endpointRoutes:
|
endpointRoutes:
|
||||||
enabled: true
|
enabled: true
|
||||||
@@ -26,9 +24,6 @@ ipv6:
|
|||||||
{% if distribution.type in ["k3s"] %}
|
{% if distribution.type in ["k3s"] %}
|
||||||
k8sServiceHost: 127.0.0.1
|
k8sServiceHost: 127.0.0.1
|
||||||
k8sServicePort: 6444
|
k8sServicePort: 6444
|
||||||
{% elif distribution.type in ["k0s"] %}
|
|
||||||
k8sServiceHost: localhost
|
|
||||||
k8sServicePort: 7443
|
|
||||||
{% elif distribution.type in ["talos"] %}
|
{% elif distribution.type in ["talos"] %}
|
||||||
k8sServiceHost: 127.0.0.1
|
k8sServiceHost: 127.0.0.1
|
||||||
k8sServicePort: 7445
|
k8sServicePort: 7445
|
||||||
|
|||||||
+2
-2
@@ -5,7 +5,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
distribution:
|
distribution:
|
||||||
# (Required) Distribution can either be k3s, k0s, or talos
|
# (Required) Distribution can either be k3s, or talos
|
||||||
type: k3s
|
type: k3s
|
||||||
# (Optional) Talos Specific Options
|
# (Optional) Talos Specific Options
|
||||||
talos: {}
|
talos: {}
|
||||||
@@ -62,7 +62,7 @@ nodes:
|
|||||||
# - name: "" # Name of the node (must match [a-z0-9-\.]+)
|
# - name: "" # Name of the node (must match [a-z0-9-\.]+)
|
||||||
# address: "" # IP address of the node
|
# address: "" # IP address of the node
|
||||||
# controller: true # (Required) Set to true if this is a controller 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
|
# talos_disk_device: "" # (Required: Talos) Device path or serial number of the disk for this node
|
||||||
# ...
|
# ...
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user