Last active
April 11, 2023 04:46
-
-
Save mahata/e8d1ce5c188b6f3d91d98d83459b0c90 to your computer and use it in GitHub Desktop.
Kubernetes Installer for Arm machines - Based on: https://github.com/killer-sh/cks-course-environment/tree/master/cluster-setup/latest
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 -xe | |
# 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 | |
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 | |
### install containerd 1.6 over apt-installed-version | |
wget https://github.com/containerd/containerd/releases/download/v1.6.12/containerd-1.6.12-linux-arm64.tar.gz | |
tar xvf containerd-1.6.12-linux-arm64.tar.gz | |
systemctl stop containerd | |
mv bin/* /usr/bin | |
rm -rf bin containerd-1.6.12-linux-arm64.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 |
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 | |
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 | |
### install containerd 1.6 over apt-installed-version | |
wget https://github.com/containerd/containerd/releases/download/v1.6.12/containerd-1.6.12-linux-arm64.tar.gz | |
tar xvf containerd-1.6.12-linux-arm64.tar.gz | |
systemctl stop containerd | |
mv bin/* /usr/bin | |
rm -rf bin containerd-1.6.12-linux-arm64.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 | |
kubeadm reset -f | |
systemctl daemon-reload | |
service kubelet start | |
echo | |
echo "EXECUTE ON MASTER: kubeadm token create --print-join-command --ttl 0" | |
echo "THEN RUN THE OUTPUT AS COMMAND HERE TO ADD AS WORKER" | |
echo |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment