K3s Fedora Setup

This doc will go over installing Fedora 36 and setting up k3s

Fedora 36 Server ISO Download Link

# Install Script

Upgrade using dnf or yum

1sudo dnf update
2
3sudo dnf upgrade -y
4
5sudo yum update
6
7sudo yum upgrade -y

Script

 1#!/bin/bash
 2
 3
 4#################################################################################
 5########################### Set Vars ############################################
 6#################################################################################
 7k3s_ip=set IP
 8k3s_user=set User
 9
10#################################################################################
11###########################  Script  ############################################
12#################################################################################
13sudo yum update -y
14sudo yum upgrade -y
15sudo yum install neovim -y
16sudo yum install neofetch -y
17sudo dnf install util-linux-user -y
18
19sudo apt-get install openssh-server -y
20ssh-keygen -t ed25519 -C "${k3s_user} ${HOSTNAME}"
21eval $(ssh-agent -s)
22ssh-add ~/.ssh/id_ed25519
23
24
25if [ ${HOSTNAME} == "k3s-server-0" ]
26then
27  curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.24.4+k3s1 sh -s - server \
28    --disable servicelb \  #This is needed for metallb
29    --disable traefik \    #Setting up our own traefik 
30    --write-kubeconfig-mode 644 \
31    --kube-controller-manager-arg bind-address=0.0.0.0 \
32    --kube-proxy-arg metrics-bind-address=0.0.0.0 \
33    --kube-scheduler-arg bind-address=0.0.0.0 \
34    --etcd-expose-metrics true \ 
35    --kube-apiserver-arg default-not-ready-toleration-seconds=30 \
36    --kube-apiserver-arg default-unreachable-toleration-seconds=30 \
37    --kube-controller-arg node-monitor-period=20s \
38    --kube-controller-arg node-monitor-grace-period=20s \
39    --kubelet-arg containerd=/run/k3s/containerd/containerd.sock \
40    --kubelet-arg node-status-update-frequency=5s
41
42  sudo cp /var/lib/rancher/k3s/server/node-token ~/node-token
43  sudo cat /etc/rancher/k3s/k3s.yaml > ~/config
44  sudo chmod 644 ~/node-token
45  echo
46  echo
47  echo "${HOSTNAME} is ready!"
48  exit 0;
49fi
50
51if [[ ${HOSTNAME} == "k3s-server-"* ]]
52then
53  #read -p "What is the IP of the k3s server node?" k3s_ip
54  echo
55  echo
56  k3s_url="https://${k3s_ip}:6443"
57  sudo scp ~/.ssh/id_ed25519.pub ${k3s_user}@${k3s_ip}:~/.ssh/authorized_keys
58  sudo scp ${k3s_user}@${k3s_ip}:~/node-token ./node-token.txt
59  k3s_token=$(cat node-token.txt)
60
61  curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.24.4+k3s1 K3S_TOKEN=${k3s_token} sh -s - server \
62    --server ${k3s_url}  \
63    --disable servicelb \  #This is needed for metallb
64    --disable traefik \    #Setting up our own traefik 
65    --write-kubeconfig-mode 644 \
66    --kube-controller-manager-arg bind-address=0.0.0.0 \
67    --kube-proxy-arg metrics-bind-address=0.0.0.0 \
68    --kube-scheduler-arg bind-address=0.0.0.0 \
69    --etcd-expose-metrics true \ 
70    --kube-apiserver-arg default-not-ready-toleration-seconds=30 \
71    --kube-apiserver-arg default-unreachable-toleration-seconds=30 \
72    --kube-controller-arg node-monitor-period=20s \
73    --kube-controller-arg node-monitor-grace-period=20s \
74    --kubelet-arg containerd=/run/k3s/containerd/containerd.sock \
75    --kubelet-arg node-status-update-frequency=5s
76  sudo rm node-token.txt
77fi
78
79if [[ ${HOSTNAME} == "k3s-agent-"* ]]
80then
81  #read -p "What is the IP of the k3s server node?" k3s_ip
82  echo
83  echo
84  k3s_url="https://${k3s_ip}:6443"
85  sudo scp ~/.ssh/id_ed25519.pub ${k3s_user}@${k3s_ip}:~/.ssh/authorized_keys
86  sudo scp ${k3s_user}@${k3s_ip}:~/node-token ./node-token.txt
87  k3s_token=$(cat node-token.txt)
88  echo ${k3s_token}
89
90  curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.24.4+k3s1 K3S_TOKEN=${k3s_token} K3S_URL=${k3s_url} sh -s - --kubelet-arg node-status-update-frequency=5s
91  sudo rm node-token.txt
92fi