{"id":6423,"date":"2019-08-29T07:51:28","date_gmt":"2019-08-29T07:51:28","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=6423"},"modified":"2021-11-16T10:53:29","modified_gmt":"2021-11-16T10:53:29","slug":"setting-up-kubernetes-clusters-using-kubeadm-manual-way-in-ubuntu-16-04-xenial","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/setting-up-kubernetes-clusters-using-kubeadm-manual-way-in-ubuntu-16-04-xenial\/","title":{"rendered":"Setting up Kubernetes Clusters using Kubeadm Manual way in Ubuntu 16.04 Xenial"},"content":{"rendered":"\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-devopsschool-com wp-block-embed-devopsschool-com\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"WfwXMKH6qF\"><a href=\"https:\/\/www.devopsschool.com\/blog\/how-to-delete-remove-clean-existing-corrupted-or-old-kubeadm-kubernetes-clusters-setup\/\">How to delete\/remove\/clean existing corrupted or old kubeadm kubernetes clusters setup?<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;How to delete\/remove\/clean existing corrupted or old kubeadm kubernetes clusters setup?&#8221; &#8212; \" src=\"https:\/\/www.devopsschool.com\/blog\/how-to-delete-remove-clean-existing-corrupted-or-old-kubeadm-kubernetes-clusters-setup\/embed\/#?secret=v9ZgbylX5x#?secret=WfwXMKH6qF\" data-secret=\"WfwXMKH6qF\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>What is Kubeadm?<\/p>\n\n\n\n<p>Kubeadm helps you bootstrap a minimum viable Kubernetes cluster that conforms to best practices. Kubeadm is a tool built to provide kubeadm init and kubeadm join as best-practice &#8220;fast paths&#8221; for creating Kubernetes clusters. <\/p>\n\n\n\n<p><strong>Goal<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>To Install a single master Kubernetes cluster<\/li><li>To Install a high availability master Kubernetes cluster  <\/li><li>To Install a Pod network on the cluster so that your Pods can talk to each other.<\/li><\/ul>\n\n\n\n<p><strong>kubeadm\u2019s simplicity means it can serve a wide range of use cases:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>New users can start with kubeadm to try Kubernetes out for the first time.<\/li><li>Users familiar with Kubernetes can spin up clusters with kubeadm and test their applications.<\/li><li>Larger projects can include kubeadm as a building block in a more complex system that can also include other installer tools.<\/li><\/ul>\n\n\n\n<p><strong>Pre-requisite <\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>One or more machines running a deb\/rpm-compatible OS, for example Ubuntu or CentOS<\/li><li>2 GB or more of RAM per machine. Any less leaves little room for your apps.<\/li><li>2 CPUs or more on the master<\/li><li>Full network connectivity among all machines in the cluster. A public or private network is fine<\/li><\/ul>\n\n\n\n<p><strong>As part of the installation, every node (master and minions) needs:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Docker<\/li><li>Kubelet<\/li><li>Kubeadm<\/li><li>Kubectl<\/li><li>CNI<\/li><\/ul>\n\n\n\n<p><strong>Step 1 &#8211; Update Ubuntu and install apt-transport-https<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">\n$ apt-<span class=\"hljs-keyword\">get<\/span> update &amp;&amp; apt-<span class=\"hljs-keyword\">get<\/span> install -y apt-transport-https\n$ curl -s https:\/\/packages.cloud.google.com\/apt\/doc\/apt-key.gpg | apt-key add -<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Step 2 &#8211; Add Ubuntu apt repo for docker kubeadm kubectl kubelet kubernetes-cni<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">\n$ cat &lt;&lt;EOF &gt;\/etc\/apt\/sources.<span class=\"hljs-keyword\">list<\/span>.d\/kubernetes.<span class=\"hljs-keyword\">list<\/span>\ndeb http:<span class=\"hljs-comment\">\/\/apt.kubernetes.io\/ kubernetes-xenial main<\/span>\nEOF<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Step 3 &#8211; Install docker kubeadm kubectl kubelet kubernetes-cni<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">\n$ apt-<span class=\"hljs-keyword\">get<\/span> update\n$ apt-<span class=\"hljs-keyword\">get<\/span> install -y docker.io kubeadm kubectl kubelet kubernetes-cni\n$ apt-<span class=\"hljs-keyword\">get<\/span> install -y docker.io kubeadm kubectl kubelet kubernetes-cni<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Step 4 &#8211; Finally, initialize a kubernetes clusters<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">\n$ kubeadm init<\/code><\/span><\/pre>\n\n\n<p><strong>Step 5 &#8211; Output<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">To start using your cluster, you need to run the following <span class=\"hljs-keyword\">as<\/span> a regular user:\n\n  mkdir -p $HOME\/.kube\n  sudo cp -i \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config\n  sudo chown $(id -u):$(id -g) $HOME\/.kube\/config\n\nYou should now deploy a pod network to the cluster.\nRun <span class=\"hljs-string\">\"kubectl apply -f &#91;podnetwork].yaml\"<\/span> <span class=\"hljs-keyword\">with<\/span> one <span class=\"hljs-keyword\">of<\/span> the options listed at:\n  https:<span class=\"hljs-comment\">\/\/kubernetes.io\/docs\/concepts\/cluster-administration\/addons\/<\/span>\n\nThen you can join any number <span class=\"hljs-keyword\">of<\/span> worker nodes by running the following on each <span class=\"hljs-keyword\">as<\/span> root:\n\nkubeadm join <span class=\"hljs-number\">172.31<\/span><span class=\"hljs-number\">.25<\/span><span class=\"hljs-number\">.244<\/span>:<span class=\"hljs-number\">6443<\/span> --token <span class=\"hljs-number\">1<\/span>j1lj9.bw6nb02omjv92owd \\\n    --discovery-token-ca-cert-hash sha256:caca50bf253855d96133c6fdde763629a6fba07d8c57b6b52eacece83f88b4b9<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Step 6 &#8211; Setup Workstation in the Master node only. You can be regular user for it.<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">\n$ mkdir -p $HOME\/.kube\n$ sudo cp -i \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config\n$ sudo chown $(id -u):$(id -g) $HOME\/.kube\/config<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Step 7 &#8211; Verify Clustors<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">\n$ kubectl <span class=\"hljs-keyword\">get<\/span> nodes\n$ kubectl <span class=\"hljs-keyword\">get<\/span> pods --all-namespaces<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Step 8 &#8211; Install Kubernetes pod networking<\/strong><\/p>\n\n\n\n<p>Weave Net provides networking and network policy, will carry on working on both sides of a network partition, and does not require an external database. Kubernetes versions 1.6 and above:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">$ kubectl apply -f <span class=\"hljs-string\">\"https:\/\/cloud.weave.works\/k8s\/net?k8s-version=$(kubectl version | base64 | tr -d '\\n')\"<\/span>\n$ kubectl <span class=\"hljs-keyword\">get<\/span> nodes\n$ kubectl <span class=\"hljs-keyword\">get<\/span> pods --all-namespaces\n$ kubectl <span class=\"hljs-keyword\">get<\/span> nodes<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Step 9 &#8211; Setup nodes [ In the node aka worker ]<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Follow Step 1 <\/span>\n<span class=\"hljs-comment\"># Follow Step 2<\/span>\n<span class=\"hljs-comment\"># Follow Step 3<\/span>\n<span class=\"hljs-comment\"># Run following commands which we got from kubeadm init<\/span>\n$ kubeadm join <span class=\"hljs-number\">172.31<\/span><span class=\"hljs-number\">.31<\/span><span class=\"hljs-number\">.106<\/span>:<span class=\"hljs-number\">6443<\/span> --token pdn6in.r0dzhpx1ucrs69au --discovery-token-ca-cert-hash sha256:a9385951e659a3c67f55ccfbdc1169b1f660ba09aaf8cc6d5cc96d71b71900d2<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"359\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/08\/kubeadm-join-1024x359.jpg\" alt=\"\" class=\"wp-image-23338\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/08\/kubeadm-join-1024x359.jpg 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/08\/kubeadm-join-300x105.jpg 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/08\/kubeadm-join-768x270.jpg 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2021\/08\/kubeadm-join.jpg 1316w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n<div class=\"epyt-gallery\" data-currpage=\"1\" id=\"epyt_gallery_76596\"><figure class=\"wp-block-embed wp-block-embed-youtube is-type-video is-provider-youtube epyt-figure\"><div class=\"wp-block-embed__wrapper\"><iframe loading=\"lazy\"  id=\"_ytid_69203\"  width=\"760\" height=\"427\"  data-origwidth=\"760\" data-origheight=\"427\" src=\"https:\/\/www.youtube.com\/embed\/?enablejsapi=1&#038;autoplay=0&#038;cc_load_policy=0&#038;cc_lang_pref=&#038;iv_load_policy=1&#038;loop=0&#038;rel=1&#038;fs=1&#038;playsinline=0&#038;autohide=2&#038;theme=dark&#038;color=red&#038;controls=1&#038;disablekb=0&#038;\" class=\"__youtube_prefs__  no-lazyload\" title=\"YouTube player\"  data-epytgalleryid=\"epyt_gallery_76596\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe><\/div><\/figure><div class=\"epyt-gallery-list\"><div>Sorry, there was a YouTube error.<\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>What is Kubeadm? Kubeadm helps you bootstrap a minimum viable Kubernetes cluster that conforms to best practices. Kubeadm is a tool built to provide kubeadm init and kubeadm join as best-practice &#8220;fast paths&#8221; for creating Kubernetes clusters. Goal To Install a single master Kubernetes cluster To Install a high availability master Kubernetes cluster To Install&#8230;<\/p>\n","protected":false},"author":1,"featured_media":12784,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_joinchat":[],"footnotes":""},"categories":[4859],"tags":[5459,4947,4860,5677,6041,702],"class_list":["post-6423","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kubernetes","tag-cluster","tag-kubeadm","tag-kubernetes","tag-kubernetes-cluster","tag-manual","tag-ubuntu"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6423","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=6423"}],"version-history":[{"count":5,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6423\/revisions"}],"predecessor-version":[{"id":25454,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6423\/revisions\/25454"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/12784"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=6423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=6423"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=6423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}