{"id":3065,"date":"2017-09-12T17:15:23","date_gmt":"2017-09-12T14:15:23","guid":{"rendered":"https:\/\/www.systemcodegeeks.com\/?p=3065"},"modified":"2017-09-12T12:16:53","modified_gmt":"2017-09-12T09:16:53","slug":"kubernetes-1-7-centos-nailed","status":"publish","type":"post","link":"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/","title":{"rendered":"Kubernetes 1.7 on CentOS: This is How We Nailed It!"},"content":{"rendered":"<p><i><b>Please Note:<\/b> If you are looking for a comprehensive, step-by-step guide on installing Kubernetes on CentOS, check out <a href=\"https:\/\/medium.com\/@hasangi\/kubernetes-setting-up-centos-7-clusters-without-manual-interventions-554b59b46ba1\" target=\"_blank\" rel=\"noopener\">this guide<\/a> (composed by one of my colleagues) instead.<\/i><\/p>\n<p><i><b>Caution:<\/b> This blog was originally composed several months ago, when the K8s release cycle was at <code>v1.7.0-alpha.3<\/code>. As always, K8s has <a href=\"https:\/\/github.com\/kubernetes\/kubernetes\/blob\/master\/CHANGELOG.md\" target=\"_blank\" rel=\"noopener\">zoomed past us<\/a>, hence most of the content would be downright obsolete by now!<\/i><\/p>\n<p>If you are a fan of <a href=\"https:\/\/kubernetes.io\/\" target=\"_blank\" rel=\"noopener\">Kubernetes (K8s)<\/a> and the ton of amazing features it has in store for developers, you would surely agree with me on the fact that <a href=\"http:\/\/kubernetes.io\/docs\/getting-started-guides\/scratch\/\" target=\"_blank\" rel=\"noopener\">getting a local K8s setup up and running<\/a> is one of the most fundamental steps of learning K8s.<\/p>\n<p>Since we have been waiting for quite some time to re-spin our <a href=\"https:\/\/www.adroitlogic.com\/products\/ips\/\" target=\"_blank\" rel=\"noopener\">Integration Platform (IPS)<\/a> product on top of a new K8s version, we decided it was high time to get a brand new cluster up and running with 1.7.0 (which is still in beta as of this writing, but would become stable by the time we migrate our own code on top of it). Due to some stability requirements we wanted a setup running a RedHat-compatible base OS, so we decided to go ahead with CentOS.<\/p>\n<p>While we could have always have followed <a href=\"https:\/\/kubernetes.io\/docs\/setup\/pick-right-solution\/\" target=\"_blank\" rel=\"noopener\">one of the pre-compiled guides<\/a> from K8s docs, such as <a href=\"http:\/\/kubernetes.io\/docs\/getting-started-guides\/centos\/centos_manual_config\/\" target=\"_blank\" rel=\"noopener\">this<\/a>, we wanted to be a bit more adventurous and get things done by way of the K8s source; besides, we wanted to be able to upgrade our set-up when required, for which the best way was to properly understand how the K8s authors have nailed it in the original source.<\/p>\n<p>First of all, we got hold of a clone of <a href=\"https:\/\/github.com\/kubernetes\/kubernetes\" target=\"_blank\" rel=\"noopener\">the K8s source<\/a> at the branch <code>master<\/code> branch (as we needed the latest code base) and tag <code>v1.7.0-alpha.3<\/code> (since we were looking for that specific release).<\/p>\n<p>Next we built the K8s binary artifacts using the <code>make<\/code> command at sources root. (You can utilize the Docker-based cross compilation approach mentioned in the above guide as well, but note that it would download a 1.8+ GB cross compiler image and build artifacts for all platforms resulting in a 20+ GB total size.)<\/p>\n<p>We set up a <a href=\"https:\/\/www.virtualbox.org\/\" target=\"_blank\" rel=\"noopener\">VirtualBox<\/a> virtual machine running CentOS 7, and installed <code>docker<\/code>, <code>etcd<\/code> and <code>flanneld<\/code> afresh. Docker was installed via <code>yum<\/code> (<code>sudo yum install docker<\/code>) and <a href=\"https:\/\/docs.docker.com\/engine\/installation\/linux\/linux-postinstall\/#manage-docker-as-a-non-root-user\" target=\"_blank\" rel=\"noopener\">configured for use by our default, non-root user<\/a>. Others were installed via <code>yum<\/code> as well, with versions <code>etcd-3.1.3-1.el7.x86_64.rpm<\/code> and <code>flannel-0.7.0-1.el7.x86_64.rpm<\/code>, respectively.<\/p>\n<p>We were hoping to clone the machine in order to obtain a multi-node set-up (without undertaking the overhead of installing the individual components on each machine separately). However, this seemingly complicated the whole process.<\/p>\n<p>The default K8s installer for CentOS (located at <a href=\"https:\/\/github.com\/kubernetes\/kubernetes\/tree\/master\/cluster\/centos\" target=\"_blank\" rel=\"noopener\"><code>cluster\/centos<\/code><\/a>) by default downloads archives of K8s client\/server, <code>etcd<\/code>, <code>flanneld<\/code> and <code>docker<\/code> binaries as part of the configuration process. Since we needed to install K8s binaries from our custom build instead, and didn&#8217;t want to download the other binaries at all (as they were already installed), we had to customize the corresponding build and deployment scripts to avoid downloading the artifacts and utilize the build artifacts instead, and to control the reconfiguration of <code>etcd<\/code>, <code>flanneld<\/code> and <code>docker<\/code>.<\/p>\n<p>What follows is a breakdown of the changes we had to perform on top of the <code>v1.7.0-alpha.3<\/code> tag to get things working with native (<code>yum<\/code>-based) installations of <code>etcd<\/code>, <code>flanneld<\/code> and <code>docker<\/code>, with some attempts to explain the rationale behind each change.<\/p>\n<p><i><b>Tip:<\/b><\/i> If you wish to utilize any of these patches, it should be possible to save them into a plaintext file (with or without the <code>.patch<\/code> extension) and apply them on top of <code>v1.7.0-alpha.3<\/code> tag of the K8s source using the <code>git apply<\/code> command.<\/p>\n<p><i><b>Tip:<\/b><\/i> If you only have a subset of the above services (<code>etcd<\/code>, <code>flanneld<\/code> and <code>docker<\/code>) already installed, patch out only the appropriate files\/sections.<\/p>\n<ol>\n<li>Avoiding download of binary artifacts:\n<pre class=\"brush:php\">diff --git a\/cluster\/centos\/build.sh b\/cluster\/centos\/build.sh\r\nindex 18bbe6f..09a3631 100755\r\n--- a\/cluster\/centos\/build.sh\r\n+++ b\/cluster\/centos\/build.sh\r\n@@ -42,19 +42,6 @@ function clean-up() {\r\n function download-releases() {\r\n   rm -rf ${RELEASES_DIR}\r\n   mkdir -p ${RELEASES_DIR}\r\n-\r\n-  echo \"Download flannel release v${FLANNEL_VERSION} ...\"\r\n-  curl -L ${FLANNEL_DOWNLOAD_URL} -o ${RELEASES_DIR}\/flannel.tar.gz\r\n-\r\n-  echo \"Download etcd release v${ETCD_VERSION} ...\"\r\n-  curl -L ${ETCD_DOWNLOAD_URL} -o ${RELEASES_DIR}\/etcd.tar.gz\r\n-\r\n-  echo \"Download kubernetes release v${K8S_VERSION} ...\"\r\n-  curl -L ${K8S_CLIENT_DOWNLOAD_URL} -o ${RELEASES_DIR}\/kubernetes-client-linux-amd64.tar.gz\r\n-  curl -L ${K8S_SERVER_DOWNLOAD_URL} -o ${RELEASES_DIR}\/kubernetes-server-linux-amd64.tar.gz\r\n-\r\n-  echo \"Download docker release v${DOCKER_VERSION} ...\"\r\n-  curl -L ${DOCKER_DOWNLOAD_URL} -o ${RELEASES_DIR}\/docker.tar.gz\r\n }\r\n \r\n function unpack-releases() {\r\n@@ -80,19 +67,12 @@ function unpack-releases() {\r\n   fi\r\n \r\n   # k8s\r\n-  if [[ -f ${RELEASES_DIR}\/kubernetes-client-linux-amd64.tar.gz ]] ; then\r\n-    tar xzf ${RELEASES_DIR}\/kubernetes-client-linux-amd64.tar.gz -C ${RELEASES_DIR}\r\n     cp ${RELEASES_DIR}\/kubernetes\/client\/bin\/kubectl ${BINARY_DIR}\r\n-  fi\r\n-\r\n-  if [[ -f ${RELEASES_DIR}\/kubernetes-server-linux-amd64.tar.gz ]] ; then\r\n-    tar xzf ${RELEASES_DIR}\/kubernetes-server-linux-amd64.tar.gz -C ${RELEASES_DIR}\r\n     cp ${RELEASES_DIR}\/kubernetes\/server\/bin\/kube-apiserver \\\r\n        ${RELEASES_DIR}\/kubernetes\/server\/bin\/kube-controller-manager \\\r\n        ${RELEASES_DIR}\/kubernetes\/server\/bin\/kube-scheduler ${BINARY_DIR}\/master\/bin\r\n     cp ${RELEASES_DIR}\/kubernetes\/server\/bin\/kubelet \\\r\n        ${RELEASES_DIR}\/kubernetes\/server\/bin\/kube-proxy ${BINARY_DIR}\/node\/bin\r\n-  fi\r\n \r\n   # docker\r\n   if [[ -f ${RELEASES_DIR}\/docker.tar.gz ]]; then<\/pre>\n<\/li>\n<li>Avoiding verification of artifacts (since we no longer download them):\n<pre class=\"brush:php\">diff --git a\/cluster\/kube-up.sh b\/cluster\/kube-up.sh\r\nindex 7877fb9..9e793ce 100755\r\n--- a\/cluster\/kube-up.sh\r\n+++ b\/cluster\/kube-up.sh\r\n@@ -40,8 +40,6 @@ fi\r\n \r\n echo \"... calling verify-prereqs\" &gt;&amp;2\r\n verify-prereqs\r\n-echo \"... calling verify-kube-binaries\" &gt;&amp;2\r\n-verify-kube-binaries\r\n \r\n if [[ \"${KUBE_STAGE_IMAGES:-}\" == \"true\" ]]; then\r\n   echo \"... staging images\" &gt;&amp;2<\/pre>\n<\/li>\n<li>Coping for natively-installed <code>etcd<\/code> and <code>flanneld<\/code> binaries (which are located (rather symlinked) at <code>\/usr\/bin<\/code> instead of <code>\/opt\/kubernetes\/bin<\/code> where K8s expects them to be):\n<pre class=\"brush:php; wrap-lines:false\">diff --git a\/cluster\/centos\/master\/scripts\/etcd.sh b\/cluster\/centos\/master\/scripts\/etcd.sh\r\nindex aa73b57..6b575da 100755\r\n--- a\/cluster\/centos\/master\/scripts\/etcd.sh\r\n+++ b\/cluster\/centos\/master\/scripts\/etcd.sh\r\n@@ -74,7 +74,7 @@ Type=simple\r\n WorkingDirectory=${etcd_data_dir}\r\n EnvironmentFile=-\/opt\/kubernetes\/cfg\/etcd.conf\r\n # set GOMAXPROCS to number of processors\r\n-ExecStart=\/bin\/bash -c \"GOMAXPROCS=\\$(nproc) \/opt\/kubernetes\/bin\/etcd\"\r\n+ExecStart=\/bin\/bash -c \"GOMAXPROCS=\\$(nproc) \/usr\/bin\/etcd\"\r\n Type=notify\r\n \r\n [Install]\r\ndiff --git a\/cluster\/centos\/master\/scripts\/flannel.sh b\/cluster\/centos\/master\/scripts\/flannel.sh\r\nindex 092fcd8..5d9630d 100644\r\n--- a\/cluster\/centos\/master\/scripts\/flannel.sh\r\n+++ b\/cluster\/centos\/master\/scripts\/flannel.sh\r\n@@ -37,7 +37,7 @@ After=network.target\r\n \r\n [Service]\r\n EnvironmentFile=-\/opt\/kubernetes\/cfg\/flannel\r\n-ExecStart=\/opt\/kubernetes\/bin\/flanneld --ip-masq \\${FLANNEL_ETCD} \\${FLANNEL_ETCD_KEY} \\${FLANNEL_ETCD_CAFILE} \\${FLANNEL_ETCD_CERTFILE} \\${FLANNEL_ETCD_KEYFILE}\r\n+ExecStart=\/usr\/bin\/flanneld --ip-masq \\${FLANNEL_ETCD} \\${FLANNEL_ETCD_KEY} \\${FLANNEL_ETCD_CAFILE} \\${FLANNEL_ETCD_CERTFILE} \\${FLANNEL_ETCD_KEYFILE}\r\n \r\n Type=notify\r\n \r\n@@ -48,7 +48,7 @@ EOF\r\n # Store FLANNEL_NET to etcd.\r\n attempt=0\r\n while true; do\r\n-  \/opt\/kubernetes\/bin\/etcdctl --ca-file ${CA_FILE} --cert-file ${CERT_FILE} --key-file ${KEY_FILE} \\\r\n+  \/usr\/bin\/etcdctl --ca-file ${CA_FILE} --cert-file ${CERT_FILE} --key-file ${KEY_FILE} \\\r\n     --no-sync -C ${ETCD_SERVERS} \\\r\n     get \/coreos.com\/network\/config &gt;\/dev\/null 2&gt;&amp;1\r\n   if [[ \"$?\" == 0 ]]; then\r\n@@ -59,7 +59,7 @@ while true; do\r\n       exit 2\r\n     fi\r\n \r\n-    \/opt\/kubernetes\/bin\/etcdctl --ca-file ${CA_FILE} --cert-file ${CERT_FILE} --key-file ${KEY_FILE} \\\r\n+    \/usr\/bin\/etcdctl --ca-file ${CA_FILE} --cert-file ${CERT_FILE} --key-file ${KEY_FILE} \\\r\n       --no-sync -C ${ETCD_SERVERS} \\\r\n       mk \/coreos.com\/network\/config \"{\\\"Network\\\":\\\"${FLANNEL_NET}\\\"}\" &gt;\/dev\/null 2&gt;&amp;1\r\n     attempt=$((attempt+1))\r\ndiff --git a\/cluster\/centos\/node\/bin\/mk-docker-opts.sh b\/cluster\/centos\/node\/bin\/mk-docker-opts.sh\r\nindex 041d977..177ee9f 100755\r\n--- a\/cluster\/centos\/node\/bin\/mk-docker-opts.sh\r\n+++ b\/cluster\/centos\/node\/bin\/mk-docker-opts.sh\r\n@@ -69,7 +69,6 @@ done\r\n \r\n if [[ $indiv_opts = false ]] &amp;&amp; [[ $combined_opts = false ]]; then\r\n   indiv_opts=true\r\n-  combined_opts=true\r\n fi\r\n \r\n if [[ -f \"$flannel_env\" ]]; then\r\ndiff --git a\/cluster\/centos\/node\/scripts\/docker.sh b\/cluster\/centos\/node\/scripts\/docker.sh\r\nindex 320446a..3f38f3e 100755\r\n--- a\/cluster\/centos\/node\/scripts\/docker.sh\r\n+++ b\/cluster\/centos\/node\/scripts\/docker.sh\r\n@@ -35,7 +35,7 @@ Type=notify\r\n EnvironmentFile=-\/run\/flannel\/docker\r\n EnvironmentFile=-\/opt\/kubernetes\/cfg\/docker\r\n WorkingDirectory=\/opt\/kubernetes\/bin\r\n-ExecStart=\/opt\/kubernetes\/bin\/dockerd \\$DOCKER_OPT_BIP \\$DOCKER_OPT_MTU \\$DOCKER_OPTS\r\n+ExecStart=\/usr\/bin\/dockerd \\$DOCKER_OPT_BIP \\$DOCKER_OPT_MTU \\$DOCKER_OPTS\r\n LimitNOFILE=1048576\r\n LimitNPROC=1048576\r\n \r\ndiff --git a\/cluster\/centos\/node\/scripts\/flannel.sh b\/cluster\/centos\/node\/scripts\/flannel.sh\r\nindex 2830dae..384788f 100755\r\n--- a\/cluster\/centos\/node\/scripts\/flannel.sh\r\n+++ b\/cluster\/centos\/node\/scripts\/flannel.sh\r\n@@ -39,7 +39,7 @@ Before=docker.service\r\n [Service]\r\n EnvironmentFile=-\/opt\/kubernetes\/cfg\/flannel\r\n ExecStartPre=\/opt\/kubernetes\/bin\/remove-docker0.sh\r\n-ExecStart=\/opt\/kubernetes\/bin\/flanneld --ip-masq \\${FLANNEL_ETCD} \\${FLANNEL_ETCD_KEY} \\${FLANNEL_ETCD_CAFILE} \\${FLANNEL_ETCD_CERTFILE} \\${FLANNEL_ETCD_KEYFILE}\r\n+ExecStart=\/usr\/bin\/flanneld --ip-masq \\${FLANNEL_ETCD} \\${FLANNEL_ETCD_KEY} \\${FLANNEL_ETCD_CAFILE} \\${FLANNEL_ETCD_CERTFILE} \\${FLANNEL_ETCD_KEYFILE}\r\n ExecStartPost=\/opt\/kubernetes\/bin\/mk-docker-opts.sh -d \/run\/flannel\/docker\r\n \r\n Type=notify\r\n@@ -52,7 +52,7 @@ EOF\r\n # Store FLANNEL_NET to etcd.\r\n attempt=0\r\n while true; do\r\n-  \/opt\/kubernetes\/bin\/etcdctl --ca-file ${CA_FILE} --cert-file ${CERT_FILE} --key-file ${KEY_FILE} \\\r\n+  \/usr\/bin\/etcdctl --ca-file ${CA_FILE} --cert-file ${CERT_FILE} --key-file ${KEY_FILE} \\\r\n     --no-sync -C ${ETCD_SERVERS} \\\r\n     get \/coreos.com\/network\/config &gt;\/dev\/null 2&gt;&amp;1\r\n   if [[ \"$?\" == 0 ]]; then\r\n@@ -63,7 +63,7 @@ while true; do\r\n       exit 2\r\n     fi\r\n \r\n-    \/opt\/kubernetes\/bin\/etcdctl --ca-file ${CA_FILE} --cert-file ${CERT_FILE} --key-file ${KEY_FILE} \\\r\n+    \/usr\/bin\/etcdctl --ca-file ${CA_FILE} --cert-file ${CERT_FILE} --key-file ${KEY_FILE} \\\r\n       --no-sync -C ${ETCD_SERVERS} \\\r\n       mk \/coreos.com\/network\/config \"{\\\"Network\\\":\\\"${FLANNEL_NET}\\\"}\" &gt;\/dev\/null 2&gt;&amp;1\r\n     attempt=$((attempt+1))<\/pre>\n<\/li>\n<\/ol>\n<p>Once all fixes were in place, all we needed to do to get the ball rolling, was to run<\/p>\n<pre class=\"brush:php\">MASTER=adrt@192.168.1.192 \\\r\nNODES=\"adrt@192.168.1.192 adrt@192.168.1.193 adrt@192.168.1.194\" \\\r\nDOCKER_OPTS=\"--insecure-registry=hub.adroitlogic.com:5000\" \\\r\nKUBERNETES_PROVIDER=centos \\\r\nCERT_GROUP=janaka \\\r\n.\/kube-up.sh<\/pre>\n<p>within the <code>cluster<\/code> directory of the K8s source.<\/p>\n<ul>\n<li>Our master node is <code>192.168.1.192<\/code>.<\/li>\n<li>We have 3 worker nodes, <code>192.168.1.192<\/code>, <code>192.168.1.193<\/code> and <code>192.168.1.194<\/code>.<\/li>\n<li>Our master node itself is a worker node (since we often don&#8217;t have enough resources on our machines, to run a dedicated master).<\/li>\n<li><code>adrt<\/code> is the CentOS user on each node (with superuser privileges).<\/li>\n<li><code>janaka<\/code> is the username on my local machine (where the <code>kube-up.sh<\/code> script actually gets executed).<\/li>\n<li>We have a local Docker hub for holding our IPS images, at <code>hub.adroitlogic.com:5000<\/code> (resolved via internal hostname mappings), which we need to inject to the Docker startup script (in order to be able to utilize our own images within the future IPS set-up).<\/li>\n<\/ul>\n<p>And within minutes, we got a working K8s cluster!<\/p>\n<p><i><b>P.S.:<\/b><\/i> All this happened a long time ago, and we utilized the cluster in developing and testing our <a href=\"https:\/\/developer.adroitlogic.com\/ips\/docs\/17.07\/overview\/\" target=\"_blank\" rel=\"noopener\">Integration Platform (IPS)<\/a>, whose latest 17.07 release is now <a href=\"https:\/\/www.adroitlogic.com\/products\/ips\/#download\" target=\"_blank\" rel=\"noopener\">available for download<\/a>. Check it out; you may happen to like it.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/randomizd.blogspot.com\/2017\/09\/kubernetes-17-on-centos-this-is-how-we.html\">Kubernetes 1.7 on CentOS: This is How We Nailed It!<\/a> from our <a href=\"http:\/\/www.systemcodegeeks.com\/join-us\/scg\/\">SCG partner<\/a> Janaka Bandara at the <a href=\"http:\/\/randomizd.blogspot.com\">Randomizd | Random Thoughts Serialized<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Please Note: If you are looking for a comprehensive, step-by-step guide on installing Kubernetes on CentOS, check out this guide (composed by one of my colleagues) instead. Caution: This blog was originally composed several months ago, when the K8s release cycle was at v1.7.0-alpha.3. As always, K8s has zoomed past us, hence most of the &hellip;<\/p>\n","protected":false},"author":300,"featured_media":188,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[39],"tags":[],"class_list":["post-3065","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kubernetes 1.7 on CentOS: This is How We Nailed It! - System Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"Please Note: If you are looking for a comprehensive, step-by-step guide on installing Kubernetes on CentOS, check out this guide (composed by one of my\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kubernetes 1.7 on CentOS: This is How We Nailed It! - System Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"Please Note: If you are looking for a comprehensive, step-by-step guide on installing Kubernetes on CentOS, check out this guide (composed by one of my\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/\" \/>\n<meta property=\"og:site_name\" content=\"System Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/systemcodegeeks\" \/>\n<meta property=\"article:author\" content=\"https:\/\/m.facebook.com\/ukjubandara\/\" \/>\n<meta property=\"article:published_time\" content=\"2017-09-12T14:15:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/devops-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Janaka Bandara\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@janakaud\" \/>\n<meta name=\"twitter:site\" content=\"@systemcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Janaka Bandara\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/\"},\"author\":{\"name\":\"Janaka Bandara\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/#\/schema\/person\/0003dc4337b73d54d7384cdd7ec44e6e\"},\"headline\":\"Kubernetes 1.7 on CentOS: This is How We Nailed It!\",\"datePublished\":\"2017-09-12T14:15:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/\"},\"wordCount\":852,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/devops-logo.jpg\",\"articleSection\":[\"DevOps\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/\",\"url\":\"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/\",\"name\":\"Kubernetes 1.7 on CentOS: This is How We Nailed It! - System Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/devops-logo.jpg\",\"datePublished\":\"2017-09-12T14:15:23+00:00\",\"description\":\"Please Note: If you are looking for a comprehensive, step-by-step guide on installing Kubernetes on CentOS, check out this guide (composed by one of my\",\"breadcrumb\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/#primaryimage\",\"url\":\"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/devops-logo.jpg\",\"contentUrl\":\"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/devops-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.systemcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DevOps\",\"item\":\"https:\/\/www.systemcodegeeks.com\/category\/devops\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Kubernetes 1.7 on CentOS: This is How We Nailed It!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/#website\",\"url\":\"https:\/\/www.systemcodegeeks.com\/\",\"name\":\"System Code Geeks\",\"description\":\"Operating System Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.systemcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.systemcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.systemcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/systemcodegeeks\",\"https:\/\/x.com\/systemcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/#\/schema\/person\/0003dc4337b73d54d7384cdd7ec44e6e\",\"name\":\"Janaka Bandara\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.systemcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c80abe449651e6f36269b02e1dc5ce942bc5c51a4e857cb8bea2b02a04793772?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c80abe449651e6f36269b02e1dc5ce942bc5c51a4e857cb8bea2b02a04793772?s=96&d=mm&r=g\",\"caption\":\"Janaka Bandara\"},\"description\":\"A budding software engineer in the enterprise integration space, and a simplistic guy who likes to learn, appreciate, help, share, and enjoy life\",\"sameAs\":[\"http:\/\/randomizd.blogspot.com\",\"https:\/\/m.facebook.com\/ukjubandara\/\",\"https:\/\/www.linkedin.com\/in\/janakaubandara\",\"https:\/\/x.com\/janakaud\"],\"url\":\"https:\/\/www.systemcodegeeks.com\/author\/janaka-bandara\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kubernetes 1.7 on CentOS: This is How We Nailed It! - System Code Geeks - 2026","description":"Please Note: If you are looking for a comprehensive, step-by-step guide on installing Kubernetes on CentOS, check out this guide (composed by one of my","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/","og_locale":"en_US","og_type":"article","og_title":"Kubernetes 1.7 on CentOS: This is How We Nailed It! - System Code Geeks - 2026","og_description":"Please Note: If you are looking for a comprehensive, step-by-step guide on installing Kubernetes on CentOS, check out this guide (composed by one of my","og_url":"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/","og_site_name":"System Code Geeks","article_publisher":"https:\/\/www.facebook.com\/systemcodegeeks","article_author":"https:\/\/m.facebook.com\/ukjubandara\/","article_published_time":"2017-09-12T14:15:23+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/devops-logo.jpg","type":"image\/jpeg"}],"author":"Janaka Bandara","twitter_card":"summary_large_image","twitter_creator":"@janakaud","twitter_site":"@systemcodegeeks","twitter_misc":{"Written by":"Janaka Bandara","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/#article","isPartOf":{"@id":"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/"},"author":{"name":"Janaka Bandara","@id":"https:\/\/www.systemcodegeeks.com\/#\/schema\/person\/0003dc4337b73d54d7384cdd7ec44e6e"},"headline":"Kubernetes 1.7 on CentOS: This is How We Nailed It!","datePublished":"2017-09-12T14:15:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/"},"wordCount":852,"commentCount":0,"publisher":{"@id":"https:\/\/www.systemcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/#primaryimage"},"thumbnailUrl":"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/devops-logo.jpg","articleSection":["DevOps"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/","url":"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/","name":"Kubernetes 1.7 on CentOS: This is How We Nailed It! - System Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.systemcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/#primaryimage"},"image":{"@id":"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/#primaryimage"},"thumbnailUrl":"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/devops-logo.jpg","datePublished":"2017-09-12T14:15:23+00:00","description":"Please Note: If you are looking for a comprehensive, step-by-step guide on installing Kubernetes on CentOS, check out this guide (composed by one of my","breadcrumb":{"@id":"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/#primaryimage","url":"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/devops-logo.jpg","contentUrl":"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2016\/01\/devops-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.systemcodegeeks.com\/devops\/kubernetes-1-7-centos-nailed\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.systemcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"DevOps","item":"https:\/\/www.systemcodegeeks.com\/category\/devops\/"},{"@type":"ListItem","position":3,"name":"Kubernetes 1.7 on CentOS: This is How We Nailed It!"}]},{"@type":"WebSite","@id":"https:\/\/www.systemcodegeeks.com\/#website","url":"https:\/\/www.systemcodegeeks.com\/","name":"System Code Geeks","description":"Operating System Developers Resource Center","publisher":{"@id":"https:\/\/www.systemcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.systemcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.systemcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.systemcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.systemcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.systemcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.systemcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/systemcodegeeks","https:\/\/x.com\/systemcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.systemcodegeeks.com\/#\/schema\/person\/0003dc4337b73d54d7384cdd7ec44e6e","name":"Janaka Bandara","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.systemcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c80abe449651e6f36269b02e1dc5ce942bc5c51a4e857cb8bea2b02a04793772?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c80abe449651e6f36269b02e1dc5ce942bc5c51a4e857cb8bea2b02a04793772?s=96&d=mm&r=g","caption":"Janaka Bandara"},"description":"A budding software engineer in the enterprise integration space, and a simplistic guy who likes to learn, appreciate, help, share, and enjoy life","sameAs":["http:\/\/randomizd.blogspot.com","https:\/\/m.facebook.com\/ukjubandara\/","https:\/\/www.linkedin.com\/in\/janakaubandara","https:\/\/x.com\/janakaud"],"url":"https:\/\/www.systemcodegeeks.com\/author\/janaka-bandara\/"}]}},"_links":{"self":[{"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/posts\/3065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/users\/300"}],"replies":[{"embeddable":true,"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/comments?post=3065"}],"version-history":[{"count":0,"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/posts\/3065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/media\/188"}],"wp:attachment":[{"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/media?parent=3065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/categories?post=3065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.systemcodegeeks.com\/wp-json\/wp\/v2\/tags?post=3065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}