Last active
November 8, 2024 12:48
-
-
Save mohatb/5b7d3aa138e827b89608bd30317e1de1 to your computer and use it in GitHub Desktop.
This file contains 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/sh | |
# Source: http://kubernetes.io/docs/getting-started-guides/kubeadm | |
set -e | |
source /etc/lsb-release | |
if [ "$DISTRIB_RELEASE" != "20.04" ]; then | |
echo "################################# " | |
echo "############ WARNING ############ " | |
echo "################################# " | |
echo | |
echo "This script only works on Ubuntu 20.04!" | |
echo "You're using: ${DISTRIB_DESCRIPTION}" | |
echo "Better ABORT with Ctrl+C. Or press any key to continue the install" | |
read | |
fi | |
KUBE_VERSION=1.25.5 | |
CNI_Plugin="calico" # use calico or flannel | |
POD_NETWORK_CIDR="10.244.0.0/16" #to be used by CNI plugin | |
# Convert CNI to lower case to be used by the if statement | |
CNI_Plugin=$(echo "$CNI_Plugin" | tr '[:upper:]' '[:lower:]') | |
### setup terminal | |
apt-get update | |
apt-get -y upgrade | |
apt-get install -y bash-completion binutils | |
echo 'colorscheme ron' >> ~/.vimrc | |
echo 'set tabstop=2' >> ~/.vimrc | |
echo 'set shiftwidth=2' >> ~/.vimrc | |
echo 'set expandtab' >> ~/.vimrc | |
echo 'source <(kubectl completion bash)' >> ~/.bashrc | |
echo 'alias k=kubectl' >> ~/.bashrc | |
echo 'alias c=clear' >> ~/.bashrc | |
echo 'complete -F __start_kubectl k' >> ~/.bashrc | |
### disable linux swap and remove any existing swap partitions | |
swapoff -a | |
sed -i '/\sswap\s/ s/^\(.*\)$/#\1/g' /etc/fstab | |
### remove packages | |
kubeadm reset -f || true | |
crictl rm --force $(crictl ps -a -q) || true | |
apt-mark unhold kubelet kubeadm kubectl kubernetes-cni || true | |
apt-get remove -y docker.io containerd kubelet kubeadm kubectl kubernetes-cni || true | |
apt-get autoremove -y | |
systemctl daemon-reload | |
### install packages | |
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - | |
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list | |
deb http://apt.kubernetes.io/ kubernetes-xenial main | |
EOF | |
apt-get update | |
apt-get install -y docker.io containerd kubelet=${KUBE_VERSION}-00 kubeadm=${KUBE_VERSION}-00 kubectl=${KUBE_VERSION}-00 kubernetes-cni | |
apt-mark hold kubelet kubeadm kubectl kubernetes-cni | |
### containerd | |
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf | |
overlay | |
br_netfilter | |
EOF | |
sudo modprobe overlay | |
sudo modprobe br_netfilter | |
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 | |
sudo sysctl --system | |
sudo mkdir -p /etc/containerd | |
### containerd config | |
cat > /etc/containerd/config.toml <<EOF | |
disabled_plugins = [] | |
imports = [] | |
oom_score = 0 | |
plugin_dir = "" | |
required_plugins = [] | |
root = "/var/lib/containerd" | |
state = "/run/containerd" | |
version = 2 | |
[plugins] | |
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes] | |
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] | |
base_runtime_spec = "" | |
container_annotations = [] | |
pod_annotations = [] | |
privileged_without_host_devices = false | |
runtime_engine = "" | |
runtime_root = "" | |
runtime_type = "io.containerd.runc.v2" | |
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] | |
BinaryName = "" | |
CriuImagePath = "" | |
CriuPath = "" | |
CriuWorkPath = "" | |
IoGid = 0 | |
IoUid = 0 | |
NoNewKeyring = false | |
NoPivotRoot = false | |
Root = "" | |
ShimCgroup = "" | |
SystemdCgroup = true | |
EOF | |
### crictl uses containerd as default | |
{ | |
cat <<EOF | sudo tee /etc/crictl.yaml | |
runtime-endpoint: unix:///run/containerd/containerd.sock | |
EOF | |
} | |
### kubelet should use containerd | |
{ | |
cat <<EOF | sudo tee /etc/default/kubelet | |
KUBELET_EXTRA_ARGS="--container-runtime remote --container-runtime-endpoint unix:///run/containerd/containerd.sock" | |
EOF | |
} | |
### start services | |
systemctl daemon-reload | |
systemctl enable containerd | |
systemctl restart containerd | |
systemctl enable kubelet && systemctl start kubelet | |
### init k8s | |
rm /root/.kube/config || true | |
kubeadm init --kubernetes-version=${KUBE_VERSION} --ignore-preflight-errors=NumCPU --skip-token-print --pod-network-cidr ${POD_NETWORK_CIDR} | |
mkdir -p ~/.kube | |
sudo cp -i /etc/kubernetes/admin.conf ~/.kube/config | |
### CNI | |
if [ "$CNI_Plugin" = "Calico" ] | |
then | |
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/tigera-operator.yaml | |
curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/custom-resources.yaml -O | |
sed -i "s|cidr: .*|cidr: ${POD_NETWORK_CIDR}|" custom-resources.yaml | |
kubectl apply -f ./custom-resources.yaml | |
rm -rf ./custom-resources.yaml | |
elif [ "$CNI_Plugin" = "Flannel" ] | |
then | |
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml | |
else | |
echo "Invalid CNI Plugin choice: should be either 'Calico' or 'Flannel'" | |
fi | |
# install MetalLB | |
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.9/config/manifests/metallb-native.yaml | |
echo "### installing MetalLB ###" | |
echo "### Configure MetalLB with l2 by applying the below yaml###" | |
cat <<EOF | kubectl apply -f - | |
apiVersion: metallb.io/v1beta1 | |
kind: IPAddressPool | |
metadata: | |
name: first-pool | |
namespace: metallb-system | |
spec: | |
addresses: | |
- 10.210.255.100-10.210.255.200 | |
EOF | |
cat << EOF | kubectl apply -f - | |
apiVersion: metallb.io/v1beta1 | |
kind: L2Advertisement | |
metadata: | |
name: example | |
namespace: metallb-system | |
EOF | |
# etcdctl | |
ETCDCTL_VERSION=v3.5.1 | |
ETCDCTL_VERSION_FULL=etcd-${ETCDCTL_VERSION}-linux-amd64 | |
wget https://github.com/etcd-io/etcd/releases/download/${ETCDCTL_VERSION}/${ETCDCTL_VERSION_FULL}.tar.gz | |
tar xzf ${ETCDCTL_VERSION_FULL}.tar.gz | |
mv ${ETCDCTL_VERSION_FULL}/etcdctl /usr/bin/ | |
rm -rf ${ETCDCTL_VERSION_FULL} ${ETCDCTL_VERSION_FULL}.tar.gz | |
#taint master node | |
echo "### Taint master node with criticaladdon ###" | |
kubectl taint nodes $(echo $(hostname) | tr '[:upper:]' '[:lower:]') CriticalAddonsOnly=true:NoExecute | |
echo | |
echo "### COMMAND TO ADD A WORKER NODE ###" | |
kubeadm token create --print-join-command --ttl 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment