Skip to content

Instantly share code, notes, and snippets.

@rsmitty
Last active October 21, 2020 18:50
Show Gist options
  • Save rsmitty/11d5f05758d3077e0037c923a84cff31 to your computer and use it in GitHub Desktop.
Save rsmitty/11d5f05758d3077e0037c923a84cff31 to your computer and use it in GitHub Desktop.

Pre-setup

Create all docker mirrors

docker run -d -p 5000:5000 \
    -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
    --restart always \
    --name registry-docker.io registry:2.5

docker run -d -p 5001:5000 \
    -e REGISTRY_PROXY_REMOTEURL=https://k8s.gcr.io \
    --restart always \
    --name registry-k8s.gcr.io registry:2.5

docker run -d -p 5002:5000 \
    -e REGISTRY_PROXY_REMOTEURL=https://quay.io \
    --restart always \
    --name registry-quay.io registry:2.5

docker run -d -p 5003:5000 \
    -e REGISTRY_PROXY_REMOTEURL=https://gcr.io \
    --restart always \
    --name registry-gcr.io registry:2.5

docker run -d -p 5004:5000 \
    -e REGISTRY_PROXY_REMOTEURL=https://ghcr.io \
    --restart always \
    --name registry-ghcr.io registry:2.5

Build sfyra and talos prereqs

make clean
make sfyra talos-artifacts
chmod a+x _out/v0.7.0-alpha.7/talosctl-linux-amd64

Create cluster, add capi resources, and dummy servers

sudo -E ./_out/sfyra bootstrap cluster \
    --registry-mirrors docker.io=http://172.24.0.1:5000 \
    --registry-mirrors k8s.gcr.io=http://172.24.0.1:5001 \
    --registry-mirrors quay.io=http://172.24.0.1:5002 \
    --registry-mirrors gcr.io=http://172.24.0.1:5003 \
    --registry-mirrors ghcr.io=http://172.24.0.1:5004
sudo -E ./_out/sfyra bootstrap capi

Fetch kubeconfig

talosctl config nodes 172.24.0.2
talosctl kubeconfig bootstrap

Patch sidero controller manager to autoaccept servers

kubectl --kubeconfig bootstrap patch deploy -n sidero-system sidero-controller-manager --type='json' \
  -p='[{"op": "add", "path": "/spec/template/spec/containers/1/args/-", "value": "--auto-accept-servers=true"}]'

Create default env and serverclass

bash -c 'cat <<EOF | kubectl --kubeconfig bootstrap apply -f -
apiVersion: metal.sidero.dev/v1alpha1
kind: Environment
metadata:
  name: default
spec:
  kernel:
    url: "https://github.com/talos-systems/talos/releases/download/v0.7.0-alpha.7/vmlinuz-amd64"
    sha512: ""
    args:
      - initrd=initramfs.xz
      - page_poison=1
      - slab_nomerge
      - slub_debug=P
      - pti=on
      - random.trust_cpu=on
      - ima_template=ima-ng
      - ima_appraise=fix
      - ima_hash=sha512
      - console=tty0
      - console=ttyS0
      - console=ttyS1,115200n8
      - earlyprintk=ttyS1,115200n8
      - panic=30
      - printk.devkmsg=on
      - talos.platform=metal
      - talos.config=http://172.24.0.2:9091/configdata?uuid=
  initrd:
    url: "https://github.com/talos-systems/talos/releases/download/v0.7.0-alpha.7/initramfs-amd64.xz"
    sha512: ""
EOF'

bash -c 'cat <<EOF | kubectl --kubeconfig bootstrap apply -f -
apiVersion: metal.sidero.dev/v1alpha1
kind: ServerClass
metadata:
  name: default
spec:
  qualifiers:
    cpu:
      - manufacturer: QEMU
  configPatches:
    - op: replace
      path: /machine/install
      value:
        disk: /dev/vda
        image: ghcr.io/talos-systems/installer:v0.7.0-alpha.7
        bootloader: true
        wipe: false
        force: false
        extraKernelArgs:
          - console=ttyS0
    - op: add
      path: /machine/registries
      value:
        mirrors:
          docker.io:
            endpoints:
            - http://172.24.0.1:5000
          gcr.io:
            endpoints:
            - http://172.24.0.1:5003
          ghcr.io:
            endpoints:
            - http://172.24.0.1:5004
          k8s.gcr.io:
            endpoints:
            - http://172.24.0.1:5001
          quay.io:
            endpoints:
            - http://172.24.0.1:5002
EOF'

Create QEMU Servers

sudo -E ./_out/sfyra bootstrap servers

Demo

Show servers got added to serverclass

watch kubectl --kubeconfig bootstrap get servers

kubectl --kubeconfig bootstrap get serverclasses

Create loadbalancer (in another terminal)

sudo -E ./_out/sfyra loadbalancer create --kubeconfig bootstrap --load-balancer-port 10000 --cluster-name demo

Create workload cluster template and apply it

Zsh:

set -x CONTROL_PLANE_ENDPOINT 172.25.0.1
set -x CONTROL_PLANE_PORT 10000
set -x CONTROL_PLANE_SERVERCLASS default
set -x WORKER_SERVERCLASS default
set -x KUBERNETES_VERSION v1.19.3

Bash:

export CONTROL_PLANE_ENDPOINT=172.25.0.1
export CONTROL_PLANE_PORT=10000
export CONTROL_PLANE_SERVERCLASS=default
export WORKER_SERVERCLASS=default
export KUBERNETES_VERSION=v1.19.3
clusterctl config cluster demo -i sidero:v0.1.0-alpha.6 > demo.yaml
kubectl --kubeconfig bootstrap apply -f demo.yaml

Pull kubeconfig once server is "inUse"

kubectl --kubeconfig bootstrap get talosconfig -o yaml -l cluster.x-k8s.io/cluster-name=demo -o jsonpath='{.items[0].status.talosConfig}' >  demo-talosconfig
talosctl --talosconfig demo-talosconfig config endpoint xxx
talosctl --talosconfig demo-talosconfig config nodes xxx

talosctl --talosconfig demo-talosconfig kubeconfig demo-kubeconfig

Show Kubernetes

kubectl --kubeconfig demo-kubeconfig get nodes

Scale cluster

Scale Controlplane

kubectl --kubeconfig bootstrap scale taloscontrolplane demo-cp  --replicas=3

Scale Workers

kubectl --kubeconfig bootstrap scale machinedeployment demo-workers --replicas=1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment