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