Created
February 26, 2023 04:59
-
-
Save tonyprawiro/d0b8a4388ef7265b8be28fe58e88d0c3 to your computer and use it in GitHub Desktop.
install_master.sh
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.26.1 | |
### setup terminal | |
apt-get update | |
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 | |
sed -i '1s/^/force_color_prompt=yes\n/' ~/.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 podman | |
. /etc/os-release | |
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:testing.list | |
curl -L "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key" | sudo apt-key add - | |
apt-get update -qq | |
apt-get -qq -y install podman cri-tools containers-common | |
rm /etc/apt/sources.list.d/devel:kubic:libcontainers:testing.list | |
cat <<EOF | sudo tee /etc/containers/registries.conf | |
[registries.search] | |
registries = ['docker.io'] | |
EOF | |
### install packages | |
cat /tmp/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 | |
### install containerd 1.6 over apt-installed-version | |
wget https://github.com/containerd/containerd/releases/download/v1.6.12/containerd-1.6.12-linux-amd64.tar.gz | |
tar xvf containerd-1.6.12-linux-amd64.tar.gz | |
systemctl stop containerd | |
mv bin/* /usr/bin | |
rm -rf bin containerd-1.6.12-linux-amd64.tar.gz | |
systemctl unmask containerd | |
systemctl start containerd | |
### 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 192.168.0.0/16 | |
mkdir -p ~/.kube | |
sudo cp -i /etc/kubernetes/admin.conf ~/.kube/config | |
### CNI | |
kubectl apply -f https://raw.githubusercontent.com/killer-sh/cks-course-environment/master/cluster-setup/calico.yaml | |
# etcdctl | |
ETCDCTL_VERSION=v3.5.1 | |
ETCDCTL_ARCH=$(dpkg --print-architecture) | |
ETCDCTL_VERSION_FULL=etcd-${ETCDCTL_VERSION}-linux-${ETCDCTL_ARCH} | |
wget https://github.com/etcd-io/etcd/releases/download/${ETCDCTL_VERSION}/${ETCDCTL_VERSION_FULL}.tar.gz | |
tar xzf ${ETCDCTL_VERSION_FULL}.tar.gz ${ETCDCTL_VERSION_FULL}/etcdctl | |
mv ${ETCDCTL_VERSION_FULL}/etcdctl /usr/bin/ | |
rm -rf ${ETCDCTL_VERSION_FULL} ${ETCDCTL_VERSION_FULL}.tar.gz | |
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