Skip to content

Instantly share code, notes, and snippets.

@mebaysan
Last active December 27, 2022 08:24
Show Gist options
  • Save mebaysan/af34e7d09f1afdb6d6e68afa068cebe2 to your computer and use it in GitHub Desktop.
Save mebaysan/af34e7d09f1afdb6d6e68afa068cebe2 to your computer and use it in GitHub Desktop.
Docker and Kubernetes Installation for Fedora
#! /bin/bash
if ! [ $USER = root ]
then
echo run this script with sudo
exit 3
fi
# setting MYOS variable
MYOS=$(hostnamectl | awk '/Operating/ { print $3 }')
OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }')
############ DOCKER ############
# cleaning
sudo dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
# dnf core plugins
sudo dnf -y install dnf-plugins-core
# adding docker repo
sudo dnf config-manager \
--add-repo \
https://download.docker.com/linux/fedora/docker-ce.repo
# install docker compose etc.
sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# docker service start
sudo systemctl start docker
# docker service enable
sudo systemctl enable docker
############ Git ############
sudo dnf install git # we'll need to download cri-dockerd
############ Install GO for CRI-DOCKERD Installation ############
wget https://go.dev/dl/go1.19.4.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.19.4.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
source $HOME/.bash_profile
############ CRI-DOCKERD ############
git clone https://github.com/Mirantis/cri-dockerd.git
cd cri-dockerd
mkdir bin
go build -o bin/cri-dockerd
mkdir -p /usr/local/bin
install -o root -g root -m 0755 bin/cri-dockerd /usr/local/bin/cri-dockerd
cp -a packaging/systemd/* /etc/systemd/system
sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
systemctl daemon-reload
systemctl enable cri-docker.service
systemctl enable --now cri-docker.socket
############ KUBERNETES ############
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
# Set SELinux in permissive mode (effectively disabling it)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# disable swap
sed -i '/ swap / s/^/#/' /etc/fstab
swapoff -a
# Install Kubetools
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
# To prevent the error below
sudo rm /etc/containerd/config.toml
sudo systemctl restart containerd
# [ERROR CRI]: container runtime is not running: output: E1227 09:43:27.228059 2382 remote_runtime.go:948] "Status from runtime service failed" err="rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
############ KUBERNETES NETWORKING ############
# add ports for kubernetes
sudo firewall-cmd --add-port=6443/tcp
sudo firewall-cmd --add-port=10250/tcp
############ Restart Host ############
echo "You successfully set up tools!"
echo "After the reboot you'll be able to create your cluster ^^"
echo "kubeadm init --cri-socket=unix:///var/run/cri-dockerd.sock <OTHER PARAMS>"
reboot
############ DEBUG ############
### Get cgroup (1)
# docker info | grep Cgroup
# Then, update kubelet args (KUBELET_KUBECONFIG_ARGS) in
# /etc/systemd/system/kubelet.service.d/10-kubeadm.conf and add a
# --cgroup-driver flag corresponsing to docker cgroup (in this case <YOUR GROUP>).
### Swap off (2)
# swapoff -a
# sed -i '/ swap / s/^/#/' /etc/fstab
### Configure docker cgroup (3)
# create `/etc/docker/daemon.json`
# add the json below
# {
# "exec-opts": ["native.cgroupdriver=systemd"]
# }
# systemctl daemon-reload
# systemctl restart docker
# systemctl restart kubelet
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment