{"id":12241,"date":"2016-05-04T13:41:23","date_gmt":"2016-05-04T10:41:23","guid":{"rendered":"https:\/\/www.webcodegeeks.com\/?p=12241"},"modified":"2016-05-04T13:41:23","modified_gmt":"2016-05-04T10:41:23","slug":"getting-started-kubernetes","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/","title":{"rendered":"Getting Started with Kubernetes"},"content":{"rendered":"<p>Kubernetes is a highly popular open-source container management system. The goal of the <a href=\"http:\/\/kubernetes.io\/\">Kubernetes project<\/a> is to make management of containers across multiple nodes as simple as managing containers on a single system. To accomplish this, it offers quite a few unique features such as Traffic Load Balancing, Self-Healing (automatic restarts), Scheduling, Scaling, and Rolling Updates.<\/p>\n<p>In today\u2019s article, we\u2019ll learn about Kubernetes by deploying a simple web application across a multinode Kubernetes cluster. Before we can start deploying containers however, we first need to set up a cluster.<\/p>\n<h2>Standing Up a Kubernetes Cluster<\/h2>\n<p>The official <a href=\"http:\/\/kubernetes.io\/docs\/hellonode\/\">Getting Started<\/a> guide walks you through deploying a Kubernetes cluster on <a href=\"https:\/\/cloud.google.com\/container-engine\/\">Google\u2019s Container Engine platform<\/a>. While this is a quick and easy method to get up and running, for this article, we\u2019ll be deploying Kubernetes with an alternative provider, specifically via Vagrant. We\u2019re using Vagrant for a few reasons, but primarily because it shows how to deploy Kubernetes on a generic platform rather than GCE.<\/p>\n<p>Kubernetes comes with several install scripts for <a href=\"http:\/\/kubernetes.io\/docs\/getting-started-guides\/\">various platforms<\/a>. The majority of these scripts use <strong>Bash<\/strong> environmental variables to change what and how Kubernetes is installed.<\/p>\n<p>For this installation, we\u2019ll define two variables:<\/p>\n<ul>\n<li><code>NUM_NODES<\/code> \u2013 controls the number of nodes to deploy<\/li>\n<li><code>KUBERNETES_PROVIDER<\/code> \u2013 specifies the platform on which to install Kubernetes<\/li>\n<\/ul>\n<p>Let\u2019s define that the installation scripts should use the <code>vagrant<\/code> platform and to provision a 2 node cluster.<\/p>\n<pre class=\"brush:php\">$ export NUM_NODES=2\r\n$ export KUBERNETES_PROVIDER=vagrant<\/pre>\n<p>If we wanted to deploy Kubernetes on AWS, for example, we could do so by changing the <code>KUBERNETES_PROVIDER<\/code> environmental variable to <code>aws<\/code>.<\/p>\n<h3>Using the Kubernetes install script<\/h3>\n<p>While there are many walk-throughs on how to install Kubernetes, I have found that the easiest method is to use the Kubernetes install script available at (https:\/\/get.k8s.io).<\/p>\n<p>This script is essentially a wrapper to the installation scripts distributed with Kubernetes, which makes the process quite a bit easier. One of my favorite things about this script is that it will also download Kubernetes for you.<\/p>\n<p>To start using this script, we\u2019ll need to download it; we can do this with a quick <code>curl<\/code> command. Once we\u2019ve downloaded the script, we can execute it by running the <code>bash<\/code> command followed by the script name.<\/p>\n<pre class=\"brush:php\">$ curl https:\/\/get.k8s.io &gt; kubernetes_install.sh\r\n$ bash kubernetes_install.sh\r\nDownloading kubernetes release v1.2.2 to \/var\/tmp\/kubernetes.tar.gz\r\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\r\n                                 Dload  Upload   Total   Spent    Left  Speed\r\n100  426M  100  426M    0     0  12.2M      0  0:00:34  0:00:34 --:--:-- 6007k\r\nUnpacking kubernetes release v1.2.2\r\nCreating a kubernetes on vagrant...\r\n&lt;output truncated&gt;\r\nKubernetes master is running at https:\/\/10.245.1.2\r\nHeapster is running at https:\/\/10.245.1.2\/api\/v1\/proxy\/namespaces\/kube-system\/services\/heapster\r\nKubeDNS is running at https:\/\/10.245.1.2\/api\/v1\/proxy\/namespaces\/kube-system\/services\/kube-dns\r\nkubernetes-dashboard is running at https:\/\/10.245.1.2\/api\/v1\/proxy\/namespaces\/kube-system\/services\/kubernetes-dashboard\r\nGrafana is running at https:\/\/10.245.1.2\/api\/v1\/proxy\/namespaces\/kube-system\/services\/monitoring-grafana\r\nInfluxDB is running at https:\/\/10.245.1.2\/api\/v1\/proxy\/namespaces\/kube-system\/services\/monitoring-influxdb\r\nInstallation successful!<\/pre>\n<p>After the script completes execution, we have a running Kubernetes cluster. However, we still have one more step before we can start to interact with this Kubernetes cluster; we need the <code>kubectl<\/code> command to be installed.<\/p>\n<h3>Setting up kubectl<\/h3>\n<p>The <code>kubectl<\/code> command exists for both <a href=\"https:\/\/storage.googleapis.com\/kubernetes-release\/release\/v1.2.0\/bin\/linux\/amd64\/kubectl\">Linux<\/a> and <a href=\"https:\/\/storage.googleapis.com\/kubernetes-release\/release\/v1.2.0\/bin\/darwin\/amd64\/kubectl\">Mac OS X<\/a>. Since I\u2019m running this installation from my MacBook, I\u2019ll be installing the <strong>Mac OS X<\/strong> version of <code>kubectl<\/code>. This means I\u2019ll be running the cluster via Vagrant but interacting with that cluster from my MacBook.<\/p>\n<p>To download the <code>kubectl<\/code> command, we will once again use <code>curl<\/code>.<\/p>\n<pre class=\"brush:php\">$ curl https:\/\/storage.googleapis.com\/kubernetes-release\/release\/v1.2.0\/bin\/darwin\/amd64\/kubectl &gt; kubectl\r\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\r\n                                 Dload  Upload   Total   Spent    Left  Speed\r\n100 38.7M  100 38.7M    0     0  10.4M      0  0:00:03  0:00:03 --:--:-- 10.4M\r\n$ chmod 750 kubectl<\/pre>\n<p>After the <code>kubectl<\/code> binary is downloaded and permissions are changed to allow execution, the <code>kubectl<\/code> command is almost ready. One more step is required before we can start interacting with our Kubernetes cluster. That step is to configure the <code>kubectl<\/code> command.<\/p>\n<pre class=\"brush:php\">$ export KUBECONFIG=~\/.kube\/config<\/pre>\n<p>As with most Kubernetes scripts, the <code>kubectl<\/code> command\u2019s configuration is driven by environmental variables. When we executed the cluster installation script above, that script created a <code>.kube<\/code> configuration directory in my users home directory. Within that directory, it also created a file named <code>config<\/code>. This file is used to store information about the Kubernetes cluster that was created.<\/p>\n<p>By setting the <code>KUBECONFIG<\/code> environmental variable to <code>~\/.kube\/config<\/code>, we are defining that the <code>kubectl<\/code> command should reference this configuration file. Let\u2019s take a quick look at that file to get a better understanding of what is being set.<\/p>\n<pre class=\"brush:php\">$ cat ~\/.kube\/config\r\napiVersion: v1\r\nclusters:\r\n- cluster:\r\n    certificate-authority-data: &lt;SSLKEYDATA&gt;\r\n    server: https:\/\/10.245.1.2\r\n  name: vagrant\r\ncontexts:\r\n- context:\r\n    cluster: vagrant\r\n    user: vagrant\r\n  name: vagrant\r\ncurrent-context: vagrant\r\nkind: Config\r\npreferences: {}\r\nusers:\r\n- name: vagrant\r\n  user:\r\n    client-certificate-data: &lt;SSLKEYDATA&gt;\r\n    client-key-data: &lt;SSLKEYDATA&gt;\r\n    token: sometoken\r\n- name: vagrant-basic-auth\r\n  user:\r\n    password: somepassword\r\n    username: admin<\/pre>\n<p>The <code>.kube\/config<\/code> file sets two main pieces of information:<\/p>\n<ul>\n<li>Location of the cluster<\/li>\n<li>Authentication data for communicating with that cluster<\/li>\n<\/ul>\n<p>With the <code>.kube\/config<\/code> file defined, let\u2019s attempt to execute a <code>kubectl<\/code> command against our Kubernetes cluster to verify everything is working.<\/p>\n<pre class=\"brush:php\">$ .\/kubectl get nodes\r\nNAME                STATUS    AGE\r\nkubernetes-node-1   Ready     31m\r\nkubernetes-node-2   Ready     24m<\/pre>\n<p>The output of the <code>.\/kubectl get nodes<\/code> command shows us that we were able to connect to our Kubernetes cluster and display the status of our two nodes <code>kubernetes-node-1<\/code> and <code>kubernetes-node-2<\/code>. With this, we can move on as our installation is complete.<\/p>\n<h2>More About Kubernetes Nodes<\/h2>\n<p>In the command above, we used <code>kubectl<\/code> to show the status of the available Kubernetes Nodes on this cluster. However, we really didn\u2019t explore what a node is or what role it plays within a cluster.<\/p>\n<p>A Kubernetes <strong>Node<\/strong> is a physical or virtual (in our case, virtual) machine used to host application containers. In a traditional container-based environment, you would typically define that specific containers run on specified physical or virtual hosts. In a Kubernetes cluster, however, you simply define what application containers you wish to run. The Kubernetes master determines which node the application container will run on.<\/p>\n<p>This methodology also enables the Kubernetes cluster to perform tasks such as automated restarts when containers or nodes die.<\/p>\n<h2>Deploying Our Application<\/h2>\n<p>With our Kubernetes cluster ready, we can now start deploying application containers. The application container we will be deploying today will be an instance of <a href=\"https:\/\/hub.docker.com\/_\/ghost\/\">Ghost<\/a>. Ghost is a popular JavaScript-based blogging platform, and with its official Docker image, it\u2019s pretty simple to deploy.<\/p>\n<p>Since we\u2019ll be using a prebuilt Docker container, we won\u2019t need to first build a Docker image. However, it is important to call out that in order to use custom-built containers on a Kubernetes cluster. You must first build the container and push it to a Docker repository such as <a href=\"https:\/\/hub.docker.com\/\">Docker Hub<\/a>.<\/p>\n<p>To start our <strong>Ghost<\/strong> container, we will use the <code>.\/kubectl<\/code> command with the <code>run<\/code> option.<\/p>\n<pre class=\"brush:php\">$ .\/kubectl run ghost --image=ghost --port=2368\r\ndeployment \"ghost\" created<\/pre>\n<p>In the command above, we created a deployment named <code>ghost<\/code>, using the image <code>ghost<\/code> and specified that the <code>ghost<\/code> container requires the port <code>2368<\/code>. Before going too far, let\u2019s first verify that the container is running. We can verify this by executing the <code>kubectl<\/code> command with the <code>get pods<\/code> options.<\/p>\n<pre class=\"brush:php\">$ .\/kubectl get pods\r\nNAME                     READY     STATUS    RESTARTS   AGE\r\nghost-3550706830-4c2n5   1\/1       Running   0          20m<\/pre>\n<p>The <code>get pods<\/code> option will tell the <code>kubectl<\/code> command to list all of the Kubernetes Pods currently deployed to the cluster.<\/p>\n<h4>What Are Pods and Deployments?<\/h4>\n<p>A <strong>Pod<\/strong> is a group of containers that can communicate with each other as though they are running within the same system. For those familiar with Docker, this may sound like linking containers, but there\u2019s actually a bit more to it than that. Containers within Pods are not only able to connect to each other through a <code>localhost<\/code> connection, the processes running within the containers are also able to share memory segments with other containers.<\/p>\n<p>The goal of a Pod is to allow applications running within the Pod to interact in the same way they would as though they were not running in containers but simply running on the same physical host. This ability makes it easy to deploy applications that are not specifically designed to run within containers.<\/p>\n<p>A <strong>Deployment<\/strong>, or Deployment Object, is similar to the concept of a Desired State. Essentially the Deployment is a high-level configuration around a desired function. For example, earlier when we started the <strong>Ghost<\/strong> container, we didn\u2019t just launch a <strong>Ghost<\/strong> container. We actually configured Kubernetes to ensure that at least one copy of a <strong>Ghost<\/strong> container is running.<\/p>\n<h4>Creating a service for Ghost<\/h4>\n<p>While containers within Pods can connect to systems external to the cluster, external systems and even other Pods cannot communicate with them. This is because, by default, the port defined for the <strong>Ghost<\/strong> service is not exposed beyond this cluster. This is where Services come into play.<\/p>\n<p>In order to make our <strong>Ghost<\/strong> application accessible outside the cluster, the deployment we just created needs to be exposed as a Kubernetes <strong>Service<\/strong>. To set our <strong>Ghost<\/strong> deployment as a service, we will use the <code>kubectl<\/code> command once again, this time using the <code>expose<\/code> option.<\/p>\n<pre class=\"brush:php\">$ .\/kubectl expose deployment ghost --type=\"NodePort\"\r\nservice \"ghost\" exposed<\/pre>\n<p>In the above command, we used the flag <code>--type<\/code> with the argument of <code>NodePort<\/code>. This flag defines the service type to expose for this service, in this case a <code>NodePort<\/code> service type. The <code>NodePort<\/code> service type will set all nodes to listen on the specified port. We can see our change take effect if we use the <code>kubectl<\/code> command again, but this time with the <code>get services<\/code> option.<\/p>\n<pre class=\"brush:php\">$ .\/kubectl get services\r\nNAME         CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE\r\nghost        10.247.63.140   nodes         2368\/TCP   55s\r\nkubernetes   10.247.0.1      &lt;none&gt;        443\/TCP    19m<\/pre>\n<h4>Service types<\/h4>\n<p>At the moment, Kubernetes supports three service types:<\/p>\n<ul>\n<li><code>ClusterIP<\/code><\/li>\n<li><code>NodePort<\/code><\/li>\n<li><code>LoadBalancer<\/code><\/li>\n<\/ul>\n<p>If we wanted to only expose this service to other Pods within this cluster, we can use the <code>ClusterIP<\/code> service type, which is the default. This opens the port on each node for Pod to Pod communication.<\/p>\n<p>The <code>LoadBalancer<\/code> service type is designed to provision an external IP to act as a Load Balancer for the service. Since our deployment is leveraging Vagrant on a local laptop, this option does not work in our environment. It does work with Kubernetes clusters deployed in cloud environments like GCE or AWS.<\/p>\n<h4>Testing our Ghost instance<\/h4>\n<p>Since we did not specify a port to use when defining our <code>NodePort<\/code> service, Kubernetes randomly assigned a port. To see what port it assigned, we can use the <code>kubectl<\/code> command, with the <code>describe service<\/code> option.<\/p>\n<pre class=\"brush:php\">$ .\/kubectl describe service ghost\r\nName:           ghost\r\nNamespace:      default\r\nLabels:         run=ghost\r\nSelector:       run=ghost\r\nType:           NodePort\r\nIP:         10.247.63.140\r\nPort:           &lt;unset&gt; 2368\/TCP\r\nNodePort:       &lt;unset&gt; 32738\/TCP\r\nEndpoints:      10.246.3.3:2368\r\nSession Affinity:   None\r\nNo events.<\/pre>\n<p>We can see that the port assigned is <code>32738<\/code>. With this port, we can use the <code>curl<\/code> command to make an HTTP call to any of our Kubernetes Nodes and get redirected to port <code>2368<\/code> within our applications container.<\/p>\n<pre class=\"brush:php\">$ curl -vk http:\/\/10.245.1.3:32738\r\n* Rebuilt URL to: http:\/\/10.245.1.3:32738\/\r\n*   Trying 10.245.1.3...\r\n* Connected to 10.245.1.3 (10.245.1.3) port 32738 (#0)\r\n&gt; GET \/ HTTP\/1.1\r\n&gt; Host: 10.245.1.3:32738\r\n&gt; User-Agent: curl\/7.43.0\r\n&gt; Accept: *\/*\r\n&gt;\r\n&lt; HTTP\/1.1 200 OK\r\n&lt; X-Powered-By: Express<\/pre>\n<p>From the output of the <code>curl<\/code> command, we can see that the connection was successful with a <code>200 OK<\/code> response. What is interesting about this is that the request was to a node that wasn\u2019t running the <strong>Ghost<\/strong> container. We can see this if we use the <code>kubectl<\/code> to <code>describe<\/code> the Pod.<\/p>\n<pre class=\"brush:php\">$ .\/kubectl describe pod ghost-3550706830-ss4se\r\nName:       ghost-3550706830-ss4se\r\nNamespace:  default\r\nNode:       kubernetes-node-2\/10.245.1.4\r\nStart Time: Sat, 16 Apr 2016 21:13:20 -0700\r\nLabels:     pod-template-hash=3550706830,run=ghost\r\nStatus:     Running\r\nIP:     10.246.3.3\r\nControllers:    ReplicaSet\/ghost-3550706830\r\nContainers:\r\n  ghost:\r\n    Container ID:   docker:\/\/55ea497a166ff13a733d4ad3be3abe42a6d7f3d2c259f2653102fedda485e25d\r\n    Image:      ghost\r\n    Image ID:       docker:\/\/09849b7a78d3882afcd46f2310c8b972352bc36aaec9f7fe7771bbc86e5222b9\r\n    Port:       2368\/TCP\r\n    QoS Tier:\r\n      memory:   BestEffort\r\n      cpu:  Burstable\r\n    Requests:\r\n      cpu:      100m\r\n    State:      Running\r\n      Started:      Sat, 16 Apr 2016 21:14:33 -0700\r\n    Ready:      True\r\n    Restart Count:  0\r\n    Environment Variables:\r\nConditions:\r\n  Type      Status\r\n  Ready     True\r\nVolumes:\r\n  default-token-imnyi:\r\n    Type:   Secret (a volume populated by a Secret)\r\n    SecretName: default-token-imnyi\r\nNo events.<\/pre>\n<p>In the description above, we can see that the <strong>Ghost<\/strong> Pod is running on <code>kubernetes-node-2<\/code>. However, the HTTP request we just made was to <code>kubernetes-node-1<\/code>. This is made possible by a Kubernetes service called <code>kube-proxy<\/code>. With <code>kube-proxy<\/code>, whenever traffic arrives on a service\u2019s port, the Kubernetes node will check if the service is running local to that node. If not, it will redirect the traffic to a node that is running that service.<\/p>\n<p>In the case above, this means that even though the HTTP request was made to <code>kubernetes-node-1<\/code>, the <code>kube-proxy<\/code> service redirected that traffic to <code>kubernetes-node-2<\/code> where the container is running.<\/p>\n<p>This feature allows users to run services without having to worry about where the service is and whether or not it has moved from node to node. A very useful feature that reduces quite a bit of maintenance and headache.<\/p>\n<h2>Scaling a Deployment<\/h2>\n<p>Now that our <strong>Ghost<\/strong> service is running and accessible to the outside world, we need to perform our last task, scaling out our <strong>Ghost<\/strong> application across multiple instances. To do this, we can simply call the <code>kubectl<\/code> command again, this time however, with the <code>scale<\/code> option.<\/p>\n<p><code>$ .\/kubectl scale deployment ghost --replicas=4<br \/>\ndeployment \"ghost\" scaled<\/code><\/p>\n<p>We\u2019ve specified that there should be 4 <code>replicas<\/code> of the <strong>ghost<\/strong> deployment. If we execute <code>kubectl get pods<\/code> again we should see 3 additional pods for the <strong>ghost<\/strong> deployment.<\/p>\n<pre class=\"brush:php\">.\/kubectl get pods\r\nNAME                     READY     STATUS    RESTARTS   AGE\r\nghost-3550706830-49r81   1\/1       Running   0          7h\r\nghost-3550706830-4c2n5   1\/1       Running   0          8h\r\nghost-3550706830-7o2fs   1\/1       Running   0          7h\r\nghost-3550706830-f3dae   1\/1       Running   0          7h<\/pre>\n<p>With this last step, we now have our <strong>Ghost<\/strong> service running across multiple nodes and multiple pods. As requests are made to our <strong>Ghost<\/strong> service, those requests will be load balanced to our various <strong>Ghost<\/strong> instances.<\/p>\n<h2>Summary<\/h2>\n<p>In this article, we learned how to deploy a multinode Kubernetes cluster across several Vagrant-managed virtual machines. We also learned how to deploy an application to the cluster, make that application accessible to external systems, and finally scale out the application to four instances. Even though we performed all of these tasks, we have only scratched the surface of Kubernetes.<\/p>\n<p>Want to explore more of Kubernetes features? Let us know in the comments.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"https:\/\/blog.codeship.com\/getting-started-with-kubernetes\/\">Getting Started with Kubernetes<\/a> from our <a href=\"http:\/\/www.webcodegeeks.com\/join-us\/wcg\/\">WCG partner<\/a>\u00a0Benjamin Cane at the <a href=\"http:\/\/blog.codeship.com\/\">Codeship Blog<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Kubernetes is a highly popular open-source container management system. The goal of the Kubernetes project is to make management of containers across multiple nodes as simple as managing containers on a single system. To accomplish this, it offers quite a few unique features such as Traffic Load Balancing, Self-Healing (automatic restarts), Scheduling, Scaling, and Rolling &hellip;<\/p>\n","protected":false},"author":158,"featured_media":927,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[326,363],"class_list":["post-12241","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web-development","tag-devops","tag-kubernetes"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Getting Started with Kubernetes - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"Kubernetes is a highly popular open-source container management system. The goal of the Kubernetes project is to make management of containers across\" \/>\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.webcodegeeks.com\/web-development\/getting-started-kubernetes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Getting Started with Kubernetes - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"Kubernetes is a highly popular open-source container management system. The goal of the Kubernetes project is to make management of containers across\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webcodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2016-05-04T10:41:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-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=\"Benjamin Cane\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Benjamin Cane\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/\"},\"author\":{\"name\":\"Benjamin Cane\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/4f5d918df9c19fab91b5b205357ce0b8\"},\"headline\":\"Getting Started with Kubernetes\",\"datePublished\":\"2016-05-04T10:41:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/\"},\"wordCount\":1868,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg\",\"keywords\":[\"DevOps\",\"Kubernetes\"],\"articleSection\":[\"Web Dev\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/\",\"name\":\"Getting Started with Kubernetes - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg\",\"datePublished\":\"2016-05-04T10:41:23+00:00\",\"description\":\"Kubernetes is a highly popular open-source container management system. The goal of the Kubernetes project is to make management of containers across\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/#primaryimage\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.webcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Web Dev\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/web-development\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Getting Started with Kubernetes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"name\":\"Web Code Geeks\",\"description\":\"Web Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.webcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webcodegeeks\",\"https:\/\/x.com\/webcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/4f5d918df9c19fab91b5b205357ce0b8\",\"name\":\"Benjamin Cane\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/09c6af2f1a7430456089189937094b817ef1b7c75ab9968bfd3ec35d938d914b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/09c6af2f1a7430456089189937094b817ef1b7c75ab9968bfd3ec35d938d914b?s=96&d=mm&r=g\",\"caption\":\"Benjamin Cane\"},\"description\":\"Benjamin Cane is a systems architect in the financial services industry. He writes about Linux systems administration on his blog and has recently published his first book, Red Hat Enterprise Linux Troubleshooting Guide.\",\"url\":\"https:\/\/www.webcodegeeks.com\/author\/benjamin-cane\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Getting Started with Kubernetes - Web Code Geeks - 2026","description":"Kubernetes is a highly popular open-source container management system. The goal of the Kubernetes project is to make management of containers across","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.webcodegeeks.com\/web-development\/getting-started-kubernetes\/","og_locale":"en_US","og_type":"article","og_title":"Getting Started with Kubernetes - Web Code Geeks - 2026","og_description":"Kubernetes is a highly popular open-source container management system. The goal of the Kubernetes project is to make management of containers across","og_url":"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2016-05-04T10:41:23+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg","type":"image\/jpeg"}],"author":"Benjamin Cane","twitter_card":"summary_large_image","twitter_creator":"@webcodegeeks","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Benjamin Cane","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/"},"author":{"name":"Benjamin Cane","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/4f5d918df9c19fab91b5b205357ce0b8"},"headline":"Getting Started with Kubernetes","datePublished":"2016-05-04T10:41:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/"},"wordCount":1868,"commentCount":0,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg","keywords":["DevOps","Kubernetes"],"articleSection":["Web Dev"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/","url":"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/","name":"Getting Started with Kubernetes - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg","datePublished":"2016-05-04T10:41:23+00:00","description":"Kubernetes is a highly popular open-source container management system. The goal of the Kubernetes project is to make management of containers across","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/#primaryimage","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/web-dev-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.webcodegeeks.com\/web-development\/getting-started-kubernetes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Web Dev","item":"https:\/\/www.webcodegeeks.com\/category\/web-development\/"},{"@type":"ListItem","position":3,"name":"Getting Started with Kubernetes"}]},{"@type":"WebSite","@id":"https:\/\/www.webcodegeeks.com\/#website","url":"https:\/\/www.webcodegeeks.com\/","name":"Web Code Geeks","description":"Web Developers Resource Center","publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.webcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.webcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.webcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webcodegeeks","https:\/\/x.com\/webcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/4f5d918df9c19fab91b5b205357ce0b8","name":"Benjamin Cane","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/09c6af2f1a7430456089189937094b817ef1b7c75ab9968bfd3ec35d938d914b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/09c6af2f1a7430456089189937094b817ef1b7c75ab9968bfd3ec35d938d914b?s=96&d=mm&r=g","caption":"Benjamin Cane"},"description":"Benjamin Cane is a systems architect in the financial services industry. He writes about Linux systems administration on his blog and has recently published his first book, Red Hat Enterprise Linux Troubleshooting Guide.","url":"https:\/\/www.webcodegeeks.com\/author\/benjamin-cane\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/12241","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/users\/158"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=12241"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/12241\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media\/927"}],"wp:attachment":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media?parent=12241"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=12241"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=12241"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}