Skip to content

Kubernetes

Setup node

Create a butane config file:

variant: fcos
version: 1.4.0
passwd:
  users:
  - name: core
    ssh_authorized_keys:
    - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO+YIUNEga6Q4KuVKO5wYoXAg4VtZqU/GLtPaA3tVgkJ sfe@SFE-X1N
boot_device:
  luks:
    tpm2: true
storage:
  disks:
    - device: /dev/nvme1n1
      wipe_table: true
      partitions:
        - number: 1
          size_mib: 204800
        - number: 2
  files:
  - path: /etc/selinux/config
    overwrite: true
    contents:
      inline: |
        SELINUX=permissive
        SELINUXTYPE=targeted
  - path: /etc/sysctl.d/90-kubelet.conf
    contents:
      inline: |
        vm.panic_on_oom=0
        vm.overcommit_memory=1
        kernel.panic=10
        kernel.panic_on_oops=1
        kernel.keys.root_maxbytes=25000000
  - path: /etc/zincati/config.d/55-updates-strategy.toml
    contents:
      inline: |
        [updates]
        strategy = "fleet_lock"
        [updates.fleet_lock]
        base_url = "http://10.43.0.11/"

Setup K3s

Create config gile:

tls-san:
- api.farm.tegridy.io
- 10.10.10.100
- 10.10.10.101
- 10.10.10.102
- 10.10.10.103
- 127.0.0.1
flannel-backend: none
disable:
- coredns
- servicelb
- traefik
- local-storage
- metrics-server
disable-cloud-controller: true
disable-kube-proxy: true
etcd-snapshot-schedule-cron: "0 5 * * *"
etcd-snapshot-retention: 30
etcd-s3: true
etcd-s3-region: eu-central-1
etcd-s3-bucket: tegridy-barn-kitten-etcd-snapshot
etcd-s3-access-key: <REDACTED>
etcd-s3-secret-key: <REDACTED>
kube-apiserver-arg:
- --enable-admission-plugins=NodeRestriction,PodSecurity,ServiceAccount
- --admission-control-config-file=/etc/rancher/k3s/podsecurity.yaml
- --oidc-issuer-url=https://issuer.zitadel.ch
- --oidc-client-id=181462379698187675@tegridy-farm
- --oidc-username-claim=email

Install on first master

curl -sfL https://get.k3s.io | sh -s - server --cluster-init

Install on other masters

curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - server

OAuth

barn-kitten-api

Settings: * PKCE * User roles inside ID Token * User Info inside ID Token

issuer url: https://issuer.zitadel.ch client id: 181462379698187675@tegridy-farm

k oidc-login get-token --oidc-issuer-url=https://issuer.zitadel.ch --oidc-client-id=181462379698187675@tegridy-farm --oidc-extra-scope=email,profile
{
  iss https://issuer.zitadel.ch
  aud
     181462379698187675@tegridy-farm
     178194089269848884
  azp 181462379698187675@tegridy-farm
  nonce 4mHtJ-A1areFW88VFJPNaZmJOy7_SRCrqBsw_4-5ftU
  at_hash 5w45l3dljf-x9Nfxtgu1Cg
  c_hash H2TXPZ4pBB6d064eDmdX6Q
  amr
     password
     mfa
     otp
  exp 1664702179
  iat 1664658979
  auth_time 1664655900
  email do@tegridy.io
  email_verified true
  family_name Orakel
  gender male
  given_name Debakel
  locale en
  name Debakel Orakel
  preferred_username do@tegridy.zitadel.ch
  sub 163761476539114158
  updated_at 1664142457
  urn:zitadel:iam:org:project:roles
    barn-kitten-api
      163761476539048622 tegridy.zitadel.ch
}

Troubleshoot

#!/bin/bash

sgdisk --zap-all /dev/sda
dd if=/dev/zero of=/dev/sda bs=1M count=100 oflag=direct,dsync
blkdiscard /dev/sda

sgdisk --zap-all /dev/sdb
dd if=/dev/zero of=/dev/sdb bs=1M count=100 oflag=direct,dsync
blkdiscard /dev/sdb

sgdisk --zap-all /dev/nvme1n1
dd if=/dev/zero of=/dev/nvme1n1 bs=1M count=100 oflag=direct,dsync
blkdiscard /dev/nvme1n1

StorageClass Performance

TopoLVM nvme

==================
= Dbench Summary =
==================
Random Read/Write IOPS: 351k/250k. BW: 1378MiB/s / 2197MiB/s
Average Latency (usec) Read/Write: 58.45/17.75
Sequential Read/Write: 3007MiB/s / 2581MiB/s
Mixed Random Read/Write IOPS: 236k/78.6k