Last active
February 4, 2023 06:33
-
-
Save inductor/0f9082e8f4574654759c533a9fe57b0d to your computer and use it in GitHub Desktop.
kubeadm-setup-ubuntu.sh
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#/bin/bash -eu | |
# Install Containerd | |
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf | |
overlay | |
br_netfilter | |
EOF | |
sudo modprobe overlay | |
sudo modprobe br_netfilter | |
# Setup required sysctl params, these persist across reboots. | |
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf | |
net.bridge.bridge-nf-call-iptables = 1 | |
net.ipv4.ip_forward = 1 | |
net.bridge.bridge-nf-call-ip6tables = 1 | |
EOF | |
# Apply sysctl params without reboot | |
sudo sysctl --system | |
## Install containerd | |
sudo apt-get update && sudo apt-get install -y containerd | |
# Configure containerd | |
sudo mkdir -p /etc/containerd | |
sudo containerd config default > /etc/containerd/config.toml | |
if grep -q "SystemdCgroup = true" "/etc/containerd/config.toml"; then | |
echo "Config found, skip rewriting..." | |
else | |
sed -i -e "s/SystemdCgroup \= false/SystemdCgroup \= true/g" /etc/containerd/config.toml | |
fi | |
# Restart containerd | |
sudo systemctl restart containerd | |
cat <<EOF | tee /etc/sysctl.d/k8s.conf | |
net.bridge.bridge-nf-call-ip6tables = 1 | |
net.bridge.bridge-nf-call-iptables = 1 | |
vm.overcommit_memory = 1 | |
vm.panic_on_oom = 0 | |
kernel.panic = 10 | |
kernel.panic_on_oops = 1 | |
kernel.keys.root_maxkeys = 1000000 | |
kernel.keys.root_maxbytes = 25000000 | |
EOF | |
sysctl --system | |
apt-get update && apt-get install -y apt-transport-https curl | |
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - | |
cat <<EOF | tee /etc/apt/sources.list.d/kubernetes.list | |
deb https://apt.kubernetes.io/ kubernetes-xenial main | |
EOF | |
apt-get update | |
apt-get install -y kubelet kubeadm kubectl | |
apt-mark hold kubelet kubeadm kubectl | |
# Set kubeadm config | |
cat > ~/init_kubelet.yaml <<EOF | |
apiVersion: kubeadm.k8s.io/v1beta3 | |
kind: InitConfiguration | |
bootstrapTokens: | |
- token: "$(openssl rand -hex 3).$(openssl rand -hex 8)" | |
description: "kubeadm bootstrap token" | |
ttl: "24h" | |
nodeRegistration: | |
criSocket: "/var/run/containerd/containerd.sock" | |
--- | |
apiVersion: kubeadm.k8s.io/v1beta3 | |
kind: ClusterConfiguration | |
controllerManager: | |
extraArgs: | |
bind-address: "0.0.0.0" # Used by Prometheus Operator | |
scheduler: | |
extraArgs: | |
bind-address: "0.0.0.0" # Used by Prometheus Operator | |
--- | |
apiVersion: kubelet.config.k8s.io/v1beta1 | |
kind: KubeletConfiguration | |
cgroupDriver: "systemd" | |
protectKernelDefaults: true | |
EOF | |
# Create a Kubernetes cluster | |
kubeadm init --config init_kubelet.yaml | |
mkdir -p $HOME/.kube | |
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config | |
chown $(id -u):$(id -g) $HOME/.kube/config | |
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash | |
helm repo add cilium https://helm.cilium.io/ | |
helm install cilium cilium/cilium \ | |
--namespace kube-system |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment