diff --git a/00-installing-k8s/03-kubeadm-local-docker/Vagrantfile b/00-installing-k8s/03-kubeadm-local-docker/Vagrantfile index f458c41..4c0dfe0 100644 --- a/00-installing-k8s/03-kubeadm-local-docker/Vagrantfile +++ b/00-installing-k8s/03-kubeadm-local-docker/Vagrantfile @@ -8,7 +8,7 @@ Vagrant.configure("2") do |config| SHELL config.vm.define "master" do |master| - master.vm.box = "bento/ubuntu-18.04" + master.vm.box = "bento/ubuntu-22.04" master.vm.hostname = "master-node" master.vm.network "private_network", ip: "10.0.0.10" master.vm.provider "virtualbox" do |vb| @@ -19,7 +19,7 @@ Vagrant.configure("2") do |config| (1..2).each do |i| config.vm.define "node0#{i}" do |node01| - node01.vm.box = "bento/ubuntu-18.04" + node01.vm.box = "bento/ubuntu-22.04" node01.vm.hostname = "worker-node0#{i}" node01.vm.network "private_network", ip: "10.0.0.1#{i}" node01.vm.provider "virtualbox" do |vb| diff --git a/00-installing-k8s/03-kubeadm-local-docker/scripts/master.sh b/00-installing-k8s/03-kubeadm-local-docker/scripts/master.sh index 96c0467..eb081bc 100644 --- a/00-installing-k8s/03-kubeadm-local-docker/scripts/master.sh +++ b/00-installing-k8s/03-kubeadm-local-docker/scripts/master.sh @@ -1,11 +1,11 @@ -#! /bin/bash +#!/bin/bash # disable swap sudo swapoff -a # keeps the swaf off during reboot -sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab +sudo sed -i 's/^[^#].*none.*swap.*sw/#&/' /etc/fstab -sudo apt-get update -y +sudo apt-get update sudo apt-get install -y \ apt-transport-https \ ca-certificates \ @@ -19,8 +19,8 @@ echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null -sudo apt-get update -y -sudo apt-get install docker-ce docker-ce-cli containerd.io -y +sudo apt-get update +sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # Following configurations are recomended in the kubenetes documentation for Docker runtime. Please refer https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker @@ -39,35 +39,58 @@ sudo systemctl enable docker sudo systemctl daemon-reload sudo systemctl restart docker -echo "Docker Runtime Configured Successfully" +echo "Docker Engine Configured Successfully" +CRI_DOCKERD_VERSION=$(curl -s https://api.github.com/repos/Mirantis/cri-dockerd/releases/latest| grep tag_name | cut -d '"' -f 4 | sed 's/v//g') +curl -fsSLO https://github.com/Mirantis/cri-dockerd/releases/download/v${CRI_DOCKERD_VERSION}/cri-dockerd-${CRI_DOCKERD_VERSION}.amd64.tgz +tar xvf cri-dockerd-${CRI_DOCKERD_VERSION}.amd64.tgz +sudo mv cri-dockerd/cri-dockerd /usr/local/bin/ + +curl -fsSLO https://raw.githubusercontent.com/Mirantis/cri-dockerd/v${CRI_DOCKERD_VERSION}/packaging/systemd/cri-docker.service +curl -fsSLO https://raw.githubusercontent.com/Mirantis/cri-dockerd/v${CRI_DOCKERD_VERSION}/packaging/systemd/cri-docker.socket +sudo mv cri-docker.socket cri-docker.service /etc/systemd/system/ +sudo sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service +sudo systemctl daemon-reload +sudo systemctl enable cri-docker.service +sudo systemctl enable --now cri-docker.socket + +echo "Docker Container Runtime Interface installed: $(cri-dockerd --version)" -sudo apt-get update sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list -sudo apt-get update -y -# sudo apt-get install -y kubelet kubeadm kubectl -VERSION=1.21.4-00 -sudo apt-get install -y kubelet=$VERSION kubectl=$VERSION kubeadm=$VERSION +KUBERNETES_VERSION=1.25.4-00 +sudo apt-get update +sudo apt-get install -y kubelet=$KUBERNETES_VERSION kubectl=$KUBERNETES_VERSION kubeadm=$KUBERNETES_VERSION # reference https://stackoverflow.com/questions/49721708/how-to-install-specific-version-of-kubernetes - - sudo apt-mark hold kubelet kubeadm kubectl - IPADDR="10.0.0.10" - NODENAME=$(hostname -s) -sudo kubeadm init --apiserver-advertise-address=$IPADDR --apiserver-cert-extra-sans=$IPADDR --pod-network-cidr=192.168.0.0/16 --node-name $NODENAME --ignore-preflight-errors Swap +kubeadm config print init-defaults > ClusterConfiguration.yaml + +sed -ri "s|^(\s*advertiseAddress:).*|\1 ${IPADDR}|" ClusterConfiguration.yaml +sed -ri "s|^(\s*name:).*|\1 ${NODENAME}|" ClusterConfiguration.yaml +sed -ri "s|^(\s*kubernetesVersion:).*|\1 ${KUBERNETES_VERSION%-*}|" ClusterConfiguration.yaml +sed -ri "s|^(\s*criSocket:).*|\1 unix:///run/cri-dockerd.sock|" ClusterConfiguration.yaml +sed -ri 's|^(\s*)serviceSubnet:.*|&\n\1podSubnet: 192.168.0.0/16|' ClusterConfiguration.yaml + +# Set the cgroupDriver to systemd...matching that of your container runtime, containerd +cat <> ClusterConfiguration.yaml +--- +apiVersion: kubelet.config.k8s.io/v1beta1 +kind: KubeletConfiguration +cgroupDriver: systemd +EOF +sudo kubeadm init --config=ClusterConfiguration.yaml mkdir -p $HOME/.kube - sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config - sudo chown $(id -u):$(id -g) $HOME/.kube/config +sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config +sudo chown $(id -u):$(id -g) $HOME/.kube/config -curl https://docs.projectcalico.org/manifests/calico.yaml -O +curl -fsSLO https://docs.projectcalico.org/manifests/calico.yaml kubectl apply -f calico.yaml diff --git a/00-installing-k8s/03-kubeadm-local-docker/scripts/worker-node.sh b/00-installing-k8s/03-kubeadm-local-docker/scripts/worker-node.sh index fbd66b4..86c9d90 100644 --- a/00-installing-k8s/03-kubeadm-local-docker/scripts/worker-node.sh +++ b/00-installing-k8s/03-kubeadm-local-docker/scripts/worker-node.sh @@ -1,11 +1,11 @@ -#! /bin/bash +#!/bin/bash # disable swap sudo swapoff -a # keeps the swaf off during reboot -sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab +sudo sed -i 's/^[^#].*none.*swap.*sw/#&/' /etc/fstab -sudo apt-get update -y +sudo apt-get update sudo apt-get install -y \ apt-transport-https \ ca-certificates \ @@ -19,8 +19,8 @@ echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null -sudo apt-get update -y -sudo apt-get install docker-ce docker-ce-cli containerd.io -y +sudo apt-get update +sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # Following configurations are recomended in the kubenetes documentation for Docker runtime. Please refer https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker @@ -39,17 +39,30 @@ sudo systemctl enable docker sudo systemctl daemon-reload sudo systemctl restart docker -echo "Docker Runtime Configured Successfully" +echo "Docker Engine Configured Successfully" + +CRI_DOCKERD_VERSION=$(curl -s https://api.github.com/repos/Mirantis/cri-dockerd/releases/latest| grep tag_name | cut -d '"' -f 4 | sed 's/v//g') +curl -fsSLO https://github.com/Mirantis/cri-dockerd/releases/download/v${CRI_DOCKERD_VERSION}/cri-dockerd-${CRI_DOCKERD_VERSION}.amd64.tgz +tar xvf cri-dockerd-${CRI_DOCKERD_VERSION}.amd64.tgz +sudo mv cri-dockerd/cri-dockerd /usr/local/bin/ + +curl -fsSLO https://raw.githubusercontent.com/Mirantis/cri-dockerd/v${CRI_DOCKERD_VERSION}/packaging/systemd/cri-docker.service +curl -fsSLO https://raw.githubusercontent.com/Mirantis/cri-dockerd/v${CRI_DOCKERD_VERSION}/packaging/systemd/cri-docker.socket +sudo mv cri-docker.socket cri-docker.service /etc/systemd/system/ +sudo sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service +sudo systemctl daemon-reload +sudo systemctl enable cri-docker.service +sudo systemctl enable --now cri-docker.socket + +echo "Docker Container Runtime Interface installed: $(cri-dockerd --version)" -sudo apt-get update sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list -sudo apt-get update -y -# sudo apt-get install -y kubelet kubeadm kubectl -VERSION=1.21.4-00 -sudo apt-get install -y kubelet=$VERSION kubectl=$VERSION kubeadm=$VERSION - +KUBERNETES_VERSION=1.25.4-00 +sudo apt-get update +sudo apt-get install -y kubelet=$KUBERNETES_VERSION kubectl=$KUBERNETES_VERSION kubeadm=$KUBERNETES_VERSION +# reference https://stackoverflow.com/questions/49721708/how-to-install-specific-version-of-kubernetes sudo apt-mark hold kubelet kubeadm kubectl diff --git a/00-installing-k8s/04-automated-local-k8s-setup/Vagrantfile b/00-installing-k8s/04-automated-local-k8s-setup/Vagrantfile index 24d3120..2c407ef 100644 --- a/00-installing-k8s/04-automated-local-k8s-setup/Vagrantfile +++ b/00-installing-k8s/04-automated-local-k8s-setup/Vagrantfile @@ -7,7 +7,7 @@ Vagrant.configure("2") do |config| SHELL config.vm.define "master" do |master| - master.vm.box = "bento/ubuntu-18.04" + master.vm.box = "bento/ubuntu-22.04" master.vm.hostname = "master-node" master.vm.network "private_network", ip: "10.0.0.10" master.vm.provider "virtualbox" do |vb| @@ -20,7 +20,7 @@ Vagrant.configure("2") do |config| (1..2).each do |i| config.vm.define "node0#{i}" do |node| - node.vm.box = "bento/ubuntu-18.04" + node.vm.box = "bento/ubuntu-22.04" node.vm.hostname = "worker-node0#{i}" node.vm.network "private_network", ip: "10.0.0.1#{i}" node.vm.provider "virtualbox" do |vb| diff --git a/00-installing-k8s/04-automated-local-k8s-setup/readme.md b/00-installing-k8s/04-automated-local-k8s-setup/readme.md index d5d1b65..ba91af3 100644 --- a/00-installing-k8s/04-automated-local-k8s-setup/readme.md +++ b/00-installing-k8s/04-automated-local-k8s-setup/readme.md @@ -26,9 +26,9 @@ kubectl get nodes ``` ``` -master-node Ready control-plane,master 15m v1.21.4 -worker-node01 Ready worker 12m v1.21.4 -worker-node02 Ready worker 9m4s v1.21.4 +master-node Ready control-plane,master 15m v1.25.4 +worker-node01 Ready worker 12m v1.25.4 +worker-node02 Ready worker 9m4s v1.25.4 ``` We can find out the pods running in our system by diff --git a/00-installing-k8s/04-automated-local-k8s-setup/scripts/common.sh b/00-installing-k8s/04-automated-local-k8s-setup/scripts/common.sh index 8c20e58..94449bb 100644 --- a/00-installing-k8s/04-automated-local-k8s-setup/scripts/common.sh +++ b/00-installing-k8s/04-automated-local-k8s-setup/scripts/common.sh @@ -1,14 +1,14 @@ -#! /bin/bash +#!/bin/bash # Variable Declaration -KUBERNETES_VERSION="1.21.4-00" +KUBERNETES_VERSION=1.25.4-00 # disable swap sudo swapoff -a # keeps the swaf off during reboot -sudo sed -i '/ swap / s/^/#/g' /etc/fstab +sudo sed -i 's/^[^#].*none.*swap.*sw/#&/' /etc/fstab sudo apt-get update -y sudo apt-get install -y \ @@ -25,7 +25,7 @@ echo \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update -y -sudo apt-get install docker-ce docker-ce-cli containerd.io -y +sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # Following configurations are recomended in the kubenetes documentation for Docker runtime. Please refer https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker @@ -46,7 +46,22 @@ sudo systemctl restart docker sudo gpasswd -a vagrant docker -echo "Docker Runtime Configured Successfully" +echo "Docker Engine Configured Successfully" + +CRI_DOCKERD_VERSION=$(curl -s https://api.github.com/repos/Mirantis/cri-dockerd/releases/latest| grep tag_name | cut -d '"' -f 4 | sed 's/v//g') +curl -fsSLO https://github.com/Mirantis/cri-dockerd/releases/download/v${CRI_DOCKERD_VERSION}/cri-dockerd-${CRI_DOCKERD_VERSION}.amd64.tgz +tar xvf cri-dockerd-${CRI_DOCKERD_VERSION}.amd64.tgz +sudo mv cri-dockerd/cri-dockerd /usr/local/bin/ + +curl -fsSLO https://raw.githubusercontent.com/Mirantis/cri-dockerd/v${CRI_DOCKERD_VERSION}/packaging/systemd/cri-docker.service +curl -fsSLO https://raw.githubusercontent.com/Mirantis/cri-dockerd/v${CRI_DOCKERD_VERSION}/packaging/systemd/cri-docker.socket +sudo mv cri-docker.socket cri-docker.service /etc/systemd/system/ +sudo sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service +sudo systemctl daemon-reload +sudo systemctl enable cri-docker.service +sudo systemctl enable --now cri-docker.socket + +echo "Docker Container Runtime Interface installed: $(cri-dockerd --version)" sudo apt-get update diff --git a/00-installing-k8s/04-automated-local-k8s-setup/scripts/master.sh b/00-installing-k8s/04-automated-local-k8s-setup/scripts/master.sh index 8abb299..0645aeb 100644 --- a/00-installing-k8s/04-automated-local-k8s-setup/scripts/master.sh +++ b/00-installing-k8s/04-automated-local-k8s-setup/scripts/master.sh @@ -1,14 +1,26 @@ -#! /bin/bash +#!/bin/bash -MASTER_IP="10.0.0.10" +IPADDR="10.0.0.10" NODENAME=$(hostname -s) POD_CIDR="192.168.0.0/16" -sudo kubeadm config images pull +kubeadm config print init-defaults > ClusterConfiguration.yaml -echo "Preflight Check Passed: Downloaded All Required Images" +sed -ri "s|^(\s*advertiseAddress:).*|\1 ${IPADDR}|" ClusterConfiguration.yaml +sed -ri "s|^(\s*name:).*|\1 ${NODENAME}|" ClusterConfiguration.yaml +sed -ri "s|^(\s*kubernetesVersion:).*|\1 ${KUBERNETES_VERSION%-*}|" ClusterConfiguration.yaml +sed -ri "s|^(\s*criSocket:).*|\1 unix:///run/cri-dockerd.sock|" ClusterConfiguration.yaml +sed -ri "s|^(\s*)serviceSubnet:.*|&\n\1podSubnet: ${POD_CIDR}|" ClusterConfiguration.yaml -sudo kubeadm init --apiserver-advertise-address=$MASTER_IP --apiserver-cert-extra-sans=$MASTER_IP --pod-network-cidr=$POD_CIDR --node-name $NODENAME --ignore-preflight-errors Swap +# Set the cgroupDriver to systemd...matching that of your container runtime, containerd +cat <> ClusterConfiguration.yaml +--- +apiVersion: kubelet.config.k8s.io/v1beta1 +kind: KubeletConfiguration +cgroupDriver: systemd +EOF + +sudo kubeadm init --config=ClusterConfiguration.yaml mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config @@ -30,7 +42,7 @@ cp /etc/kubernetes/admin.conf /vagrant/configs/config touch /vagrant/configs/join.sh chmod +x /vagrant/configs/join.sh -kubeadm token create --print-join-command > /vagrant/configs/join.sh +echo "$(kubeadm token create --print-join-command) --cri-socket unix:///run/cri-dockerd.sock" > /vagrant/configs/join.sh # Install Calico Network Plugin @@ -42,7 +54,8 @@ kubectl apply -f https://raw.githubusercontent.com/scriptcamp/kubeadm-scripts/ma # Install Kubernetes Dashboard -kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml +KUBERNETES_DASHBOARD_VERSION=$(curl -s https://api.github.com/repos/kubernetes/dashboard/releases/latest | grep tag_name | cut -d '"' -f 4 | sed 's/v//g') +kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v${KUBERNETES_DASHBOARD_VERSION}/aio/deploy/recommended.yaml # Create Dashboard User @@ -69,7 +82,7 @@ subjects: namespace: kubernetes-dashboard EOF -kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}" >> /vagrant/configs/token +kubectl -n kubernetes-dashboard create token admin-user > /vagrant/configs/token sudo -i -u vagrant bash << 'EOF' mkdir -p $HOME/.kube