{"id":6857,"date":"2017-07-12T21:15:23","date_gmt":"2017-07-12T13:15:23","guid":{"rendered":"http:\/\/rmohan.com\/?p=6857"},"modified":"2017-07-12T21:15:42","modified_gmt":"2017-07-12T13:15:42","slug":"kubernetes-1-4-cluster-setupkubernetes-1-4-cluster-setup","status":"publish","type":"post","link":"https:\/\/mohan.sg\/?p=6857","title":{"rendered":"Kubernetes 1.4 Cluster SetupKubernetes 1.4 Cluster Setup"},"content":{"rendered":"<p><strong>Kubernetes 1.4 Cluster SetupKubernetes 1.4 Cluster Setup<\/strong><\/p>\n<p>Distance kubernetes 1.4 has been released for some time, version 1.4 adds many new features, one of the more useful features is the addition to quickly create a cluster of basic needs only two commands will be able to build success; but due to reasons known to all (fuck GFW), resulting in kuadm command does not work, the following records for a moment solutions<br \/>\n<strong>First, prepare the environment<\/strong><br \/>\n3 basic environment for virtual machines, virtual machine information is as follows<\/p>\n<p>192.168.1.107 master<\/p>\n<p>192.168.1.126 node1<\/p>\n<p>192.168.1.217 node2<\/p>\n<p>install docker<br \/>\ndocker used here is the 1.12.1 version, install directly from the official tutorial, if slower speed can be switched domestic sources, such as Tsinghua docker source, specifically requested<\/p>\n<p>Google<br \/>\ntee \/etc\/yum.repos.d\/docker.repo<\/p>\n<p>&lt;&lt;-&#8216;EOF'[dockerrepo]name=Docker<\/p>\n<p>Repositorybaseurl=https:\/\/yum.dockerproject.org\/repo\/main\/CentOS\/7\/enabled=1<\/p>\n<p>gpgcheck=1<\/p>\n<p>gpgkey=https:\/\/yum.dockerproject.org\/gpgEOF<\/p>\n<p>yum install docker-engine -y<\/p>\n<p>systemctl enable dockersystemctl<\/p>\n<p>start dockersystemctl status<\/p>\n<p>docker1.2,<\/p>\n<p>modify the hostname<br \/>\n3 Because virtual machines are copied from a virtual machine basis, in order not to affect the kubectl get nodesquery, you need to change the host name of virtual machines, the following example for the master node, the other nodes correspond to amend<br \/>\necho &#8220;master&#8221; &gt; \/etc\/hostname<\/p>\n<p># \u00a0hosts localhost<\/p>\n<p>vim \/etc\/hosts<\/p>\n<p>127.0.0.1 \u00a0 master::1<\/p>\n<p>&nbsp;<\/p>\n<p>192.168.1.107 master<\/p>\n<p>192.168.1.126 \u00a0node1<\/p>\n<p>192.168.1.217 node2<\/p>\n<p>Second, build a cluster kubernetes<br \/>\n2.1, mounting basic components<br \/>\nAccording to the official documentation tutorial need to install kubelet, kubeadm, kubectl, kubernetes-cnifour rpm package, but due to the fact GFW reason Google can not download the source rpm, the following is my downloaded to the local through the ladder, rpm download method can help yumdownloader tools specifically requested<\/p>\n<p>Google<\/p>\n<pre class=\"highlight\"><code><span class=\"c\">socat<\/span>\r\nyum install -y socat<\/code><\/pre>\n<pre class=\"highlight\"><code><span class=\"nv\">rpms<\/span><span class=\"o\">=(<\/span>5ce829590fb4d5c860b80e73d4483b8545496a13f68ff3033ba76fa72632a3b6-kubernetes-cni-0.3.0.1-0.07a8a2.x86_64.rpm <span class=\"se\">\\<\/span>\r\n     bbad6f8b76467d0a5c40fe0f5a1d92500baef49dedff2944e317936b110524eb-kubeadm-1.5.0-0.alpha.0.1534.gcf7301f.x86_64.rpm <span class=\"se\">\\<\/span>\r\n     c37966352c9d394bf2cc1f755938dfb679aa45ac866d3eb1775d9c9b87d5e177-kubelet-1.4.0-0.x86_64.rpm <span class=\"se\">\\<\/span>\r\n     fac5b4cd036d76764306bd1df7258394b200be4c11f4e3fdd100bfb25a403ed4-kubectl-1.4.0-0.x86_64.rpm<span class=\"o\">)<\/span>\r\n<span class=\"k\">for <\/span>rpmName <span class=\"k\">in<\/span> <span class=\"k\">${<\/span><span class=\"nv\">rpms<\/span><span class=\"p\">[@]<\/span><span class=\"k\">}<\/span>; <span class=\"k\">do\r\n  <\/span>wget http:\/\/upyun.mritd.me\/kubernetes\/<span class=\"nv\">$rpmName<\/span>\r\n<span class=\"k\">done<\/span>\r\nrpm -ivh <span class=\"k\">*<\/span>.rpm<\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"highlight\"><code>systemctl <span class=\"nb\">enable <\/span>docker\r\nsystemctl <span class=\"nb\">enable <\/span>kubelet\r\nsystemctl start docker\r\nsystemctl start kubelet<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>systemctl enable dockersystemctl enable kubeletsystemctl start dockersystemctl start kubeletAt this view kubelet in fact failed to start because of the lack of configuration, the deployment will automatically restart after a successful<br \/>\nBefore the official use kubeadm create a cluster also need to turn off selinux, the next version of this issue has been resolved<br \/>\n# \u00a0selinuxsetenforce 02.3, import the relevant image<br \/>\nkubeadm will pull relevant image, due to GFW will cause eventual failure can not be downloaded, so the best way is to use a ladder pull down, and then go in to load, the following is required load into a mirror<\/p>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td>gcr.io\/google_containers\/kube-proxy-amd64<\/td>\n<td>v1.4.0<\/td>\n<\/tr>\n<tr>\n<td>gcr.io\/google_containers\/kube-discovery-amd64<\/td>\n<td>1.0<\/td>\n<\/tr>\n<tr>\n<td>gcr.io\/google_containers\/kubedns-amd64<\/td>\n<td>1.7<\/td>\n<\/tr>\n<tr>\n<td>gcr.io\/google_containers\/kube-scheduler-amd64<\/td>\n<td>v1.4.0<\/td>\n<\/tr>\n<tr>\n<td>gcr.io\/google_containers\/kube-controller-manager-amd64<\/td>\n<td>v1.4.0<\/td>\n<\/tr>\n<tr>\n<td>gcr.io\/google_containers\/kube-apiserver-amd64<\/td>\n<td>v1.4.0<\/td>\n<\/tr>\n<tr>\n<td>gcr.io\/google_containers\/etcd-amd64<\/td>\n<td>2.2.5<\/td>\n<\/tr>\n<tr>\n<td>gcr.io\/google_containers\/kube-dnsmasq-amd64<\/td>\n<td>1.3<\/td>\n<\/tr>\n<tr>\n<td>gcr.io\/google_containers\/exechealthz-amd64<\/td>\n<td>1.1<\/td>\n<\/tr>\n<tr>\n<td>gcr.io\/google_containers\/pause-amd64<\/td>\n<td>3.0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<pre class=\"highlight\"><code><span class=\"nv\">images<\/span><span class=\"o\">=(<\/span>kube-proxy-amd64:v1.4.0 kube-discovery-amd64:1.0 kubedns-amd64:1.7 kube-scheduler-amd64:v1.4.0 kube-controller-manager-amd64:v1.4.0 kube-apiserver-amd64:v1.4.0 etcd-amd64:2.2.5 kube-dnsmasq-amd64:1.3 exechealthz-amd64:1.1 pause-amd64:3.0 kubernetes-dashboard-amd64:v1.4.0<span class=\"o\">)<\/span>\r\n<span class=\"k\">for <\/span>imageName <span class=\"k\">in<\/span> <span class=\"k\">${<\/span><span class=\"nv\">images<\/span><span class=\"p\">[@]<\/span><span class=\"k\">}<\/span> ; <span class=\"k\">do\r\n  <\/span>docker pull mritd\/<span class=\"nv\">$imageName<\/span>\r\n  docker tag mritd\/<span class=\"nv\">$imageName<\/span> gcr.io\/google_containers\/<span class=\"nv\">$imageName<\/span>\r\n  docker rmi mritd\/<span class=\"nv\">$imageName<\/span>\r\n<span class=\"k\">done<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"highlight\"><code>kubeadm init --api-advertise-addresses<span class=\"o\">=<\/span>192.168.1.107<\/code><\/pre>\n<pre class=\"highlight\"><code>?  ~ kubeadm init --api-advertise-addresses<span class=\"o\">=<\/span>192.168.1.107\r\n<span class=\"gp\">&lt;master\/tokens&gt; <\/span>generated token: <span class=\"s2\">\"42354d.e1fb733ed0c9a932\"<\/span>\r\n<span class=\"gp\">&lt;master\/pki&gt; <\/span>created keys and certificates <span class=\"k\">in<\/span> <span class=\"s2\">\"\/etc\/kubernetes\/pki\"<\/span>\r\n<span class=\"gp\">&lt;util\/kubeconfig&gt; <\/span>created <span class=\"s2\">\"\/etc\/kubernetes\/kubelet.conf\"<\/span>\r\n<span class=\"gp\">&lt;util\/kubeconfig&gt; <\/span>created <span class=\"s2\">\"\/etc\/kubernetes\/admin.conf\"<\/span>\r\n<span class=\"gp\">&lt;master\/apiclient&gt; <\/span>created API client configuration\r\n<span class=\"gp\">&lt;master\/apiclient&gt; <\/span>created API client, waiting <span class=\"k\">for <\/span>the control plane to become ready\r\n<span class=\"gp\">&lt;master\/apiclient&gt; <\/span>all control plane components are healthy after 18.921781 seconds\r\n<span class=\"gp\">&lt;master\/apiclient&gt; <\/span>waiting <span class=\"k\">for <\/span>at least one node to register and become ready\r\n<span class=\"gp\">&lt;master\/apiclient&gt; <\/span>first node is ready after 2.014976 seconds\r\n<span class=\"gp\">&lt;master\/discovery&gt; <\/span>created essential addon: kube-discovery, waiting <span class=\"k\">for <\/span>it to become ready\r\n<span class=\"gp\">&lt;master\/discovery&gt; <\/span>kube-discovery is ready after 3.505092 seconds\r\n<span class=\"gp\">&lt;master\/addons&gt; <\/span>created essential addon: kube-proxy\r\n<span class=\"gp\">&lt;master\/addons&gt; <\/span>created essential addon: kube-dns\r\n\r\nKubernetes master initialised successfully!<\/code><\/pre>\n<div class=\"language-sh highlighter-rouge\">\n<pre class=\"highlight\"><code>You can now join any number of machines by running the following on each node:\r\n\r\nkubeadm join --token 42354d.e1fb733ed0c9a932 192.168.1.107\r\n<\/code><\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<div class=\"language-sh highlighter-rouge\">\n<pre class=\"highlight\"><code>kubeadm join --token 42354d.e1fb733ed0c9a932 192.168.1.107\r\n<\/code><\/pre>\n<\/div>\n<p>master ? get nodes ?<strong>\u00a0master \u00a0pod? master \u00a0<code class=\"highlighter-rouge\">kubectl taint nodes --all dedicated<\/code><\/strong><\/p>\n<div class=\"language-sh highlighter-rouge\">\n<pre class=\"highlight\"><code>?  ~ kubectl get nodes                                   \r\nNAME      STATUS    AGE\r\nmaster    Ready     1m\r\nnode1     Ready     1m\r\nnode2     Ready     1m\r\n\r\n\r\n<\/code><\/pre>\n<pre class=\"highlight\"><code>kubectl apply -f https:\/\/git.io\/weave-kube<\/code><\/pre>\n<pre class=\"highlight\"><code><\/code><\/pre>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Kubernetes 1.4 Cluster SetupKubernetes 1.4 Cluster Setup<\/p>\n<p>Distance kubernetes 1.4 has been released for some time, version 1.4 adds many new features, one of the more useful features is the addition to quickly create a cluster of basic needs only two commands will be able to build success; but due to reasons known to all [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[82],"tags":[],"_links":{"self":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/6857"}],"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=6857"}],"version-history":[{"count":2,"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/6857\/revisions"}],"predecessor-version":[{"id":6859,"href":"https:\/\/mohan.sg\/index.php?rest_route=\/wp\/v2\/posts\/6857\/revisions\/6859"}],"wp:attachment":[{"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6857"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6857"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mohan.sg\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6857"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}