{"id":7624,"date":"2018-06-23T09:46:11","date_gmt":"2018-06-23T01:46:11","guid":{"rendered":"http:\/\/rmohan.com\/?p=7624"},"modified":"2018-06-23T09:46:11","modified_gmt":"2018-06-23T01:46:11","slug":"kubernetes-2","status":"publish","type":"post","link":"https:\/\/mohan.sg\/?p=7624","title":{"rendered":"kubernetes"},"content":{"rendered":"<p>two lines info my \/etc\/sysctl.conf<\/p>\n<p>net.bridge.bridge-nf-call-ip6tables = 1<br \/>\nnet.bridge.bridge-nf-call-iptables = 1<\/p>\n<p>sysctl net.bridge.bridge-nf-call-iptables=1<br \/>\nswapoff -a<br \/>\nfirewall-cmd &#8211;reload<br \/>\nmodprobe br_netfilter<br \/>\necho &#8216;1&#8217; &gt; \/proc\/sys\/net\/bridge\/bridge-nf-call-iptables<\/p>\n<p>kubeadm reset<\/p>\n<p>echo &#8216;Environment=&#8221;KUBELET_EXTRA_ARGS=&#8211;fail-swap-on=false&#8221;&#8216; &gt;&gt; \/etc\/systemd\/system\/kubelet.service.d\/10-kubeadm.conf<\/p>\n<p>systemctl daemon-reload<br \/>\nsystemctl restart kubelet<\/p>\n<p>kubeadm init<\/p>\n<p>[root@k8s-master ~]# mkdir -p $HOME\/.kube<br \/>\n[root@k8s-master ~]# cp -i \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config<br \/>\n[root@k8s-master ~]# chown $(id -u):$(id -g) $HOME\/.kube\/config<\/p>\n<p>Step 1: Disable SELinux &amp; setup firewall rules<\/p>\n<p>Login to your kubernetes master node and set the hostname and disable selinux using following commands<\/p>\n<p>~]# hostnamectl set-hostname &#8216;k8s-master&#8217;<br \/>\n~]# exec bash<br \/>\n~]# setenforce 0<br \/>\n~]# sed -i &#8211;follow-symlinks &#8216;s\/SELINUX=enforcing\/SELINUX=disabled\/g&#8217; \/etc\/sysconfig\/selinux<\/p>\n<p>Set the following firewall rules.<\/p>\n<p>[root@k8s-master ~]# firewall-cmd &#8211;permanent &#8211;add-port=6443\/tcp<br \/>\n[root@k8s-master ~]# firewall-cmd &#8211;permanent &#8211;add-port=2379-2380\/tcp<br \/>\n[root@k8s-master ~]# firewall-cmd &#8211;permanent &#8211;add-port=10250\/tcp<br \/>\n[root@k8s-master ~]# firewall-cmd &#8211;permanent &#8211;add-port=10251\/tcp<br \/>\n[root@k8s-master ~]# firewall-cmd &#8211;permanent &#8211;add-port=10252\/tcp<br \/>\n[root@k8s-master ~]# firewall-cmd &#8211;permanent &#8211;add-port=10255\/tcp<br \/>\n[root@k8s-master ~]# firewall-cmd &#8211;reload<br \/>\n[root@k8s-master ~]# modprobe br_netfilter<br \/>\n[root@k8s-master ~]# echo &#8216;1&#8217; &gt; \/proc\/sys\/net\/bridge\/bridge-nf-call-iptables<\/p>\n<p>Note: In case you don\u2019t have your own dns server then update \/etc\/hosts file on master and worker nodes<\/p>\n<p>192.168.1.30 k8s-master<br \/>\n192.168.1.40 worker-node1<br \/>\n192.168.1.50 worker-node2<\/p>\n<p>Step 2: Configure Kubernetes Repository<\/p>\n<p>Kubernetes packages are not available in the default CentOS 7 &amp; RHEL 7 repositories, Use below command to configure its package repositories.<\/p>\n<p>[root@k8s-master ~]# cat &lt;&lt;EOF &gt; \/etc\/yum.repos.d\/kubernetes.repo<br \/>\n&gt; [kubernetes]<br \/>\n&gt; name=Kubernetes<br \/>\n&gt; baseurl=https:\/\/packages.cloud.google.com\/yum\/repos\/kubernetes-el7-x86_64<br \/>\n&gt; enabled=1<br \/>\n&gt; gpgcheck=1<br \/>\n&gt; repo_gpgcheck=1<br \/>\n&gt; gpgkey=https:\/\/packages.cloud.google.com\/yum\/doc\/yum-key.gpg<br \/>\n&gt; https:\/\/packages.cloud.google.com\/yum\/doc\/rpm-package-key.gpg<br \/>\n&gt; EOF [root@k8s-master ~]#<\/p>\n<p>Step 3: Install Kubeadm and Docker<\/p>\n<p>Once the package repositories are configured, run the beneath command to install kubeadm and docker packages.<\/p>\n<p>[root@k8s-master ~]# yum install kubeadm docker -y<\/p>\n<p>Start and enable kubectl and docker service<\/p>\n<p>[root@k8s-master ~]# systemctl restart docker &amp;&amp; systemctl enable docker<br \/>\n[root@k8s-master ~]# systemctl restart kubelet &amp;&amp; systemctl enable kubelet<\/p>\n<p>Step 4: Initialize Kubernetes Master with \u2018kubeadm init\u2019<\/p>\n<p>Run the beneath command to initialize and setup kubernetes master.<\/p>\n<p>[root@k8s-master ~]# kubeadm init<\/p>\n<p>[root@k8s-master ~]# mkdir -p $HOME\/.kube<br \/>\n[root@k8s-master ~]# cp -i \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config<br \/>\n[root@k8s-master ~]# chown $(id -u):$(id -g) $HOME\/.kube\/config<\/p>\n<p>Step 5: Deploy pod network to the cluster<\/p>\n<p>Try to run below commands to get status of cluster and pods.<\/p>\n<p>kubectl-get-nodes<\/p>\n<p>To make the cluster status ready and kube-dns status running, deploy the pod network so that containers of different host communicated each other. POD network is the overlay network between the worker nodes.<\/p>\n<p>Run the beneath command to deploy network.<\/p>\n<p>[root@k8s-master ~]# export kubever=$(kubectl version | base64 | tr -d &#8216;\\n&#8217;)<br \/>\n[root@k8s-master ~]# kubectl apply -f &#8220;https:\/\/cloud.weave.works\/k8s\/net?k8s-version=$kubever&#8221;<br \/>\nserviceaccount &#8220;weave-net&#8221; created<br \/>\nclusterrole &#8220;weave-net&#8221; created<br \/>\nclusterrolebinding &#8220;weave-net&#8221; created<br \/>\ndaemonset &#8220;weave-net&#8221; created<br \/>\n[root@k8s-master ~]#<\/p>\n<p>Now run the following commands to verify the status<\/p>\n<p>[root@k8s-master ~]# kubectl get nodes<br \/>\nNAME STATUS AGE VERSION<br \/>\nk8s-master Ready 1h v1.7.5<br \/>\n[root@k8s-master ~]# kubectl get pods &#8211;all-namespaces<br \/>\nNAMESPACE NAME READY STATUS RESTARTS AGE<br \/>\nkube-system etcd-k8s-master 1\/1 Running 0 57m<br \/>\nkube-system kube-apiserver-k8s-master 1\/1 Running 0 57m<br \/>\nkube-system kube-controller-manager-k8s-master 1\/1 Running 0 57m<br \/>\nkube-system kube-dns-2425271678-044ww 3\/3 Running 0 1h<br \/>\nkube-system kube-proxy-9h259 1\/1 Running 0 1h<br \/>\nkube-system kube-scheduler-k8s-master 1\/1 Running 0 57m<br \/>\nkube-system weave-net-hdjzd 2\/2 Running 0 7m<br \/>\n[root@k8s-master ~]#<\/p>\n<p>Perform the following steps on each worker node<br \/>\nStep 1: Disable SELinux &amp; configure firewall rules on both the nodes<\/p>\n<p>Before disabling SELinux set the hostname on the both nodes as \u2018worker-node1\u2019 and \u2018worker-node2\u2019 respectively<\/p>\n<p>~]# setenforce 0<br \/>\n~]# sed -i &#8211;follow-symlinks &#8216;s\/SELINUX=enforcing\/SELINUX=disabled\/g&#8217; \/etc\/sysconfig\/selinux<br \/>\n~]# firewall-cmd &#8211;permanent &#8211;add-port=10250\/tcp<br \/>\n~]# firewall-cmd &#8211;permanent &#8211;add-port=10255\/tcp<br \/>\n~]# firewall-cmd &#8211;permanent &#8211;add-port=30000-32767\/tcp<br \/>\n~]# firewall-cmd &#8211;permanent &#8211;add-port=6783\/tcp<br \/>\n~]# firewall-cmd &#8211;reload<br \/>\n~]# echo &#8216;1&#8217; &gt; \/proc\/sys\/net\/bridge\/bridge-nf-call-iptables<\/p>\n<p>Step 2: Configure Kubernetes Repositories on both worker nodes<\/p>\n<p>~]# cat &lt;&lt;EOF &gt; \/etc\/yum.repos.d\/kubernetes.repo<br \/>\n[kubernetes]<br \/>\nname=Kubernetes<br \/>\nbaseurl=https:\/\/packages.cloud.google.com\/yum\/repos\/kubernetes-el7-x86_64<br \/>\nenabled=1<br \/>\ngpgcheck=1<br \/>\nrepo_gpgcheck=1<br \/>\ngpgkey=https:\/\/packages.cloud.google.com\/yum\/doc\/yum-key.gpg<br \/>\nhttps:\/\/packages.cloud.google.com\/yum\/doc\/rpm-package-key.gpg<br \/>\nEOF<\/p>\n<p>Step 3: Install kubeadm and docker package on both nodes<\/p>\n<p>[root@worker-node1 ~]# yum install kubeadm docker -y<br \/>\n[root@worker-node2 ~]# yum install kubeadm docker -y<\/p>\n<p>Start and enable docker service<\/p>\n<p>[root@worker-node1 ~]# systemctl restart docker &amp;&amp; systemctl enable docker<br \/>\n[root@worker-node2 ~]# systemctl restart docker &amp;&amp; systemctl enable docker<\/p>\n<p>Step 4: Now Join worker nodes to master node<\/p>\n<p>To join worker nodes to Master node, a token is required. Whenever kubernetes master initialized , then in the output we get command and token. Copy that command and run on both nodes.<\/p>\n<p>[root@worker-node1 ~]# kubeadm join &#8211;token a3bd48.1bc42347c3b35851 192.168.1.30:6443<\/p>\n<p>[root@worker-node2 ~]# kubeadm join &#8211;token a3bd48.1bc42347c3b35851 192.168.1.30:6443<\/p>\n<p>yum update -y<br \/>\nmodprobe br_netfilter<br \/>\nsysctl net.bridge.bridge-nf-call-iptables=1<br \/>\nsysctl net.bridge.bridge-nf-call-ip6tables=1<\/p>\n<p>cat &lt;&lt;EOF &gt; \/etc\/sysctl.d\/k8s.conf<br \/>\nnet.bridge.bridge-nf-call-ip6tables = 1<br \/>\nnet.bridge.bridge-nf-call-iptables = 1<br \/>\nvm.swappiness=0<br \/>\nEOF<br \/>\nsysctl &#8211;system<\/p>\n<p>swapoff -a<\/p>\n<p>yum install -y yum-utils device-mapper-persistent-data lvm2<\/p>\n<p>yum-config-manager &#8211;add-repo https:\/\/download.docker.com\/linux\/centos\/docker-ce.repo<\/p>\n<p>yum makecache fast<\/p>\n<p>cat &lt;&lt;EOF &gt; \/etc\/yum.repos.d\/kubernetes.repo<br \/>\n[kubernetes]<br \/>\nname=Kubernetes<br \/>\nbaseurl=https:\/\/packages.cloud.google.com\/yum\/repos\/kubernetes-el7-x86_64<br \/>\nenabled=1<br \/>\ngpgcheck=1<br \/>\nrepo_gpgcheck=1<br \/>\ngpgkey=https:\/\/packages.cloud.google.com\/yum\/doc\/yum-key.gpg<br \/>\nhttps:\/\/packages.cloud.google.com\/yum\/doc\/rpm-package-key.gpg<br \/>\nEOF<\/p>\n","protected":false},"excerpt":{"rendered":"<p>two lines info my \/etc\/sysctl.conf<\/p>\n<p>net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1<\/p>\n<p>sysctl net.bridge.bridge-nf-call-iptables=1 swapoff -a firewall-cmd &#8211;reload modprobe br_netfilter echo &#8216;1&#8217; &gt; \/proc\/sys\/net\/bridge\/bridge-nf-call-iptables<\/p>\n<p>kubeadm reset<\/p>\n<p>echo &#8216;Environment=&#8221;KUBELET_EXTRA_ARGS=&#8211;fail-swap-on=false&#8221;&#8216; &gt;&gt; \/etc\/systemd\/system\/kubelet.service.d\/10-kubeadm.conf<\/p>\n<p>systemctl daemon-reload systemctl restart kubelet<\/p>\n<p>kubeadm init<\/p>\n<p>[root@k8s-master ~]# mkdir -p $HOME\/.kube [root@k8s-master ~]# cp -i \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config [root@k8s-master ~]# chown $(id -u):$(id -g) $HOME\/.kube\/config<\/p>\n<p>Step [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[92],"tags":[],"_links":{"self":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/7624"}],"collection":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7624"}],"version-history":[{"count":1,"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/7624\/revisions"}],"predecessor-version":[{"id":7625,"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/7624\/revisions\/7625"}],"wp:attachment":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7624"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7624"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7624"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}