{"id":866,"date":"2023-08-15T22:02:17","date_gmt":"2023-08-15T16:32:17","guid":{"rendered":"https:\/\/www.openwriteup.com\/?page_id=866"},"modified":"2024-11-21T14:35:59","modified_gmt":"2024-11-21T09:05:59","slug":"setup-kubernetes-master-using-kubeadm","status":"publish","type":"page","link":"https:\/\/www.openwriteup.com\/?page_id=866","title":{"rendered":"Setup Kubernetes Master using kubeadm"},"content":{"rendered":"<p>We will be using docker as container run time, please follow the steps to install docker mentioned in this block<\/p>\n<blockquote class=\"wp-embedded-content\" data-secret=\"w9NIuU7UX4\"><p><a href=\"https:\/\/www.openwriteup.com\/?page_id=785\">Docker lab setup on Ubuntu 22.04 Server LTS<\/a><\/p><\/blockquote>\n<p><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;Docker lab setup on Ubuntu 22.04 Server LTS&#8221; &#8212; OW\" src=\"https:\/\/www.openwriteup.com\/?page_id=785&#038;embed=true#?secret=YJDWlSsKYl#?secret=w9NIuU7UX4\" data-secret=\"w9NIuU7UX4\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n<p><strong>Use sudo or login as root user &#8220;sudo su -&#8220;<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Lab :Configuring Repo and Installation for ubuntu\u00a0<\/strong><\/p>\n<p><strong>Ubuntu 22.04<\/strong><\/p>\n<p>Run in both ubuntu vms (step 1 ,step2 and step3)<\/p>\n<p><strong>step1<\/strong><\/p>\n<pre class=\"language-bash\" tabindex=\"0\">cat<code class=\"language-bash\"> <span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">EOF<span class=\"token bash punctuation\"> <span class=\"token operator\">|<\/span> <span class=\"token function\">sudo<\/span> <span class=\"token function\">tee<\/span> \/etc\/modules-load.d\/k8s.conf<\/span>\r\noverlay\r\nbr_netfilter\r\nEOF<\/span>\r\n\r\n<span class=\"token function\">sudo<\/span> modprobe overlay\r\n<span class=\"token function\">sudo<\/span> modprobe br_netfilter\r\n\r\n<span class=\"token comment\"># sysctl params required by setup, params persist across reboots<\/span>\r\n<span class=\"token function\">cat<\/span> <span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">EOF<span class=\"token bash punctuation\"> <span class=\"token operator\">|<\/span> <span class=\"token function\">sudo<\/span> <span class=\"token function\">tee<\/span> \/etc\/sysctl.d\/k8s.conf<\/span>\r\nnet.bridge.bridge-nf-call-iptables  = 1\r\nnet.bridge.bridge-nf-call-ip6tables = 1\r\nnet.ipv4.ip_forward                 = 1\r\nEOF<\/span>\r\n\r\n<span class=\"token comment\"># Apply sysctl params without reboot<\/span>\r\n<span class=\"token function\">sudo<\/span> <span class=\"token function\">sysctl<\/span> <span class=\"token parameter variable\">--system<\/span><\/code><\/pre>\n<pre><strong>Step2:\r\n<\/strong>\r\nsudo mkdir -p -m 755 \/etc\/apt\/keyrings\r\ncurl -fsSL https:\/\/pkgs.k8s.io\/core:\/stable:\/v1.30\/deb\/Release.key | sudo gpg --dearmor -o \/etc\/apt\/keyrings\/kubernetes-apt-keyring.gpg\r\n\r\necho 'deb [signed-by=\/etc\/apt\/keyrings\/kubernetes-apt-keyring.gpg] https:\/\/pkgs.k8s.io\/core:\/stable:\/v1.30\/deb\/ \/' | sudo tee \/etc\/apt\/sources.list.d\/kubernetes.list\r\napt-get update\r\n\r\nsudo apt-get install -y kubelet kubeadm kubectl<\/pre>\n<p>swap space can potentially interfere with this isolation. When a system is under memory pressure and starts swapping out memory to disk, it can lead to unpredictable performance and behavior for applications running inside containers.<\/p>\n<p><strong>step3<\/strong><\/p>\n<pre>swapoff -a\r\nsudo sed -i '\/ swap \/ s\/^\/#\/' \/etc\/fstab<\/pre>\n<p>Docker as runtime updating for k8s,This is important because Kubernetes requires all its components, and the container runtime uses systemd for cgroups.:<\/p>\n<pre>sh -c \"containerd config default &gt; \/etc\/containerd\/config.toml\"\r\nsed -i 's\/ SystemdCgroup = false\/ SystemdCgroup = true\/' \/etc\/containerd\/config.toml\r\nsystemctl restart containerd.service\r\nsystemctl restart kubelet.service\r\nsystemctl enable kubelet.service<\/pre>\n<p><strong>step4 :<\/strong> Runs <strong>only in master node<\/strong><\/p>\n<p>Initialize Cluster with kubeadm.<code>kubeadm init<\/code>, is used to initialize a Kubernetes control-plane node. The <code>--pod-network-cidr<\/code> flag specifies the range of IP addresses for the pod network in your cluster. The <code>10.1.0.0\/16<\/code><\/p>\n<pre>kubeadm init --pod-network-cidr=10.244.0.0\/16<\/pre>\n<p>To start using your cluster, you need to run the following as a regular user:<\/p>\n<p><strong>Note: copy the kubeadm join output and save in notepad<\/strong><\/p>\n<p><a href=\"https:\/\/www.openwriteup.com\/wp-content\/uploads\/2024\/02\/k8s.png\"><img decoding=\"async\" class=\"alignnone size-medium wp-image-1379\" src=\"https:\/\/www.openwriteup.com\/wp-content\/uploads\/2024\/02\/k8s-300x103.png\" alt=\"\" width=\"300\" height=\"103\" srcset=\"https:\/\/www.openwriteup.com\/wp-content\/uploads\/2024\/02\/k8s-300x103.png 300w, https:\/\/www.openwriteup.com\/wp-content\/uploads\/2024\/02\/k8s-700x241.png 700w, https:\/\/www.openwriteup.com\/wp-content\/uploads\/2024\/02\/k8s-768x264.png 768w, https:\/\/www.openwriteup.com\/wp-content\/uploads\/2024\/02\/k8s-1536x529.png 1536w, https:\/\/www.openwriteup.com\/wp-content\/uploads\/2024\/02\/k8s.png 1882w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<pre>Step5: Runs only in master node\r\nmkdir -p $HOME\/.kube\r\nsudo cp -i \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config\r\nsudo chown $(id -u):$(id -g) $HOME\/.kube\/config<\/pre>\n<pre><\/pre>\n<p>Install the network plugin in master node<\/p>\n<pre>step 6: only in master<\/pre>\n<pre class=\"language-bash\" tabindex=\"0\">\u00a0kubectl apply -f https:\/\/raw.githubusercontent.com\/coreos\/flannel\/master\/Documentation\/kube-flannel.yml<\/pre>\n<p>Run command after 5 min<\/p>\n<pre>kubectl get nodes\r\n\r\n#Node must come ready\r\n#NAME STATUS ROLES AGE VERSION\r\n#okdmaster <strong>Ready<\/strong> control-plane 4m40s v1.26.5\r\n\r\n#If \"Not Ready\" persist, please restart the containerd service\r\nsystemctl restart containerd<\/pre>\n<p>Now run the kubeadm join command in client node (step 1,step2,step3)<\/p>\n<p><strong>Run the kubeadm join command which you have copied after kubeadm init<\/strong><\/p>\n<p>After kubeadm join command:<\/p>\n<p>In case you missed the kubeadm join command, run the below command to get it again on master:<\/p>\n<pre class=\"lang-yaml s-code-block\"><code class=\"hljs language-yaml\"><span class=\"hljs-string\">kubeadm<\/span> <span class=\"hljs-string\">token<\/span> <span class=\"hljs-string\">create<\/span> <span class=\"hljs-string\">--print-join-command\r\n<\/span><\/code><\/pre>\n<pre>#On the worker node, please run,\r\n\r\nmodprobe br_netfilter\r\n\r\necho '1' &gt; \/proc\/sys\/net\/ipv4\/ip_forward\r\n<em><strong>\r\n#B<\/strong><strong><em>el<\/em>ow is example, please run your copied kubeadm join command<\/strong><\/em>\r\n\r\n\r\n#kubeadm join 172.16.207.130:6443 --token r6i5ud.xyt1242cyo95ig68 --discovery-token-ca-cert-hash sha256:6717f453c5a347dcec6499b63fad0351d1986d19f2f8c3455dc8b3d03707e16a\r\n \r\nmkdir \/root\/.kube\r\ncp \/etc\/kubernetes\/kubelet.conf \/root\/.kube\/config\r\nkubectl get nodes<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>We will be using docker as container run time, please follow the steps to install docker mentioned in this block Docker lab setup on Ubuntu 22.04 Server LTS Use sudo or login as root user &#8220;sudo su -&#8220; &nbsp; Lab :Configuring Repo and Installation for ubuntu\u00a0 Ubuntu 22.04 Run in both ubuntu vms (step 1 ,step2 and step3) step1 cat &lt;&lt;EOF | sudo tee \/etc\/modules-load.d\/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter # sysctl params required by setup, params persist across reboots cat &lt;&lt;EOF | sudo tee \/etc\/sysctl.d\/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF # Apply sysctl params without reboot sudo sysctl &#8211;system Step2: sudo mkdir -p -m 755 \/etc\/apt\/keyrings curl -fsSL https:\/\/pkgs.k8s.io\/core:\/stable:\/v1.30\/deb\/Release.key | sudo gpg &#8211;dearmor -o \/etc\/apt\/keyrings\/kubernetes-apt-keyring.gpg echo &#8216;deb [signed-by=\/etc\/apt\/keyrings\/kubernetes-apt-keyring.gpg] https:\/\/pkgs.k8s.io\/core:\/stable:\/v1.30\/deb\/ \/&#8217; | sudo tee \/etc\/apt\/sources.list.d\/kubernetes.list apt-get update sudo apt-get install -y kubelet kubeadm kubectl swap space can potentially interfere with this isolation. When a system is under memory pressure and starts swapping out memory to disk, it can lead to unpredictable performance and behavior for applications running inside containers. step3 swapoff -a sudo sed -i &#8216;\/ swap \/ s\/^\/#\/&#8217; \/etc\/fstab Docker as runtime updating for k8s,This is important because Kubernetes requires all its components, and the container runtime uses systemd for cgroups.: sh -c &#8220;containerd config default &gt; \/etc\/containerd\/config.toml&#8221; sed -i &#8216;s\/ SystemdCgroup = false\/ SystemdCgroup = true\/&#8217; \/etc\/containerd\/config.toml systemctl restart containerd.service systemctl restart kubelet.service systemctl enable kubelet.service step4 : Runs only in master node Initialize Cluster with kubeadm.kubeadm init, is used to initialize a Kubernetes control-plane node. The &#8211;pod-network-cidr flag specifies the range of IP addresses for the pod network in your cluster. The 10.1.0.0\/16 kubeadm init &#8211;pod-network-cidr=10.244.0.0\/16 To start using your cluster, you need to run the following as a regular user: Note: copy the kubeadm join output and save in notepad Step5: Runs only in master node mkdir -p $HOME\/.kube sudo cp -i \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config sudo chown $(id -u):$(id -g) $HOME\/.kube\/config Install the network plugin in master node step 6: only in master \u00a0kubectl apply -f https:\/\/raw.githubusercontent.com\/coreos\/flannel\/master\/Documentation\/kube-flannel.yml Run command after 5 min kubectl get nodes #Node must come ready #NAME STATUS ROLES AGE VERSION #okdmaster Ready control-plane 4m40s v1.26.5 #If &#8220;Not Ready&#8221; persist, please restart the containerd service systemctl restart containerd Now run the kubeadm join command in client node (step 1,step2,step3) Run the kubeadm join command which you have copied after kubeadm init After kubeadm join command: In case you missed the kubeadm join command, run the below command to get it again on master: kubeadm token create &#8211;print-join-command #On the worker node, please run, modprobe br_netfilter echo &#8216;1&#8217; &gt; \/proc\/sys\/net\/ipv4\/ip_forward #Below is example, please run your copied kubeadm join command #kubeadm join 172.16.207.130:6443 &#8211;token r6i5ud.xyt1242cyo95ig68 &#8211;discovery-token-ca-cert-hash sha256:6717f453c5a347dcec6499b63fad0351d1986d19f2f8c3455dc8b3d03707e16a mkdir \/root\/.kube cp \/etc\/kubernetes\/kubelet.conf \/root\/.kube\/config kubectl get nodes<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-866","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.openwriteup.com\/index.php?rest_route=\/wp\/v2\/pages\/866","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.openwriteup.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.openwriteup.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.openwriteup.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.openwriteup.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=866"}],"version-history":[{"count":25,"href":"https:\/\/www.openwriteup.com\/index.php?rest_route=\/wp\/v2\/pages\/866\/revisions"}],"predecessor-version":[{"id":1479,"href":"https:\/\/www.openwriteup.com\/index.php?rest_route=\/wp\/v2\/pages\/866\/revisions\/1479"}],"wp:attachment":[{"href":"https:\/\/www.openwriteup.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=866"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}