diff --git a/README.md b/README.md index 15004d660d2..1fb2074e2dd 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ ## How can I write a guide? -We are constantly looking to improve the quality of our library. See our [rotating list of suggested topics](https://www.linode.com/docs/contribute/). +We are constantly looking to improve the quality of our library. Visit our [Contribute Page](https://www.linode.com/docs/contribute/). More detailed instructions on submitting a pull request can be found [here](CONTRIBUTING.md). diff --git a/archetypes/content.md b/archetypes/content.md index b06b5db9552..801f7647677 100644 --- a/archetypes/content.md +++ b/archetypes/content.md @@ -6,7 +6,6 @@ description: 'Two to three sentences describing your guide.' keywords: ['list','of','keywords','and key phrases'] license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' published: {{ now.Format "2006-01-02" }} -modified: {{ now.Format "2006-01-02" }} modified_by: name: Linode title: "{{ replace .TranslationBaseName "-" " " | title }}" diff --git a/archetypes/section.md b/archetypes/section.md new file mode 100644 index 00000000000..8319cbea4c2 --- /dev/null +++ b/archetypes/section.md @@ -0,0 +1,12 @@ +--- +author: + name: Linode + email: docs@linode.com +description: "A text passage which will appear below the title of the section on the section's page." +keywords: ["keyword1", "keyword2"] +license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' +published: {{ now.Format "2006-01-02" }} +title: Section Title +show_in_lists: true +--- + diff --git a/docs/applications/configuration-management/beginners-guide-to-terraform/index.md b/docs/applications/configuration-management/beginners-guide-to-terraform/index.md index 8ea328cf898..2ef43331687 100644 --- a/docs/applications/configuration-management/beginners-guide-to-terraform/index.md +++ b/docs/applications/configuration-management/beginners-guide-to-terraform/index.md @@ -32,6 +32,12 @@ The Linode provider relies on Linode's [APIv4](https://developers.linode.com/api The Linode provider can be used to create Linode instances, Images, domain records, Block Storage Volumes, StackScripts, and other resources. Terraform's [official Linode provider documentation](https://www.terraform.io/docs/providers/linode/index.html) details each resource that can be managed. +{{< note >}} +[Terraform’s Linode Provider](https://github.com/terraform-providers/terraform-provider-linode) has been updated and now requires Terraform version 0.12+. To learn how to safely upgrade to Terraform version 0.12+, see [Terraform’s official documentation](https://www.terraform.io/upgrade-guides/0-12.html). View [Terraform v0.12’s changelog](https://github.com/hashicorp/terraform/blob/v0.12.0/CHANGELOG.md) for a full list of new features and version incompatibility notes. + +The examples in this guide were written to be compatible with [Terraform version 0.11](https://www.terraform.io/docs/configuration-0-11/terraform.html) and will be updated in the near future. +{{}} + ## Infrastructure as Code Terraform's representation of your resources in configuration files is referred to as *Infrastructure as Code* (IAC). The benefits of this methodology and of using Terraform include: diff --git a/docs/applications/configuration-management/create-a-nodebalancer-with-terraform/index.md b/docs/applications/configuration-management/create-a-nodebalancer-with-terraform/index.md index 1fdd1560856..b9f6b13853e 100644 --- a/docs/applications/configuration-management/create-a-nodebalancer-with-terraform/index.md +++ b/docs/applications/configuration-management/create-a-nodebalancer-with-terraform/index.md @@ -34,6 +34,12 @@ If you would like to stop billing for the resources created in this guide, [remo 1. You should have Terraform installed in your development environment, and have a working knowledge of Terraform resource configuration and the [Linode provider](https://www.terraform.io/docs/providers/linode/index.html). For more information on how to install and use Terraform, check out our [Use Terraform to Provision Linode Environments](/docs/applications/configuration-management/how-to-build-your-infrastructure-using-terraform-and-linode/) guide. + {{< note >}} +[Terraform’s Linode Provider](https://github.com/terraform-providers/terraform-provider-linode) has been updated and now requires Terraform version 0.12+. To learn how to safely upgrade to Terraform version 0.12+, see [Terraform’s official documentation](https://www.terraform.io/upgrade-guides/0-12.html). View [Terraform v0.12’s changelog](https://github.com/hashicorp/terraform/blob/v0.12.0/CHANGELOG.md) for a full list of new features and version incompatibility notes. + +The examples in this guide were written to be compatible with [Terraform version 0.11](https://www.terraform.io/docs/configuration-0-11/terraform.html) and will be updated in the near future. + {{}} + 1. Terraform requires an API access token. Follow the [Getting Started with the Linode API](/docs/platform/api/getting-started-with-the-linode-api-new-manager/#get-an-access-token) guide to obtain a token. 1. Create a `terraform_nodebalancer` directory on your computer for the Terraform project you will create in this guide. All files you create in this guide should be placed in this directory, and you should run all commands from this directory. This new project should not be created inside another Terraform project directory, including the one you may have made when previously following [Use Terraform to Provision Linode Environments](/docs/applications/configuration-management/how-to-build-your-infrastructure-using-terraform-and-linode/). diff --git a/docs/applications/configuration-management/create-terraform-module/index.md b/docs/applications/configuration-management/create-terraform-module/index.md index 528798aca01..9925f76b6a4 100644 --- a/docs/applications/configuration-management/create-terraform-module/index.md +++ b/docs/applications/configuration-management/create-terraform-module/index.md @@ -25,6 +25,12 @@ In this guide you will create a *Linode StackScripts* module. This module will d 1. Install Terraform on your local computer using the steps found in the **Install Terraform** section of the [Use Terraform to Provision Linode Environments](https://linode.com/docs/applications/configuration-management/how-to-build-your-infrastructure-using-terraform-and-linode/#install-terraform) guide. Your Terraform project directory should be named `linode_stackscripts`. + {{< note >}} +[Terraform’s Linode Provider](https://github.com/terraform-providers/terraform-provider-linode) has been updated and now requires Terraform version 0.12+. To learn how to safely upgrade to Terraform version 0.12+, see [Terraform’s official documentation](https://www.terraform.io/upgrade-guides/0-12.html). View [Terraform v0.12’s changelog](https://github.com/hashicorp/terraform/blob/v0.12.0/CHANGELOG.md) for a full list of new features and version incompatibility notes. + +The examples in this guide were written to be compatible with [Terraform version 0.11](https://www.terraform.io/docs/configuration-0-11/terraform.html) and will be updated in the near future. + {{}} + 2. Terraform requires an API access token. Follow the [Getting Started with the Linode API](/docs/platform/api/getting-started-with-the-linode-api-new-manager/#get-an-access-token) guide to obtain a token. 3. Complete the steps in the **Configure Git** section of the [Getting Started with Git](/docs/development/version-control/how-to-configure-git/#configure-git) guide. diff --git a/docs/applications/configuration-management/deploy-a-wordpress-site-using-terraform-and-linode-stackscripts/index.md b/docs/applications/configuration-management/deploy-a-wordpress-site-using-terraform-and-linode-stackscripts/index.md index 7bdc86c4a59..a753fd21207 100644 --- a/docs/applications/configuration-management/deploy-a-wordpress-site-using-terraform-and-linode-stackscripts/index.md +++ b/docs/applications/configuration-management/deploy-a-wordpress-site-using-terraform-and-linode-stackscripts/index.md @@ -31,6 +31,12 @@ Following this guide will result in the creation of [billable Linode resources]( 1. Install Terraform on your computer by following the *Install Terraform* section of our [Use Terraform to Provision Linode Environments](/docs/applications/configuration-management/how-to-build-your-infrastructure-using-terraform-and-linode/#install-terraform) guide. + {{< note >}} +[Terraform’s Linode Provider](https://github.com/terraform-providers/terraform-provider-linode) has been updated and now requires Terraform version 0.12+. To learn how to safely upgrade to Terraform version 0.12+, see [Terraform’s official documentation](https://www.terraform.io/upgrade-guides/0-12.html). View [Terraform v0.12’s changelog](https://github.com/hashicorp/terraform/blob/v0.12.0/CHANGELOG.md) for a full list of new features and version incompatibility notes. + +The examples in this guide were written to be compatible with [Terraform version 0.11](https://www.terraform.io/docs/configuration-0-11/terraform.html) and will be updated in the near future. + {{}} + 1. Terraform requires an API access token. Follow the [Getting Started with the Linode API](/docs/platform/api/getting-started-with-the-linode-api-new-manager/#get-an-access-token) guide to obtain one. 1. If you have not already, [assign Linode's name servers](/docs/platform/manager/dns-manager/#use-linode-s-name-servers-with-your-domain) to your domain at your domain name's registrar. diff --git a/docs/applications/configuration-management/how-to-build-your-infrastructure-using-terraform-and-linode/index.md b/docs/applications/configuration-management/how-to-build-your-infrastructure-using-terraform-and-linode/index.md index dd5f85ae32d..d35d61a61f0 100644 --- a/docs/applications/configuration-management/how-to-build-your-infrastructure-using-terraform-and-linode/index.md +++ b/docs/applications/configuration-management/how-to-build-your-infrastructure-using-terraform-and-linode/index.md @@ -18,7 +18,7 @@ contributor: Infrastructure as code (IaC) is a development and operations methodology that allows server deployments and software configuration to be represented as code. This methodology reduces the chance for human error, makes complex systems more manageable, eases collaboration on systems engineering projects, and offers a number of other benefits. -Terraform is an IaC tool that focuses on creating, modifying, and destroying servers, instead of managing the software on those servers. Terraform offers plugins to interface with different hosting providers, and an official Linode plugin is available. This guide will show how to get started with Terraform and Linode. +Terraform is an IaC tool that focuses on creating, modifying, and destroying servers, instead of managing the software on those servers. Terraform offers plugins to interface with different hosting providers, and an [official Linode plugin](https://www.terraform.io/docs/providers/linode/index.html) is available. This guide will show how to get started with Terraform and Linode. Linodes created with Terraform can be further configured with container systems like Docker, or with configuration management software like Salt, Puppet, Ansible, or Chef. @@ -42,30 +42,30 @@ Any Personal Access Tokens generated from the previous Linode Manager are API v3 ## Install Terraform -If you're using macOS, you can install Terraform via [Homebrew](https://brew.sh/) by running the following command: +The installation steps in this section are for Linux operating systems. To install Terraform on a different operating system, like macOS, see [Terraform's downloads](https://www.terraform.io/downloads.html) page. Once installed, skip to [Building with the Terraform Provider](#building-with-the-linode-provider). - brew install terraform - -You can then skip to [Building with the Terraform Provider](#building-with-the-linode-provider"). If you are using Linux, or would rather not install Terraform with Homebrew, follow the instructions below. +{{< note >}} +The Terraform Provider for Linode requires [Terraform version 0.12.0+](https://www.hashicorp.com/blog/announcing-terraform-0-12). The examples in this guide were written to be compatible with [Terraform version 0.11](https://www.terraform.io/docs/configuration-0-11/terraform.html) and will be updated in the near future. +{{}} 1. Make a Terraform project directory in your home directory and then navigate to it: mkdir ~/terraform cd ~/terraform -2. Download the following files from [Terraform's website](https://www.terraform.io/downloads.html). Example `wget` commands are listed using the latest version available at time of publishing (0.11.9). You should inspect the links on the download page to see if a newer version is available and update the `wget` commands to use those URLs instead: +2. Download the following files from [Terraform's website](https://www.terraform.io/downloads.html). Example `wget` commands are listed using the latest version available at time of publishing (0.12.5). You should inspect the links on the download page to see if a newer version is available and update the `wget` commands to use those URLs instead: - The 64-bit Linux `.zip` archive - wget https://releases.hashicorp.com/terraform/0.11.9/terraform_0.11.9_linux_amd64.zip + wget https://releases.hashicorp.com/terraform/0.12.5/terraform_0.12.5_linux_amd64.zip - The SHA256 checksums file - wget https://releases.hashicorp.com/terraform/0.11.9/terraform_0.11.9_SHA256SUMS + wget https://releases.hashicorp.com/terraform/0.12.5/terraform_0.12.5_SHA256SUMS - The checksum signature file - wget https://releases.hashicorp.com/terraform/0.11.9/terraform_0.11.9_SHA256SUMS.sig + wget https://releases.hashicorp.com/terraform/0.12.5/terraform_0.12.5_SHA256SUMS.sig ### Verify the Download @@ -112,7 +112,7 @@ Primary key fingerprint: 91A6 E7F8 5D05 C656 30BE F189 5185 2D87 348F FC4C The output should show the file's name as given in the `terraform*SHA256SUMS` file: {{< output >}} -terraform_0.11.9_linux_amd64.zip: OK +terraform_0.12.5_linux_amd64.zip: OK {{< /output >}} ### Configure the Terraform Environment diff --git a/docs/applications/configuration-management/import-existing-infrastructure-to-terraform/index.md b/docs/applications/configuration-management/import-existing-infrastructure-to-terraform/index.md index d0a99b068b3..b5f0b3f219a 100644 --- a/docs/applications/configuration-management/import-existing-infrastructure-to-terraform/index.md +++ b/docs/applications/configuration-management/import-existing-infrastructure-to-terraform/index.md @@ -19,6 +19,12 @@ external_resources: Terraform is an orchestration tool that uses declarative code to build, change, and version infrastructure that is made up of server instances and services. You can use [Linode's official Terraform provider](https://www.terraform.io/docs/providers/linode/index.html) to interact with Linode services. Existing Linode infrastructure can be imported and brought under Terraform management. This guide will describe how to import existing Linode infrastructure into Terraform using the official Linode provider plugin. +{{< note >}} +[Terraform’s Linode Provider](https://github.com/terraform-providers/terraform-provider-linode) has been updated and now requires Terraform version 0.12+. To learn how to safely upgrade to Terraform version 0.12+, see [Terraform’s official documentation](https://www.terraform.io/upgrade-guides/0-12.html). View [Terraform v0.12’s changelog](https://github.com/hashicorp/terraform/blob/v0.12.0/CHANGELOG.md) for a full list of new features and version incompatibility notes. + +The examples in this guide were written to be compatible with [Terraform version 0.11](https://www.terraform.io/docs/configuration-0-11/terraform.html) and will be updated in the near future. +{{}} + ## Before You Begin 1. Terraform and the Linode Terraform provider should be installed in your development environment. You should also have a basic understanding of [Terraform resources](https://www.terraform.io/docs/configuration/resources.html). To install and learn about Terraform, read our [Use Terraform to Provision Linode Environments](/docs/applications/configuration-management/how-to-build-your-infrastructure-using-terraform-and-linode/) guide. diff --git a/docs/applications/configuration-management/introduction-to-hcl/index.md b/docs/applications/configuration-management/introduction-to-hcl/index.md index 42dafe1f8af..dd883670e26 100644 --- a/docs/applications/configuration-management/introduction-to-hcl/index.md +++ b/docs/applications/configuration-management/introduction-to-hcl/index.md @@ -19,6 +19,12 @@ HCL is a configuration language authored by [HashiCorp](https://www.hashicorp.co This guide provides an introduction to HCL syntax and some commonly used HCL terminology. +{{< note >}} +[Terraform’s Linode Provider](https://github.com/terraform-providers/terraform-provider-linode) has been updated and now requires Terraform version 0.12+. To learn how to safely upgrade to Terraform version 0.12+, see [Terraform’s official documentation](https://www.terraform.io/upgrade-guides/0-12.html). View [Terraform v0.12’s changelog](https://github.com/hashicorp/terraform/blob/v0.12.0/CHANGELOG.md) for a full list of new features and version incompatibility notes. + +The examples in this guide were written to be compatible with [Terraform version 0.11](https://www.terraform.io/docs/configuration-0-11/terraform.html) and will be updated in the near future. +{{}} + ## HCL Syntax Overview HashiCorp's configuration syntax is easy to read and write. It was created to have a more clearly visible and defined structure when compared with other well known configuration languages, like YAML. diff --git a/docs/applications/configuration-management/secrets-management-with-terraform/index.md b/docs/applications/configuration-management/secrets-management-with-terraform/index.md index 9d95d186979..c28c6ac2d21 100644 --- a/docs/applications/configuration-management/secrets-management-with-terraform/index.md +++ b/docs/applications/configuration-management/secrets-management-with-terraform/index.md @@ -22,6 +22,12 @@ external_resources: Terraform is an Infrastructure as Code (IaC) tool that allows you to write declarative code to manage your infrastructure. In order to implement IaC with Terraform it is necessary to supply secrets, such as server passwords and API tokens, within your code. This guide will discuss methods for securing those secrets within Terraform. +{{< note >}} +[Terraform’s Linode Provider](https://github.com/terraform-providers/terraform-provider-linode) has been updated and now requires Terraform version 0.12+. To learn how to safely upgrade to Terraform version 0.12+, see [Terraform’s official documentation](https://www.terraform.io/upgrade-guides/0-12.html). View [Terraform v0.12’s changelog](https://github.com/hashicorp/terraform/blob/v0.12.0/CHANGELOG.md) for a full list of new features and version incompatibility notes. + +The examples in this guide were written to be compatible with [Terraform version 0.11](https://www.terraform.io/docs/configuration-0-11/terraform.html) and will be updated in the near future. +{{}} + ## Keeping Secrets Out of .tf Files In Terraform, `.tf` files contain the declarative code used to create, manage, and destroy infrastructure. This code is often committed to a version control system like Git, using a platform like GitHub, and shared within a team. Because it is easy for this information to become public-facing, it is important that you make sure your committed code is free of secrets. diff --git a/docs/applications/containers/beginners-guide-to-kubernetes/index.md b/docs/applications/containers/beginners-guide-to-kubernetes/index.md deleted file mode 100644 index 832b4ced92a..00000000000 --- a/docs/applications/containers/beginners-guide-to-kubernetes/index.md +++ /dev/null @@ -1,497 +0,0 @@ ---- -author: - name: Andy Stevens - email: docs@linode.com -description: 'An introduction to Kubernetes concepts and components.' -keywords: ['kubernetes','k8s','beginner','architecture'] -license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' -published: 2019-03-21 -modified: 2019-03-21 -modified_by: - name: Linode -title: "A Beginner's Guide to Kubernetes" -contributor: - name: Linode -concentrations: ["Kubernetes"] -external_resources: -- '[Kubernetes API Documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/)' -- '[Kubernetes Concepts Documentation](https://kubernetes.io/docs/concepts/)' ---- -![A Beginner's Guide to Kubernetes](beginners-guide-to-kubernetes.png "A Beginner's Guide to Kubernetes") - -*Kubernetes*, often referred to as *k8s*, is an open source container orchestration system that helps deploy and manage containerized applications. Developed by Google starting in 2014 and written in the Go language, Kubernetes is quickly becoming the standard way to architect horizontally-scalable applications. This guide will explain the major parts and concepts of Kubernetes. - -## Containers - -Kubernetes is a container orchestration tool and, therefore, needs a container runtime installed to work. In practice, the default container runtime for Kubernetes is [Docker](https://www.docker.com/), though other runtimes like [rkt](https://coreos.com/rkt/), and [LXD](https://linuxcontainers.org/lxd/introduction/) will also work. With the advent of the [Container Runtime Interface (CRI)](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md), which hopes to standardize the way Kubernetes interacts with containers, other options like [containerd](https://containerd.io/), [cri-o](https://cri-o.io/), and [Frakti](https://github.com/kubernetes/frakti) have also become available. This guide assumes you have a working knowledge of containers and the examples will all use Docker as the container runtime. - -## Kubernetes API - -Kubernetes is built around a robust RESTful API. Every action taken in Kubernetes, be it inter-component communication or user command, interacts in some fashion with the Kubernetes API. The goal of the API is to help facilitate the desired state of the Kubernetes cluster. If you want X instances of your application running and have Y currently active, the API will take the required steps to get to X, whether this means creating, or destroying resources. To create this desired state, you create *objects*, which are normally represented by YAML files called *manifests*, and apply them through the command line with the **kubectl** tool. - -## kubectl - -kubectl is a command line tool used to interact with the Kubernetes cluster. It offers a host of features, including the ability to create, stop, and delete resources, describe active resources, and auto scale resources. For more information on the types of commands and resources you can use with kubectl, consult the [Kubernetes kubectl documentation](https://kubernetes.io/docs/reference/kubectl/overview/). - -## Kubernetes Master, Nodes, and Control Plane - -At the highest level of Kubernetes, there exist two kinds of servers, a *Master* and a *Node*. These servers can be Linodes, VMs, or physical servers. Together, these servers form a *cluster*. - -### Nodes - -Kubernetes Nodes are worker servers that run your application. The number of Nodes is determined by the user, and they are created by the user. In addition to running your application, each Node runs two processes: - -- **kubelet** receives descriptions of the desired state of a [Pod](#pods) from the API server, and ensures the Pod is healthy, and running on the Node. -- **kube-proxy** is a networking proxy that proxies the UDP, TCP, and SCTP networking of each Node, and provides load balancing. This is only used to connect to [Services](#services). - -### Kubernetes Master - -The Kubernetes Master is normally a separate server responsible for maintaining the desired state of the cluster. It does this by telling the Nodes how many instances of your application it should run and where. The Kubernetes Master runs three processes: - -- **kube-apiserver** is the front end for the Kubernetes API server. -- **kube-controller-manager** is a daemon that manages the Kubernetes control loop. For more on Controllers, see the [Controllers section](#controllers). -- **kube-scheduler** is a function that looks for newly created Pods that have no Nodes, and assigns them a Node based on a host of requirements. For more information on kube-scheduler, consult the [Kubernetes kube-scheduler documentation](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-scheduler/). - -Additionally, the Kubernetes Master runs the database **etcd**. Etcd is a highly available key-value store that provides the backend database for Kubernetes. - -Together, kube-apiserver, kube-controller-manager, kube-scheduler, and etcd form what is known as the *control plane*. The control plane is responsible for making decisions about the cluster, and pushing it toward the desired state. - -## Kubernetes Objects - -In Kubernetes, there are a number of objects that are abstractions of your Kubernetes system's desired state. These objects represent your application, its networking, and disk resources -- all of which together form your application. - -### Pods - -In Kubernetes, all containers exist within *Pods*. Pods are the smallest unit of the Kubernetes architecture, and can be viewed as a kind of wrapper for your container. Each Pod is given its own IP address with which it can interact with other Pods within the cluster. - -Usually, a Pod contains only one container, but a Pod can contain multiple containers if those containers need to share resources. If there is more than one container in a Pod, these containers can communicate with one another via localhost. - -Pods in Kubernetes are "mortal," which means that they are created, and destroyed depending on the needs of the application. For instance, you might have a web app backend that sees a spike in CPU usage. This might cause the cluster to scale up the amount of backend Pods from two to ten, in which case eight new Pods would be created. Once the traffic subsides, the Pods might scale back to two, in which case eight pods would be destroyed. - -It is important to note that Pods are destroyed without respect to which Pod was created first. And, while each Pod has its own IP address, this IP address will only be available for the life-cycle of the Pod. - -Below is an example of a Pod manifest: - -{{< file "my-apache-pod.yaml" yaml >}} -apiVersion: v1 -kind: Pod -metadata: - name: apache-pod - labels: - app: web -spec: - containers: - - name: apache-container - image: httpd -{{}} - -Each manifest has four necessary parts: - -- The version of the API in use -- The kind of resource you'd like to define -- Metadata about the resource -- Though not required by all objects, a spec which describes the desired behavior of the resource is necessary for most objects and controllers. - -In the case of this example, the API in use is `v1`, and the `kind` is a Pod. The metadata field is used for applying a name, labels, and annotations. Names are used to differentiate resources, while labels are used to group like resources. Labels will come into play more when defining [Services](#services) and [Deployments](#deployments). Annotations are for attaching arbitrary data to the resource. - -The spec is where the desired state of the resource is defined. In this case, a Pod with a single Apache container is desired, so the `containers` field is supplied with a name, 'apache-container', and an image, the latest version of Apache. The image is pulled from [Docker Hub](https://hub.docker.com), as that is the default container registry for Kubernetes. - -For more information on the type of fields you can supply in a Pod manifest, refer to the [Kubernetes Pod API documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#pod-v1-core). - -Now that you have the manifest, you can create the Pod using the `create` command: - - kubectl create -f my-apache-pod.yaml - -To view a list of your pods, use the `get pods` command: - - kubectl get pods - -You should see output like the following: - - NAME READY STATUS RESTARTS AGE - apache-pod 1/1 Running 0 16s - -To quickly view which Node the Pod exists on, issue the `get pods` command with the `-o=wide` flag: - - kubectl get pods -o=wide - -To retrieve information about the Pod, issue the `describe` command: - - kubcetl describe pod apache-pod - -You should see output like the following: - - ... - Events: - Type Reason Age From Message - ---- ------ ---- ---- ------- - Normal Scheduled 2m38s default-scheduler Successfully assigned default/apache-pod to mycluster-node-1 - Normal Pulling 2m36s kubelet, mycluster-node-1 pulling image "httpd" - Normal Pulled 2m23s kubelet, mycluster-node-1 Successfully pulled image "httpd" - Normal Created 2m22s kubelet, mycluster-node-1 Created container - Normal Started 2m22s kubelet, mycluster-node-1 Started container - -To delete the Pod, issue the `delete` command: - - kubectl delete pod apache-pod - -### Services - -*Services* group identical Pods together to provide a consistent means of accessing them. For instance, you might have three Pods that are all serving a website, and all of those Pods need to be accessible on port 80. A Service can ensure that all of the Pods are accessible at that port, and can load balance traffic between those Pods. Additionally, a Service can allow your application to be accessible from the internet. Each Service is given an IP address and a corresponding local DNS entry. Additionally, Services exist across Nodes. If you have two replica Pods on one Node and an additional replica Pod on another Node, the service can include all three Pods. There are four types of Service: - -- **ClusterIP**: Exposes the Service internally to the cluster. This is the default setting for a Service. -- **NodePort**: Exposes the Service to the internet from the IP address of the Node at the specified port number. You can only use ports in the 30000-32767 range. -- **LoadBalancer**: This will create a load balancer assigned to a fixed IP address in the cloud, so long as the cloud provider supports it. In the case of Linode, this is the responsibility of the [Linode Cloud Controller Manager](https://github.com/linode/linode-cloud-controller-manager), which will create a NodeBalancer for the cluster. This is the best way to expose your cluster to the internet. -- **ExternalName**: Maps the service to a DNS name by returning a CNAME record redirect. ExternalName is good for directing traffic to outside resources, such as a database that is hosted on another cloud. - -Below is an example of a Service manifest: - -{{< file "my-apache-service.yaml" yaml>}} -apiVersion: v1 -kind: Service -metadata: - name: apache-service - labels: - app: web -spec: - type: NodePort - ports: - - port: 80 - targetPort: 80 - nodePort: 30020 - selector: - app: web -{{}} - -The above example Service uses the `v1` API, and its `kind` is Service. Like the Pod example in the previous section, this manifest has a name and a label. Unlike the Pod example, this spec uses the `ports` field to define the exposed port on the container (`port`), and the target port on the Pod (`targetPort`). The `type` `NodePort` unlocks the use of `nodePort` field, which allows traffic on the host Node at that port. Lastly, the `selector` field is used to target only the Pods that have been assigned the `app: web` label. - -For more information on Services, visit the [Kubernetes Service API documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#service-v1-core). - -To create the Service from the YAML file, issue the create command: - - kubectl create -f my-apache-service.yaml - -To view a list of running services, issue the `get services` command: - - kubectl get services - -You should see output like the following: - - NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE - apache-service NodePort 10.99.57.13 80:30020/TCP 54s - kubernetes ClusterIP 10.96.0.1 443/TCP 46h - -To retrieve more information about your Service, issue the `describe` command: - - kubectl describe service apache-service - -To delete the Service, issue the delete command: - - kubcetl delete service apache-service - -### Volumes - -A *Volume* in Kubernetes is a way to share file storage between containers in a Pod. Kubernetes Volumes differ from Docker volumes because they exist inside the Pod rather than inside the container. When a container is restarted the Volume persists. Note, however, that these Volumes are still tied to the lifecycle of the Pod, so if the Pod is destroyed the Volume will be destroyed with it. - -Linode also offers a [Container Storage Interface (CSI) driver](https://github.com/linode/linode-blockstorage-csi-driver) that allows the cluster to persist data on a Block Storage volume. - -Below is an example of how to create and use a Volume by creating a Pod manifest: - -{{< file "my-apache-pod-with-volume.yaml" yaml>}} -apiVersion: v1 -kind: Pod -metadata: - name: apache-with-volume -spec: - volumes: - - name: apache-storage-volume - emptyDir: {} - - containers: - - name: apache-container - image: httpd - volumeMounts: - - name: apache-storage-volume - mountPath: /data/apache-data -{{}} - -A Volume has two unique aspects to its definition. In this example, the first aspect is the `volumes` block that defines the type of Volume you want to create, which in this case is a simple empty directory (`emptyDir`). The second aspect is the `volumeMounts` field within the container's `spec`. This field is given the name of the Volume you are creating and a mount path within the container. - -There are a number of different Volume types you could create in addition to `emptyDir` depending on your cloud host. For more information on Volume types, visit the [Kubernetes Volumes API documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#volume-v1-core). - - -### Namespaces - -Namespaces are virtual clusters that exist within the Kubernetes cluster that help to group and organize objects. Every cluster has at least three namespaces: `default`, `kube-system`, and `kube-public`. When interacting with the cluster it is important to know which Namespace the object you are looking for is in, as many commands will default to only showing you what exists in the `default` namespace. Resources created without an explicit namespace will be added to the `default` namespace. - -Namespaces consist of alphanumeric characters, dashes (`-`), and periods (`.`). - -Here is an example of how to define a Namespace with a manifest: - -{{< file "my-namespace.yaml" yaml>}} -apiVersion: v1 -kind: Namespace -metadata: - name: my-app -{{}} - -To create the Namespace, issue the `create` command: - - kubcetl create -f my-namespace.yaml - -Below is an example of a Pod with a Namespace: - -{{< file "my-apache-pod-with-namespace.yaml" yaml >}} -apiVersion: v1 -kind: Pod -metadata: - name: apache-pod - labels: - app: web - namespace: my-app -spec: - containers: - - name: apache-container - image: httpd -{{}} - -To retrieve resources in a certain Namespace, use the `-n` flag. - - kubectl get pods -n my-app - -You should see a list of Pods within your namespace: - - NAME READY STATUS RESTARTS AGE - apache-pod 1/1 Running 0 7s - -To view Pods in all Namespaces, use the `--all-namespaces` flag. - - kubectl get pods --all-namespaces - -To delete a Namespace, issue the `delete namespace` command. Note that this will delete all resources within that Namespace: - - kubectl delete namespace my-app - -For more information on Namespaces, visit the [Kubernetes Namespaces API documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#namespace-v1-core) - -## Controllers - -A Controller is a control loop that continuously watches the Kubernetes API and tries to manage the desired state of certain aspects of the cluster. There are a number of controllers. Below is a short reference of the most popular controllers you might interact with. - -### ReplicaSets - -As has been mentioned, Kubernetes allows an application to scale horizontally. A *ReplicaSet* is one of the controllers responsible for keeping a given number of replica Pods running. If one Pod goes down in a ReplicaSet, another will be created to replace it. In this way, Kubernetes is *self-healing*. However, for most use cases it is recommended to use a [Deployment](#deployments) instead of a ReplicaSet. - -Below is an example of a ReplicaSet: - -{{< file "my-apache-replicaset.yaml" yaml>}} -apiVersion: apps/v1 -kind: ReplicaSet -metadata: - name: apache-replicaset - labels: - app: web -spec: - replicas: 5 - selector: - matchLabels: - app: web - template: - metadata: - labels: - app: web - spec: - containers: - - name: apache-container - image: httpd -{{}} - -There are three main things to note in this ReplicaSet. The first is the `apiVersion`, which is `apps/v1`. This differs from the previous examples, which were all `apiVersion: v1`, because ReplicaSets do not exist in the `v1` core. They instead reside in the `apps` group of `v1`. The second and third things to note are the `replicas` field and the `selector` field. The `replicas` field defines how many replica Pods you want to be running at any given time. The `selector` field defines which Pods, matched by their label, will be controlled by the ReplicaSet. - -To view your ReplicaSets, issue the `get replicasets` command: - - kubectl get replicasets - -You should see output like the following: - - NAME DESIRED CURRENT READY AGE - apache-replicaset 5 5 0 5s - -This output shows that of the five desired replicas, there are 5 currently active, but zero of those replicas are available. This is because the Pods are still booting up. If you issue the command again, you will see that all five have become ready: - - NAME DESIRED CURRENT READY AGE - apache-replicaset 5 5 5 86s - -You can view the Pods the ReplicaSet created by issuing the `get pods` command: - - NAME READY STATUS RESTARTS AGE - apache-replicaset-5rsx2 1/1 Running 0 31s - apache-replicaset-8n52c 1/1 Running 0 31s - apache-replicaset-jcgn8 1/1 Running 0 31s - apache-replicaset-sj422 1/1 Running 0 31s - apache-replicaset-z8g76 1/1 Running 0 31s - -To delete a ReplicaSet, issue the `delete replicaset` command: - - kubectl delete replicaset apache-replicaset - -If you issue the `get pods` command, you will see that the Pods the ReplicaSet created are in the process of terminating: - - NAME READY STATUS RESTARTS AGE - apache-replicaset-bm2pn 0/1 Terminating 0 3m54s - -In the above example, four of the Pods have already terminated, and one is in the process of terminating. - -For more information on ReplicaSets, view the [Kubernetes ReplicaSets API documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#replicaset-v1-apps). - -### Deployments - -A *Deployment* can manage a ReplicaSet, so it shares the ability to keep a defined number of replica pods up and running. A Deployment can also update those Pods to resemble the desired state by means of rolling updates. For example, if you wanted to update a container image to a newer version, you would create a Deployment, and the controller would update the container images one by one until the desired state is achieved. This ensures that there is no downtime when updating or altering your Pods. - -Below is an example of a Deployment: - -{{< file "my-apache-deployment.yaml" yaml>}} -apiVersion: apps/v1 -kind: Deployment -metadata: - name: apache-deployment - labels: - app: web -spec: - replicas: 5 - selector: - matchLabels: - app: web - template: - metadata: - labels: - app: web - spec: - containers: - - name: apache-container - image: httpd:2.4.35 -{{}} - -The only noticeable difference between this Deployment and the example given in the ReplicaSet section is the `kind`. In this example we have chosen to initially install Apache 2.4.35. If you wanted to update that image to Apache 2.4.38, you would issue the following command: - - kubectl --record deployment.apps/apache-deployment set image deployment.v1.apps/apache-deployment apache-container=httpd:2.4.38 - -You'll see a confirmation that the images have been updated: - - deployment.apps/apache-deployment image updated - -To see for yourself that the images have updated, you can grab the Pod name from the `get pods` list: - - kubectl get pods - - NAME READY STATUS RESTARTS AGE - apache-deployment-574c8c4874-8zwgl 1/1 Running 0 8m36s - apache-deployment-574c8c4874-9pr5j 1/1 Running 0 8m36s - apache-deployment-574c8c4874-fbs46 1/1 Running 0 8m34s - apache-deployment-574c8c4874-nn7dl 1/1 Running 0 8m36s - apache-deployment-574c8c4874-pndgp 1/1 Running 0 8m33s - -Issue the `describe` command to view all of the available details of the Pod: - - kubectl describe pod apache-deployment-574c8c4874-pndgp - -You'll see a long list of details, of which the container image is included: - - .... - - Containers: - apache-container: - Container ID: docker://d7a65e7993ab5bae284f07f59c3ed422222100833b2769ff8ee14f9f384b7b94 - Image: httpd:2.4.38 - - .... - - -For more information on Deployments, visit the [Kubernetes Deployments API documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#deployment-v1-apps) - -### Jobs - -A *Job* is a controller that manages a Pod that is created for a single, or set, of tasks. This is handy if you need to create a Pod that performs a single function, or calculates a value. The deletion of the Job will delete the Pod. - -Below is an example of a Job that simply prints "Hello World!" and ends: - -{{< file "my-job.yaml" yaml>}} -apiVersion: batch/v1 -kind: Job -metadata: - name: hello-world -spec: - template: - metadata: - name: hello-world - spec: - containers: - - name: output - image: debian - command: - - "bin/bash" - - "-c" - - "echo 'Hello World!'" - restartPolicy: Never -{{}} - -To create the Job, issue the `create` command: - - kubectl create -f my-job.yaml - -To see if the job has run, or is running, issue the `get jobs` command: - - kubectl get jobs - -You should see output like the following: - - NAME COMPLETIONS DURATION AGE - hello-world 1/1 9s 8m23s - -To get the Pod of the Job, issue the `get pods` command: - - kubectl get pods - -You should see an output like the following: - - NAME READY STATUS RESTARTS AGE - hello-world-4jzdm 0/1 Completed 0 9m44s - -You can use the name of the Pod to inspect its output by consulting the log file for the Pod: - - kubectl get logs hello-world-4jzdm - -To delete the Job, and its Pod, issue the `delete` command: - - kubectl delete job hello-world - -## Networking - -Networking in Kubernetes was designed to make it simple to port existing apps from VMs to containers, and subsequently, Pods. The basic requirements of the Kubernetes networking model are: - -1. Pods can communicate with each other across Nodes without the use of [NAT](https://whatismyipaddress.com/nat) -2. Agents on a Node, like kubelet, can communicate with all of a Node's Pods -3. In the case of Linux, Pods in a Node's host network can communicate to all other Pods without NAT. - -Though the rules of the Kubernetes networking model are simple, the implementation of those rules is an advanced topic. Because Kubernetes does not come with its own implementation, it is up to the user to provide a networking model. - -Two of the most popular options are [Flannel](https://github.com/coreos/flannel#flannel) and [Calico](https://docs.projectcalico.org/v2.0/getting-started/kubernetes/). Flannel is a networking overlay that meets the functionality of the Kubernetes networking model by supplying a layer 3 network fabric, and is relatively easy to set up. Calico enables networking, and networking policy through the [NetworkPolicy API](https://kubernetes.io/docs/concepts/services-networking/network-policies/) to provide simple virtual networking. - -For more information on the Kubernetes networking model, and ways to implement it, consult the [cluster networking documentation](https://kubernetes.io/docs/concepts/cluster-administration/networking/). - -## Advanced Topics - -There are a number of advanced topics in Kubernetes. Below are a few you might find useful as you progress in Kubernetes: - - - [StatefulSets](https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/) can be used when creating stateful applications. - - [DaemonSets](https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/) can be used to ensure each Node is running a certain Pod. This is useful for log collection, monitoring, and cluster storage. - - [Horizontal Pod Autoscaling](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) can automatically scale your deployments based on CPU usage. - - [CronJobs](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/) can schedule [Jobs](#jobs) to run at certain times. - - [ResourceQuotas](https://kubernetes.io/docs/concepts/policy/resource-quotas/) are helpful when working with larger groups where there is a concern that some teams might take up too many resources. - -## Next Steps - -Now that you are familiar with Kubernetes concepts and components, you can follow the [Getting Started with Kubernetes: Use kubeadm to Deploy a Cluster on Linode](/docs/applications/containers/getting-started-with-kubernetes/) guide. This guide provides a hands-on activity to continue learning about Kubernetes. If you would like to deploy a Kubernetes cluster on Linode for production use, we recommend using one of the following methods, instead: - - - [How to Deploy Kubernetes on Linode with the k8s-alpha CLI](/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/) - - [How to Deploy Kubernetes on Linode with Rancher 2.2](/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/) \ No newline at end of file diff --git a/docs/applications/containers/kubernetes-reference/index.md b/docs/applications/containers/kubernetes-reference/index.md index 0d41d0141e8..853d7099e1b 100644 --- a/docs/applications/containers/kubernetes-reference/index.md +++ b/docs/applications/containers/kubernetes-reference/index.md @@ -11,6 +11,7 @@ modified_by: title: "Kubernetes Reference Guide" contributor: name: Linode +concentrations: ["Kubernetes"] external_resources: - '[Kubernetes API Documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/)' - '[Kubernetes Concepts Documentation](https://kubernetes.io/docs/concepts/)' diff --git a/docs/applications/containers/kubernetes/_index.md b/docs/applications/containers/kubernetes/_index.md new file mode 100644 index 00000000000..1949d615fb8 --- /dev/null +++ b/docs/applications/containers/kubernetes/_index.md @@ -0,0 +1,14 @@ +--- +author: + name: Linode + email: docs@linode.com +description: '*Kubernetes*, often referred to as *k8s*, is an open source container orchestration system that helps deploy and manage containerized applications.' +keywords: ["kubernetes"] +license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' +aliases: ['kubernetes/'] +published: 2019-07-29 +title: Kubernetes +show_in_lists: true +--- + + diff --git a/docs/applications/containers/beginners-guide-to-kubernetes/beginners-guide-to-kubernetes.png b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-1-introduction/beginners-guide-to-kubernetes.png similarity index 100% rename from docs/applications/containers/beginners-guide-to-kubernetes/beginners-guide-to-kubernetes.png rename to docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-1-introduction/beginners-guide-to-kubernetes.png diff --git a/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-1-introduction/index.md b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-1-introduction/index.md new file mode 100644 index 00000000000..0a5ab1a3c9b --- /dev/null +++ b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-1-introduction/index.md @@ -0,0 +1,67 @@ +--- +author: + name: Andy Stevens + email: docs@linode.com +description: 'An introduction to Kubernetes concepts and components.' +keywords: ['kubernetes','k8s','beginner','architecture'] +license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' +published: 2019-07-29 +modified_by: + name: Linode +title: "A Beginner's Guide to Kubernetes, Part 1: Introduction" +contributor: + name: Linode +concentrations: ["Kubernetes"] +external_resources: +- '[Kubernetes API Documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/)' +- '[Kubernetes Concepts Documentation](https://kubernetes.io/docs/concepts/)' +aliases: ['applications/containers/kubernetes/beginners-guide-to-kubernetes-introduction/'] +--- + +![A Beginner's Guide to Kubernetes](beginners-guide-to-kubernetes.png "A Beginner's Guide to Kubernetes") + +{{< note >}} +This is the first guide in the [Beginner's Guide to Kubernetes](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes) series that explains the major parts and concepts of Kubernetes. +{{< /note >}} + +*Kubernetes*, often referred to as *k8s*, is an open source container orchestration system that helps deploy and manage containerized applications. Developed by Google starting in 2014 and written in the [Go](http://golang.org) language, Kubernetes is quickly becoming the standard way to architect horizontally-scalable applications. + +In this guide you will learn about [containers and orchestration](#containers), [the Kubernetes API](#kubernetes-api), and [kubectl](#kubectl). + +## Containers + +Kubernetes is a container orchestration tool and, therefore, needs a container runtime installed to work. + +In practice, the default container runtime for Kubernetes is [Docker](https://www.docker.com/), though other runtimes like [rkt](https://coreos.com/rkt/), and [LXD](https://linuxcontainers.org/lxd/introduction/) will also work. With the advent of the [Container Runtime Interface (CRI)](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md), which hopes to standardize the way Kubernetes interacts with containers, other options like [containerd](https://containerd.io/), [cri-o](https://cri-o.io/), and [Frakti](https://github.com/kubernetes/frakti) have also become available. The guides in this series assume you have a working knowledge of containers and the examples will all use Docker as the container runtime. + + - **Containers** are similar to virtual machines. They are light-weight isolated runtimes that share resources of the operating system without having to run a full operating system themselves. Containers consume few resources but contain a complete set of information needed to execute their contained application images such as files, environment variables, and libraries. + + - **Containerization** is a virtualization method to run distributed applications in containers using microservices. Containerizing an application requires a base image that can be used to create an instance of a container. Once an application’s image exists, you can push it to a centralized container registry that Kubernetes can use to deploy container instances in a cluster’s *pods*, which you will learn more about in [Beginner's Guide to Kubernetes: Objects](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-objects/#pods). + + - **Orchestration** is the automated configuration, coordination, and management of computer systems, software, middleware, and services. It takes advantage of automated tasks to execute processes. For Kubernetes, container orchestration automates all the provisioning, deployment, and availability of containers; load balancing; resource allocation between containers; and health monitoring of the cluster. + +## Kubernetes API + +Kubernetes is built around a robust RESTful API. Every action taken in Kubernetes, be it inter-component communication or user command, interacts in some fashion with the Kubernetes API. The goal of the API is to help facilitate the desired state of the Kubernetes cluster. + +The Kubernetes API is a "declarative model", meaning that it focuses on the what, not the how. You tell it what you want to accomplish and it does it. This might involve creating or destroying resources but you don't have to worry about those details. To create this desired state, you create *objects*, which are normally represented by YAML files called *manifests*, and apply them through the command line with the **kubectl** tool. + +## kubectl + +kubectl is a command line tool used to interact with the Kubernetes cluster. It offers a host of features, including the ability to create, stop, and delete resources; describe active resources; and auto scale resources. + +For more information on the types of commands and resources you can use with kubectl, consult the [Kubernetes kubectl documentation](https://kubernetes.io/docs/reference/kubectl/overview/). + +## Next Steps + +To continue in the [Beginner's Guide to Kubernetes](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes) series, visit part 2: + + - [Beginner's Guide to Kubernetes, Part 1: Introduction](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-1-introduction/) (You Are Here) + + - [Beginner's Guide to Kubernetes, Part 2: Master, Nodes, and the Control Plane](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-2-master-nodes-control-plane/) + + - [Beginner's Guide to Kubernetes, Part 3: Objects](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-3-objects/) + + - [Beginner's Guide to Kubernetes, Part 4: Controllers](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-4-controllers/) + + - [Beginner's Guide to Kubernetes, Part 5: Conclusion](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-5-conclusion/) diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/deploy-kubernetes-with-k8s-cli.png b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-2-master-nodes-control-plane/beginners-guide-to-kubernetes.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/deploy-kubernetes-with-k8s-cli.png rename to docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-2-master-nodes-control-plane/beginners-guide-to-kubernetes.png diff --git a/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-2-master-nodes-control-plane/index.md b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-2-master-nodes-control-plane/index.md new file mode 100644 index 00000000000..354f1ad61a5 --- /dev/null +++ b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-2-master-nodes-control-plane/index.md @@ -0,0 +1,63 @@ +--- +author: + name: Andy Stevens + email: docs@linode.com +description: 'An introduction to Kubernetes concepts and components.' +keywords: ['kubernetes','k8s','beginner','architecture'] +license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' +published: 2019-07-29 +modified_by: + name: Linode +title: "A Beginner's Guide to Kubernetes, Part 2: Master, Nodes, and the Control Plane" +contributor: + name: Linode +concentrations: ["Kubernetes"] +external_resources: +- '[Kubernetes API Documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/)' +- '[Kubernetes Concepts Documentation](https://kubernetes.io/docs/concepts/)' +aliases: ['applications/containers/kubernetes/beginners-guide-to-kubernetes-master-nodes-control-plane/'] +--- + +![A Beginner's Guide to Kubernetes](beginners-guide-to-kubernetes.png "A Beginner's Guide to Kubernetes") + +{{< note >}} +This is the second guide in the [Beginner's Guide to Kubernetes](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes) series that explains the major parts and concepts of Kubernetes. +{{< /note >}} + +At the highest level of Kubernetes, there exist two kinds of servers, a *Master* and a *Node*. These servers can be Linodes, VMs, or physical servers. Together, these servers form a *cluster* and are controlled by the services that make up the *Control Plane*. + +In this guide you will learn about [the Master server](#kubernetes-master), cluster [nodes](#nodes), and the Kubernetes [Control Plane](#the-control-plane). + +## Kubernetes Master + +The Kubernetes Master is normally a separate server responsible for maintaining the desired state of the cluster. It does this by telling the Nodes how many instances of your application it should run and where. + +## Nodes + +Kubernetes Nodes are worker servers that run your application(s). The number of Nodes is determined by the user, and they are created by the user. In addition to running your application, each Node runs two processes: + +- **kubelet** receives descriptions of the desired state of a [Pod](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-objects/#pods) from the API server, and ensures the Pod is healthy, and running on the Node. +- **kube-proxy** is a networking proxy that proxies the UDP, TCP, and SCTP networking of each Node, and provides load balancing. This is only used to connect to [Services](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-objects/#services). + +## The Control Plane + +Together, kube-apiserver, kube-controller-manager, kube-scheduler, and etcd form what is known as the *control plane*. The control plane is responsible for making decisions about the cluster, and pushing it toward the desired state. kube-apiserver, kube-controller-manager, and kube-scheduler are processes and etcd is a database; all four are run by the Kubernetes Master. + + - **kube-apiserver** is the front end for the Kubernetes API server. + - **kube-controller-manager** is a daemon that manages the Kubernetes control loop. For more on Controllers, see the [Beginner's Guide to Kubernetes: Controllers](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-controllers/). + - **kube-scheduler** is a function that looks for newly created Pods that have no Nodes, and assigns them a Node based on a host of requirements. For more information on kube-scheduler, consult the [Kubernetes kube-scheduler documentation](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-scheduler/). + - **Etcd** is a highly available key-value store that provides the backend database for Kubernetes. It stores and replicates the entirety of the Kubernetes cluster state. It's written in Go and uses the [Raft protocol](https://raft.github.io/) which means it maintains identical logs of state changing commands across nodes and coordinates the order in which these state changes occur. + +## Next Steps + +To continue in the [Beginner's Guide to Kubernetes](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes) series, visit part 3: + + - [Beginner's Guide to Kubernetes, Part 1: Introduction](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-1-introduction/) + + - [Beginner's Guide to Kubernetes, Part 2: Master, Nodes, and the Control Plane](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-2-master-nodes-control-plane/) (You Are Here) + + - [Beginner's Guide to Kubernetes, Part 3: Objects](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-3-objects/) + + - [Beginner's Guide to Kubernetes, Part 4: Controllers](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-4-controllers/) + + - [Beginner's Guide to Kubernetes, Part 5: Conclusion](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-5-conclusion/) \ No newline at end of file diff --git a/docs/applications/containers/how-to-install-apps-on-kubernetes-with-helm/install-apps-kubernetes-helm.png b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-3-objects/beginners-guide-to-kubernetes.png similarity index 100% rename from docs/applications/containers/how-to-install-apps-on-kubernetes-with-helm/install-apps-kubernetes-helm.png rename to docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-3-objects/beginners-guide-to-kubernetes.png diff --git a/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-3-objects/index.md b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-3-objects/index.md new file mode 100644 index 00000000000..6943c107821 --- /dev/null +++ b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-3-objects/index.md @@ -0,0 +1,257 @@ +--- +author: + name: Andy Stevens + email: docs@linode.com +description: 'An introduction to Kubernetes concepts and components.' +keywords: ['kubernetes','k8s','beginner','architecture'] +license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' +published: 2019-07-29 +modified_by: + name: Linode +title: "A Beginner's Guide to Kubernetes, Part 3: Objects" +contributor: + name: Linode +concentrations: ["Kubernetes"] +external_resources: +- '[Kubernetes API Documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/)' +- '[Kubernetes Concepts Documentation](https://kubernetes.io/docs/concepts/)' +aliases: ['applications/containers/kubernetes/beginners-guide-to-kubernetes-objects/'] +--- + +![A Beginner's Guide to Kubernetes](beginners-guide-to-kubernetes.png "A Beginner's Guide to Kubernetes") + +{{< note >}} +This is the third guide in the [Beginner's Guide to Kubernetes](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes) series that explains the major parts and concepts of Kubernetes. +{{< /note >}} + +In Kubernetes, there are a number of objects that are abstractions of your Kubernetes system's desired state. These objects represent your application, its networking, and disk resources -- all of which together form your application. + +In this guide you will learn about [Pods](#pods), [Services](#services), [Volumes](#volumes), and [Namespaces](#namespaces). + +## Pods + +In Kubernetes, all containers exist within *Pods*. Pods are the smallest unit of the Kubernetes architecture, and can be viewed as a kind of wrapper for your container. Each Pod is given its own IP address with which it can interact with other Pods within the cluster. + +Usually, a Pod contains only one container, but a Pod can contain multiple containers if those containers need to share resources. If there is more than one container in a Pod, these containers can communicate with one another via localhost. + +Pods in Kubernetes are "mortal," which means that they are created, and destroyed depending on the needs of the application. For instance, you might have a web app backend that sees a spike in CPU usage. This might cause the cluster to scale up the amount of backend Pods from two to ten, in which case eight new Pods would be created. Once the traffic subsides, the Pods might scale back to two, in which case eight pods would be destroyed. + +It is important to note that Pods are destroyed without respect to which Pod was created first. And, while each Pod has its own IP address, this IP address will only be available for the life-cycle of the Pod. + +Below is an example of a Pod manifest: + +{{< file "my-apache-pod.yaml" yaml >}} +apiVersion: v1 +kind: Pod +metadata: + name: apache-pod + labels: + app: web +spec: + containers: + - name: apache-container + image: httpd +{{}} + +Each manifest has four necessary parts: + +- The version of the API in use +- The kind of resource you'd like to define +- Metadata about the resource +- Though not required by all objects, a spec which describes the desired behavior of the resource is necessary for most objects and controllers. + +In the case of this example, the API in use is `v1`, and the `kind` is a Pod. The metadata field is used for applying a name, labels, and annotations. Names are used to differentiate resources, while labels are used to group like resources. Labels will come into play more when defining [Services](#services) and [Deployments](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-controllers/#deployments). Annotations are for attaching arbitrary data to the resource. + +The spec is where the desired state of the resource is defined. In this case, a Pod with a single Apache container is desired, so the `containers` field is supplied with a name, 'apache-container', and an image, the latest version of Apache. The image is pulled from [Docker Hub](https://hub.docker.com), as that is the default container registry for Kubernetes. + +For more information on the type of fields you can supply in a Pod manifest, refer to the [Kubernetes Pod API documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#pod-v1-core). + +Now that you have the manifest, you can create the Pod using the `create` command: + + kubectl create -f my-apache-pod.yaml + +To view a list of your pods, use the `get pods` command: + + kubectl get pods + +You should see output like the following: + + NAME READY STATUS RESTARTS AGE + apache-pod 1/1 Running 0 16s + +To quickly view which Node the Pod exists on, issue the `get pods` command with the `-o=wide` flag: + + kubectl get pods -o=wide + +To retrieve information about the Pod, issue the `describe` command: + + kubcetl describe pod apache-pod + +You should see output like the following: + + ... + Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal Scheduled 2m38s default-scheduler Successfully assigned default/apache-pod to mycluster-node-1 + Normal Pulling 2m36s kubelet, mycluster-node-1 pulling image "httpd" + Normal Pulled 2m23s kubelet, mycluster-node-1 Successfully pulled image "httpd" + Normal Created 2m22s kubelet, mycluster-node-1 Created container + Normal Started 2m22s kubelet, mycluster-node-1 Started container + +To delete the Pod, issue the `delete` command: + + kubectl delete pod apache-pod + +## Services + +*Services* group identical Pods together to provide a consistent means of accessing them. For instance, you might have three Pods that are all serving a website, and all of those Pods need to be accessible on port 80. A Service can ensure that all of the Pods are accessible at that port, and can load balance traffic between those Pods. Additionally, a Service can allow your application to be accessible from the internet. Each Service is given an IP address and a corresponding local DNS entry. Additionally, Services exist across Nodes. If you have two replica Pods on one Node and an additional replica Pod on another Node, the service can include all three Pods. There are four types of Service: + +- **ClusterIP**: Exposes the Service internally to the cluster. This is the default setting for a Service. +- **NodePort**: Exposes the Service to the internet from the IP address of the Node at the specified port number. You can only use ports in the 30000-32767 range. +- **LoadBalancer**: This will create a load balancer assigned to a fixed IP address in the cloud, so long as the cloud provider supports it. In the case of Linode, this is the responsibility of the [Linode Cloud Controller Manager](https://github.com/linode/linode-cloud-controller-manager), which will create a NodeBalancer for the cluster. This is the best way to expose your cluster to the internet. +- **ExternalName**: Maps the service to a DNS name by returning a CNAME record redirect. ExternalName is good for directing traffic to outside resources, such as a database that is hosted on another cloud. + +Below is an example of a Service manifest: + +{{< file "my-apache-service.yaml" yaml>}} +apiVersion: v1 +kind: Service +metadata: + name: apache-service + labels: + app: web +spec: + type: NodePort + ports: + - port: 80 + targetPort: 80 + nodePort: 30020 + selector: + app: web +{{}} + +The above example Service uses the `v1` API, and its `kind` is Service. Like the Pod example in the previous section, this manifest has a name and a label. Unlike the Pod example, this spec uses the `ports` field to define the exposed port on the container (`port`), and the target port on the Pod (`targetPort`). The `type` `NodePort` unlocks the use of `nodePort` field, which allows traffic on the host Node at that port. Lastly, the `selector` field is used to target only the Pods that have been assigned the `app: web` label. + +For more information on Services, visit the [Kubernetes Service API documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#service-v1-core). + +To create the Service from the YAML file, issue the create command: + + kubectl create -f my-apache-service.yaml + +To view a list of running services, issue the `get services` command: + + kubectl get services + +You should see output like the following: + + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + apache-service NodePort 10.99.57.13 80:30020/TCP 54s + kubernetes ClusterIP 10.96.0.1 443/TCP 46h + +To retrieve more information about your Service, issue the `describe` command: + + kubectl describe service apache-service + +To delete the Service, issue the delete command: + + kubcetl delete service apache-service + +## Volumes + +A *Volume* in Kubernetes is a way to share file storage between containers in a Pod. Kubernetes Volumes differ from Docker volumes because they exist inside the Pod rather than inside the container. When a container is restarted the Volume persists. Note, however, that these Volumes are still tied to the lifecycle of the Pod, so if the Pod is destroyed the Volume will be destroyed with it. + +Linode also offers a [Container Storage Interface (CSI) driver](https://github.com/linode/linode-blockstorage-csi-driver) that allows the cluster to persist data on a Block Storage volume. + +Below is an example of how to create and use a Volume by creating a Pod manifest: + +{{< file "my-apache-pod-with-volume.yaml" yaml>}} +apiVersion: v1 +kind: Pod +metadata: + name: apache-with-volume +spec: + volumes: + - name: apache-storage-volume + emptyDir: {} + + containers: + - name: apache-container + image: httpd + volumeMounts: + - name: apache-storage-volume + mountPath: /data/apache-data +{{}} + +A Volume has two unique aspects to its definition. In this example, the first aspect is the `volumes` block that defines the type of Volume you want to create, which in this case is a simple empty directory (`emptyDir`). The second aspect is the `volumeMounts` field within the container's `spec`. This field is given the name of the Volume you are creating and a mount path within the container. + +There are a number of different Volume types you could create in addition to `emptyDir` depending on your cloud host. For more information on Volume types, visit the [Kubernetes Volumes API documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#volume-v1-core). + + +## Namespaces + +Namespaces are virtual clusters that exist within the Kubernetes cluster that help to group and organize objects. Every cluster has at least three namespaces: `default`, `kube-system`, and `kube-public`. When interacting with the cluster it is important to know which Namespace the object you are looking for is in, as many commands will default to only showing you what exists in the `default` namespace. Resources created without an explicit namespace will be added to the `default` namespace. + +Namespaces consist of alphanumeric characters, dashes (`-`), and periods (`.`). + +Here is an example of how to define a Namespace with a manifest: + +{{< file "my-namespace.yaml" yaml>}} +apiVersion: v1 +kind: Namespace +metadata: + name: my-app +{{}} + +To create the Namespace, issue the `create` command: + + kubcetl create -f my-namespace.yaml + +Below is an example of a Pod with a Namespace: + +{{< file "my-apache-pod-with-namespace.yaml" yaml >}} +apiVersion: v1 +kind: Pod +metadata: + name: apache-pod + labels: + app: web + namespace: my-app +spec: + containers: + - name: apache-container + image: httpd +{{}} + +To retrieve resources in a certain Namespace, use the `-n` flag. + + kubectl get pods -n my-app + +You should see a list of Pods within your namespace: + + NAME READY STATUS RESTARTS AGE + apache-pod 1/1 Running 0 7s + +To view Pods in all Namespaces, use the `--all-namespaces` flag. + + kubectl get pods --all-namespaces + +To delete a Namespace, issue the `delete namespace` command. Note that this will delete all resources within that Namespace: + + kubectl delete namespace my-app + +For more information on Namespaces, visit the [Kubernetes Namespaces API documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#namespace-v1-core) + +## Next Steps + +To continue in the [Beginner's Guide to Kubernetes](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes) series, visit part 4: + + - [Beginner's Guide to Kubernetes, Part 1: Introduction](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-1-introduction/) + + - [Beginner's Guide to Kubernetes, Part 2: Master, Nodes, and the Control Plane](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-2-master-nodes-control-plane/) + + - [Beginner's Guide to Kubernetes, Part 3: Objects](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-3-objects/) (You Are Here) + + - [Beginner's Guide to Kubernetes, Part 4: Controllers](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-4-controllers/) + + - [Beginner's Guide to Kubernetes, Part 5: Conclusion](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-5-conclusion/) \ No newline at end of file diff --git a/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-4-controllers/beginners-guide-to-kubernetes.png b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-4-controllers/beginners-guide-to-kubernetes.png new file mode 100644 index 00000000000..4b32ab97787 Binary files /dev/null and b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-4-controllers/beginners-guide-to-kubernetes.png differ diff --git a/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-4-controllers/index.md b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-4-controllers/index.md new file mode 100644 index 00000000000..81f6f87e26f --- /dev/null +++ b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-4-controllers/index.md @@ -0,0 +1,236 @@ +--- +author: + name: Andy Stevens + email: docs@linode.com +description: 'An introduction to Kubernetes concepts and components.' +keywords: ['kubernetes','k8s','beginner','architecture'] +license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' +published: 2019-07-29 +modified_by: + name: Linode +title: "A Beginner's Guide to Kubernetes, Part 4: Controllers" +contributor: + name: Linode +concentrations: ["Kubernetes"] +external_resources: +- '[Kubernetes API Documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/)' +- '[Kubernetes Concepts Documentation](https://kubernetes.io/docs/concepts/)' +aliases: ['applications/containers/kubernetes/beginners-guide-to-kubernetes-controllers/'] +--- + +![A Beginner's Guide to Kubernetes](beginners-guide-to-kubernetes.png "A Beginner's Guide to Kubernetes") + +{{< note >}} +This is the fourth guide in the [Beginner's Guide to Kubernetes](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes) series that explains the major parts and concepts of Kubernetes. +{{< /note >}} + +A Controller is a control loop that continuously watches the Kubernetes API and tries to manage the desired state of certain aspects of the cluster. There are a number of controllers. Below is a short reference of the most popular controllers you might interact with. + +In this guide you will learn about [ReplicaSets](#replicasets), [Deployments](#deployments), and [Jobs](#jobs). + +## ReplicaSets + +As has been mentioned, Kubernetes allows an application to scale horizontally. A *ReplicaSet* is one of the controllers responsible for keeping a given number of replica Pods running. If one Pod goes down in a ReplicaSet, another will be created to replace it. In this way, Kubernetes is *self-healing*. However, for most use cases it is recommended to use a [Deployment](#deployments) instead of a ReplicaSet. + +Below is an example of a ReplicaSet: + +{{< file "my-apache-replicaset.yaml" yaml>}} +apiVersion: apps/v1 +kind: ReplicaSet +metadata: + name: apache-replicaset + labels: + app: web +spec: + replicas: 5 + selector: + matchLabels: + app: web + template: + metadata: + labels: + app: web + spec: + containers: + - name: apache-container + image: httpd +{{}} + +There are three main things to note in this ReplicaSet. The first is the `apiVersion`, which is `apps/v1`. This differs from the previous examples, which were all `apiVersion: v1`, because ReplicaSets do not exist in the `v1` core. They instead reside in the `apps` group of `v1`. The second and third things to note are the `replicas` field and the `selector` field. The `replicas` field defines how many replica Pods you want to be running at any given time. The `selector` field defines which Pods, matched by their label, will be controlled by the ReplicaSet. + +To view your ReplicaSets, issue the `get replicasets` command: + + kubectl get replicasets + +You should see output like the following: + + NAME DESIRED CURRENT READY AGE + apache-replicaset 5 5 0 5s + +This output shows that of the five desired replicas, there are 5 currently active, but zero of those replicas are available. This is because the Pods are still booting up. If you issue the command again, you will see that all five have become ready: + + NAME DESIRED CURRENT READY AGE + apache-replicaset 5 5 5 86s + +You can view the Pods the ReplicaSet created by issuing the `get pods` command: + + kubectl get pods + +You should see output like the following: + + NAME READY STATUS RESTARTS AGE + apache-replicaset-5rsx2 1/1 Running 0 31s + apache-replicaset-8n52c 1/1 Running 0 31s + apache-replicaset-jcgn8 1/1 Running 0 31s + apache-replicaset-sj422 1/1 Running 0 31s + apache-replicaset-z8g76 1/1 Running 0 31s + +To delete a ReplicaSet, issue the `delete replicaset` command: + + kubectl delete replicaset apache-replicaset + +If you issue the `get pods` command, you will see that the Pods the ReplicaSet created are in the process of terminating: + + NAME READY STATUS RESTARTS AGE + apache-replicaset-bm2pn 0/1 Terminating 0 3m54s + +In the above example, four of the Pods have already terminated, and one is in the process of terminating. + +For more information on ReplicaSets, view the [Kubernetes ReplicaSets API documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#replicaset-v1-apps). + +## Deployments + +A *Deployment* can manage a ReplicaSet, so it shares the ability to keep a defined number of replica Pods up and running. A Deployment can also update those Pods to resemble the desired state by means of rolling updates. For example, if you wanted to update a container image to a newer version, you would create a Deployment, and the controller would update the container images one by one until the desired state is achieved. This ensures that there is no downtime when updating or altering your Pods. + +Below is an example of a Deployment: + +{{< file "my-apache-deployment.yaml" yaml>}} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: apache-deployment + labels: + app: web +spec: + replicas: 5 + selector: + matchLabels: + app: web + template: + metadata: + labels: + app: web + spec: + containers: + - name: apache-container + image: httpd:2.4.35 +{{}} + +The only noticeable difference between this Deployment and the example given in the ReplicaSet section is the `kind`. In this example we have chosen to initially install Apache 2.4.35. If you wanted to update that image to Apache 2.4.38, you would issue the following command: + + kubectl --record deployment.apps/apache-deployment set image deployment.v1.apps/apache-deployment apache-container=httpd:2.4.38 + +You'll see a confirmation that the images have been updated: + + deployment.apps/apache-deployment image updated + +To see for yourself that the images have updated, you can grab the Pod name from the `get pods` list: + + kubectl get pods + + NAME READY STATUS RESTARTS AGE + apache-deployment-574c8c4874-8zwgl 1/1 Running 0 8m36s + apache-deployment-574c8c4874-9pr5j 1/1 Running 0 8m36s + apache-deployment-574c8c4874-fbs46 1/1 Running 0 8m34s + apache-deployment-574c8c4874-nn7dl 1/1 Running 0 8m36s + apache-deployment-574c8c4874-pndgp 1/1 Running 0 8m33s + +Issue the `describe` command to view all of the available details of the Pod: + + kubectl describe pod apache-deployment-574c8c4874-pndgp + +You'll see a long list of details, of which the container image is included: + + .... + + Containers: + apache-container: + Container ID: docker://d7a65e7993ab5bae284f07f59c3ed422222100833b2769ff8ee14f9f384b7b94 + Image: httpd:2.4.38 + + .... + + +For more information on Deployments, visit the [Kubernetes Deployments API documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#deployment-v1-apps) + +## Jobs + +A *Job* is a controller that manages a Pod that is created for a single, or set, of tasks. This is handy if you need to create a Pod that performs a single function, or calculates a value. The deletion of the Job will delete the Pod. + +Below is an example of a Job that simply prints "Hello World!" and ends: + +{{< file "my-job.yaml" yaml>}} +apiVersion: batch/v1 +kind: Job +metadata: + name: hello-world +spec: + template: + metadata: + name: hello-world + spec: + containers: + - name: output + image: debian + command: + - "bin/bash" + - "-c" + - "echo 'Hello World!'" + restartPolicy: Never +{{}} + +To create the Job, issue the `create` command: + + kubectl create -f my-job.yaml + +To see if the job has run, or is running, issue the `get jobs` command: + + kubectl get jobs + +You should see output like the following: + + NAME COMPLETIONS DURATION AGE + hello-world 1/1 9s 8m23s + +To get the Pod of the Job, issue the `get pods` command: + + kubectl get pods + +You should see an output like the following: + + NAME READY STATUS RESTARTS AGE + hello-world-4jzdm 0/1 Completed 0 9m44s + +You can use the name of the Pod to inspect its output by consulting the log file for the Pod: + + kubectl get logs hello-world-4jzdm + +To delete the Job, and its Pod, issue the `delete` command: + + kubectl delete job hello-world + +## Next Steps + +There are other controllers not listed in this guide that you may find useful. Visit the [official Kubernetes documentation](https://kubernetes.io/docs/concepts/#kubernetes-objects) for more information. + +To continue in the [Beginner's Guide to Kubernetes](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes) series, visit part 5: + + - [Beginner's Guide to Kubernetes, Part 1: Introduction](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-1-introduction/) + + - [Beginner's Guide to Kubernetes, Part 2: Master, Nodes, and the Control Plane](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-2-master-nodes-control-plane/) + + - [Beginner's Guide to Kubernetes, Part 3: Objects](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-3-objects/) + + - [Beginner's Guide to Kubernetes, Part 4: Controllers](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-4-controllers/) (You Are Here) + + - [Beginner's Guide to Kubernetes, Part 5: Conclusion](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-5-conclusion/) \ No newline at end of file diff --git a/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-5-conclusion/beginners-guide-to-kubernetes.png b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-5-conclusion/beginners-guide-to-kubernetes.png new file mode 100644 index 00000000000..4b32ab97787 Binary files /dev/null and b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-5-conclusion/beginners-guide-to-kubernetes.png differ diff --git a/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-5-conclusion/index.md b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-5-conclusion/index.md new file mode 100644 index 00000000000..e9acfd6b356 --- /dev/null +++ b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-5-conclusion/index.md @@ -0,0 +1,64 @@ +--- +author: + name: Andy Stevens + email: docs@linode.com +description: 'An introduction to Kubernetes concepts and components.' +keywords: ['kubernetes','k8s','beginner','architecture'] +license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' +published: 2019-07-29 +modified_by: + name: Linode +title: "A Beginner's Guide to Kubernetes, Part 5: Conclusion" +contributor: + name: Linode +concentrations: ["Kubernetes"] +external_resources: +- '[Kubernetes API Documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/)' +- '[Kubernetes Concepts Documentation](https://kubernetes.io/docs/concepts/)' +aliases: ['applications/containers/kubernetes/beginners-guide-to-kubernetes-conclusion/'] +--- + +![A Beginner's Guide to Kubernetes](beginners-guide-to-kubernetes.png "A Beginner's Guide to Kubernetes") + +{{< note >}} +This is the fifth guide in the [Beginner's Guide to Kubernetes](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes) series that explains the major parts and concepts of Kubernetes. +{{< /note >}} + +In this guide you will learn about [networking](#networking) in Kubernetes and about [advanced Kubernetes topics](#advanced-topics). + +## Networking + +Networking in Kubernetes was designed to make it simple to port existing apps from VMs to containers, and subsequently, Pods. The basic requirements of the Kubernetes networking model are: + +1. Pods can communicate with each other across Nodes without the use of [NAT](https://whatismyipaddress.com/nat) +2. Agents on a Node, like kubelet, can communicate with all of a Node's Pods +3. In the case of Linux, Pods in a Node's host network can communicate to all other Pods without NAT. + +Though the rules of the Kubernetes networking model are simple, the implementation of those rules is an advanced topic. Because Kubernetes does not come with its own implementation, it is up to the user to provide a networking model. + +Two of the most popular options are [Flannel](https://github.com/coreos/flannel#flannel) and [Calico](https://docs.projectcalico.org/v2.0/getting-started/kubernetes/). + + - **Flannel** is a networking overlay that meets the functionality of the Kubernetes networking model by supplying a layer 3 network fabric, and is relatively easy to set up. + + - **Calico** enables networking, and networking policy through the [NetworkPolicy API](https://kubernetes.io/docs/concepts/services-networking/network-policies/) to provide simple virtual networking. + +For more information on the Kubernetes networking model, and ways to implement it, consult the [cluster networking documentation](https://kubernetes.io/docs/concepts/cluster-administration/networking/). + +## Advanced Topics + +There are a number of advanced topics in Kubernetes. Below are a few you might find useful as you progress in Kubernetes: + + - [StatefulSets](https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/) can be used when creating stateful applications. + - [DaemonSets](https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/) can be used to ensure each Node is running a certain Pod. This is useful for log collection, monitoring, and cluster storage. + - [Horizontal Pod Autoscaling](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) can automatically scale your deployments based on CPU usage. + - [CronJobs](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/) can schedule [Jobs](#jobs) to run at certain times. + - [ResourceQuotas](https://kubernetes.io/docs/concepts/policy/resource-quotas/) are helpful when working with larger groups where there is a concern that some teams might take up too many resources. + +## Next Steps + +Now that you are familiar with Kubernetes concepts and components, you can follow the [Getting Started with Kubernetes: Use kubeadm to Deploy a Cluster on Linode](/docs/applications/containers/kubernetes/getting-started-with-kubernetes/) guide. This guide provides a hands-on activity to continue learning about Kubernetes. + +If you would like to deploy a Kubernetes cluster on Linode for production use, we recommend using one of the following methods instead. These methods are also a much faster way to get a cluster running, and they will also integrate your cluster with some useful Linode plugins: + + - [How to Deploy Kubernetes on Linode with the k8s-alpha CLI](/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/) + - [How to Deploy Kubernetes on Linode with Rancher 2.2](/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/) \ No newline at end of file diff --git a/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes/beginners-guide-to-kubernetes.png b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes/beginners-guide-to-kubernetes.png new file mode 100644 index 00000000000..4b32ab97787 Binary files /dev/null and b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes/beginners-guide-to-kubernetes.png differ diff --git a/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes/index.md b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes/index.md new file mode 100644 index 00000000000..40b12ea89aa --- /dev/null +++ b/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes/index.md @@ -0,0 +1,35 @@ +--- +author: + name: Andy Stevens + email: docs@linode.com +description: 'An introduction to Kubernetes concepts and components.' +keywords: ['kubernetes','k8s','beginner','architecture'] +license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' +published: 2019-07-29 +modified_by: + name: Linode +title: "A Beginner's Guide to Kubernetes" +aliases: ['applications/containers/beginners-guide-to-kubernetes/'] +contributor: + name: Linode +concentrations: ["Kubernetes"] +external_resources: +- '[Kubernetes API Documentation](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/)' +- '[Kubernetes Concepts Documentation](https://kubernetes.io/docs/concepts/)' +--- + +![A Beginner's Guide to Kubernetes](beginners-guide-to-kubernetes.png "A Beginner's Guide to Kubernetes") + +*Kubernetes*, often referred to as *k8s*, is an open source container orchestration system that helps deploy and manage containerized applications. Developed by Google starting in 2014 and written in the [Go](http://golang.org) language, Kubernetes is quickly becoming the standard way to architect horizontally-scalable applications. + +This guide is the parent to the five-part series of Beginner's Guides to Kubernetes: + + - [Beginner's Guide to Kubernetes, Part 1: Introduction](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-1-introduction/) + + - [Beginner's Guide to Kubernetes, Part 2: Master, Nodes, and the Control Plane](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-2-master-nodes-control-plane/) + + - [Beginner's Guide to Kubernetes, Part 3: Objects](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-3-objects/) + + - [Beginner's Guide to Kubernetes, Part 4: Controllers](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-4-controllers/) + + - [Beginner's Guide to Kubernetes, Part 5: Conclusion](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-5-conclusion/) \ No newline at end of file diff --git a/docs/applications/containers/deploy-container-image-to-kubernetes/index.md b/docs/applications/containers/kubernetes/deploy-container-image-to-kubernetes/index.md similarity index 97% rename from docs/applications/containers/deploy-container-image-to-kubernetes/index.md rename to docs/applications/containers/kubernetes/deploy-container-image-to-kubernetes/index.md index 0baa8cb7a85..472a489495d 100644 --- a/docs/applications/containers/deploy-container-image-to-kubernetes/index.md +++ b/docs/applications/containers/kubernetes/deploy-container-image-to-kubernetes/index.md @@ -6,10 +6,10 @@ description: 'This guide will show you how to package a Hugo static site in a Do keywords: ['kubernetes','docker','docker hub','hugo', 'static site'] license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' published: 2019-05-07 -modified: 2019-05-07 modified_by: name: Linode title: "Create and Deploy a Docker Container Image to a Kubernetes Cluster" +aliases: ['applications/containers/deploy-container-image-to-kubernetes/'] contributor: name: Linode concentrations: ["Kubernetes"] @@ -40,9 +40,9 @@ This guide was written using version 1.14 of Kubectl. ## Before You Begin 1. Create a Kubernetes cluster with one worker node. This can be done in two ways: - 1. Deploy a Kubernetes cluster using [kubeadm](/docs/applications/containers/getting-started-with-kubernetes/). + 1. Deploy a Kubernetes cluster using [kubeadm](/docs/applications/containers/kubernetes/getting-started-with-kubernetes/). - You will need to deploy two Linodes. One will serve as the master node and the other will serve as a worker node. - 1. Deploy a Kubernetes cluster using [k8s-alpha CLI](/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/). + 1. Deploy a Kubernetes cluster using [k8s-alpha CLI](/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/). 1. [Create a GitHub account](https://github.com/join) if you don't already have one. @@ -246,7 +246,7 @@ EXPOSE 80 echo -e "public/\n.git/\n.gitmodules/\n.gitignore" >> .dockerignore -1. Follow the steps 2 - 4 in the [Version Control the Site with Git](/docs/applications/containers/deploy-container-image-to-kubernetes/#version-control-the-site-with-git) section to add any new files created in this section to your local git repository. +1. Follow the steps 2 - 4 in the [Version Control the Site with Git](/docs/applications/containers/kubernetes/deploy-container-image-to-kubernetes/#version-control-the-site-with-git) section to add any new files created in this section to your local git repository. ### Build the Docker Image @@ -431,7 +431,7 @@ spec: - The deployment's object `spec` states that the deployment should have 3 replica pods. This means at any given time the cluster will have 3 pods that run the Hugo site service. - The `template` field provides all the information needed to create actual pods. - The label `app: hugo-site` helps the deployment know which service pods to target. - - The `container` field states that any containers connected to this deployment should use the Hugo site image `mydockerhubusername/hugo-site:v1` that was created in the [Build the Docker Image](/docs/applications/containers/deploy-container-image-to-kubernetes/#build-the-docker-image) section of this guide. + - The `container` field states that any containers connected to this deployment should use the Hugo site image `mydockerhubusername/hugo-site:v1` that was created in the [Build the Docker Image](/docs/applications/containers/kubernetes/deploy-container-image-to-kubernetes/#build-the-docker-image) section of this guide. - `imagePullPolicy: Always` means that the container image will be pulled every time the pod is started. - `containerPort: 80` states the port number to expose on the pod's IP address. The system does not rely on this field to expose the container port, instead, it provides information about the network connections a container uses. @@ -489,5 +489,5 @@ To avoid being further billed for your Kubernetes cluster, tear down your cluste Now that you are familiar with basic Kubernetes concepts, like configuring pods, grouping resources, and deploying services, you can deploy a Kubernetes cluster on Linode for production use by using the steps in the following guides: - - [How to Deploy Kubernetes on Linode with the k8s-alpha CLI](/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/) - - [How to Deploy Kubernetes on Linode with Rancher 2.2](/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/) \ No newline at end of file + - [How to Deploy Kubernetes on Linode with the k8s-alpha CLI](/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/) + - [How to Deploy Kubernetes on Linode with Rancher 2.2](/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/) \ No newline at end of file diff --git a/docs/applications/containers/deploy-minio-on-kubernetes-using-kubespray-and-ansible/Deploy_Minio.jpg b/docs/applications/containers/kubernetes/deploy-minio-on-kubernetes-using-kubespray-and-ansible/Deploy_Minio.jpg similarity index 100% rename from docs/applications/containers/deploy-minio-on-kubernetes-using-kubespray-and-ansible/Deploy_Minio.jpg rename to docs/applications/containers/kubernetes/deploy-minio-on-kubernetes-using-kubespray-and-ansible/Deploy_Minio.jpg diff --git a/docs/applications/containers/deploy-minio-on-kubernetes-using-kubespray-and-ansible/index.md b/docs/applications/containers/kubernetes/deploy-minio-on-kubernetes-using-kubespray-and-ansible/index.md similarity index 99% rename from docs/applications/containers/deploy-minio-on-kubernetes-using-kubespray-and-ansible/index.md rename to docs/applications/containers/kubernetes/deploy-minio-on-kubernetes-using-kubespray-and-ansible/index.md index c1ae44b00f5..07dfd8e05ea 100644 --- a/docs/applications/containers/deploy-minio-on-kubernetes-using-kubespray-and-ansible/index.md +++ b/docs/applications/containers/kubernetes/deploy-minio-on-kubernetes-using-kubespray-and-ansible/index.md @@ -7,10 +7,10 @@ og_description: 'Minio is an open source S3 compatible object store that can be keywords: ['ansible', 'kubernetes', 'cluster', 's3', 'aws'] license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' published: 2018-02-23 -modified: 2018-02-23 modified_by: name: Linode title: 'Deploy Minio on Kubernetes using Kubespray and Ansible' +aliases: ['applications/containers/deploy-minio-on-kubernetes-using-kubespray-and-ansible/'] concentrations: ["Kubernetes"] external_resources: - '[Kubernetes](https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/)' diff --git a/docs/applications/containers/deploy-minio-on-kubernetes-using-kubespray-and-ansible/minio-browser.png b/docs/applications/containers/kubernetes/deploy-minio-on-kubernetes-using-kubespray-and-ansible/minio-browser.png similarity index 100% rename from docs/applications/containers/deploy-minio-on-kubernetes-using-kubespray-and-ansible/minio-browser.png rename to docs/applications/containers/kubernetes/deploy-minio-on-kubernetes-using-kubespray-and-ansible/minio-browser.png diff --git a/docs/applications/containers/deploy-minio-on-kubernetes-using-kubespray-and-ansible/minio-login-screen.png b/docs/applications/containers/kubernetes/deploy-minio-on-kubernetes-using-kubespray-and-ansible/minio-login-screen.png similarity index 100% rename from docs/applications/containers/deploy-minio-on-kubernetes-using-kubespray-and-ansible/minio-login-screen.png rename to docs/applications/containers/kubernetes/deploy-minio-on-kubernetes-using-kubespray-and-ansible/minio-login-screen.png diff --git a/docs/applications/containers/getting-started-with-kubernetes/index.md b/docs/applications/containers/kubernetes/getting-started-with-kubernetes/index.md similarity index 91% rename from docs/applications/containers/getting-started-with-kubernetes/index.md rename to docs/applications/containers/kubernetes/getting-started-with-kubernetes/index.md index 814e41304c5..79133269ea6 100644 --- a/docs/applications/containers/getting-started-with-kubernetes/index.md +++ b/docs/applications/containers/kubernetes/getting-started-with-kubernetes/index.md @@ -6,10 +6,10 @@ description: 'Use kubeadm to deploy a cluster on Linode and get started with Kub keywords: ['kubernetes','orchestration','docker','container'] license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' published: 2019-04-30 -modified: 2019-04-30 modified_by: name: Linode title: "Getting Started with Kubernetes: Use kubeadm to Deploy a Cluster on Linode" +aliases: ['applications/containers/getting-started-with-kubernetes/'] contributor: name: Linode concentrations: ["Kubernetes"] @@ -18,7 +18,7 @@ external_resources: - '[Kubernetes: Cluster Administration Overview](https://kubernetes.io/docs/concepts/cluster-administration/cluster-administration-overview/)' - '[Kubernetes: Securing a Cluster](https://kubernetes.io/docs/tasks/administer-cluster/securing-a-cluster/)' --- -Linode offers several pathways for users to easily deploy a Kubernetes cluster. If you prefer the command line, you can create a Kubernetes cluster with one command using the [Linode CLI's k8s-alpha plugin](https://developers.linode.com/kubernetes/), and [Terraform](https://www.linode.com/docs/applications/configuration-management/beginners-guide-to-terraform/). Or, if you prefer a full featured GUI, [Linode's Rancher integration](/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/) enables you to deploy and manage Kubernetes clusters with a simple web interface. The Linode Kubernetes Engine, currently under development with an early access beta version on its way this summer, allows you to spin up a Kubernetes cluster with Linode handling the management and maintenance of your control plane. These are all great options for production ready deployments. +Linode offers several pathways for users to easily deploy a Kubernetes cluster. If you prefer the command line, you can create a Kubernetes cluster with one command using the [Linode CLI's k8s-alpha plugin](https://developers.linode.com/kubernetes/), and [Terraform](https://www.linode.com/docs/applications/configuration-management/beginners-guide-to-terraform/). Or, if you prefer a full featured GUI, [Linode's Rancher integration](/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/) enables you to deploy and manage Kubernetes clusters with a simple web interface. The Linode Kubernetes Engine, currently under development with an early access beta version on its way this summer, allows you to spin up a Kubernetes cluster with Linode handling the management and maintenance of your control plane. These are all great options for production ready deployments. [Kubeadm](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/) is a cloud provider agnostic tool that automates many of the tasks required to get a cluster up and running. Users of kubeadm can run a few simple commands on individual servers to turn them into a Kubernetes cluster consisting of a master node and worker nodes. This guide will walk you through installing kubeadm and using it to deploy a Kubernetes cluster on Linode. While the kubeadm approach requires more manual steps than other Kubernetes cluster creation pathways offered by Linode, this solution will be covered as way to dive deeper into the various components that make up a Kubernetes cluster and the ways in which they interact with each other to provide a scalable and reliable container orchestration mechanism. @@ -49,7 +49,7 @@ When following the [Getting Started](/docs/getting-started) guide, make sure tha To learn more about managing compute resources for containers, see the official [Kubernetes documentation](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/). -1. Read the [Beginners Guide to Kubernetes](/docs/applications/containers/beginners-guide-to-kubernetes/) to familiarize yourself with the major components and concepts of Kubernetes. The current guide assumes a working knowledge of common Kubernetes concepts and terminology. +1. Read the [Beginners Guide to Kubernetes](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes/) to familiarize yourself with the major components and concepts of Kubernetes. The current guide assumes a working knowledge of common Kubernetes concepts and terminology. ## Build a Kubernetes Cluster ### Kubernetes Cluster Architecture @@ -174,7 +174,7 @@ Complete the steps outlined in this section on all three Linodes. After installing the Kubernetes related tooling on all your Linodes, you are ready to set up the Kubernetes control plane on the master node. The control plane is responsible for allocating resources to your cluster, maintaining the health of your cluster, and ensuring that it meets the minimum requirements you designate for the cluster. -The primary components of the control plane are the kube-apiserver, kube-controller-manager, kube-scheduler, and etcd. kubeadm provides a way to easily initialize the Kubernetes master node with all the necessary control plane components. For more information on each of control plane component see the [Beginner's Guide to Kubernetes](/docs/applications/containers/beginners-guide-to-kubernetes/). +The primary components of the control plane are the kube-apiserver, kube-controller-manager, kube-scheduler, and etcd. kubeadm provides a way to easily initialize the Kubernetes master node with all the necessary control plane components. For more information on each of control plane component see the [Beginner's Guide to Kubernetes](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes/). In addition to the baseline control plane components, there are several *addons*, that can be installed on the master node to access additional cluster features. You will need to install a networking and network policy provider add on that will implement [Kubernetes' network model](https://kubernetes.io/docs/concepts/cluster-administration/networking/) on the cluster's pod network. @@ -217,7 +217,7 @@ kubeadm join 192.0.2.0:6443 --token udb8fn.nih6n1f1aijmbnx5 \ --discovery-token-ca-cert-hash sha256:b7c01e83d63808a4a14d2813d28c127d3a1c4e1b6fc6ba605fe4d2789d654f26 {{}} - The `kubeadm join` command will be used in the [Join a Worker Node to the Cluster](/docs/applications/containers/getting-started-with-kubernetes/#join-a-worker-node-to-the-cluster) section of this guide to bootstrap the worker nodes to the Kubernetes cluster. This command should be kept handy for later use. Below is a description of the required options you will need to pass in with the `kubeadm join` command: + The `kubeadm join` command will be used in the [Join a Worker Node to the Cluster](/docs/applications/containers/kubernetes/getting-started-with-kubernetes/#join-a-worker-node-to-the-cluster) section of this guide to bootstrap the worker nodes to the Kubernetes cluster. This command should be kept handy for later use. Below is a description of the required options you will need to pass in with the `kubeadm join` command: - The master node's IP address and the Kubernetes API server's port number. In the example output, this is `192.0.2.0:6443`. The Kubernetes API server's port number is `6443` by default on all Kubernetes installations. - A bootstrap token. The bootstrap token has a 24-hour TTL (time to live). A new bootstrap token can be generated if your current token expires. - A CA key hash. This is used to verify the authenticity of the data retrieved from the Kubernetes API server during the bootstrap process. @@ -235,7 +235,7 @@ kubeadm join 192.0.2.0:6443 --token udb8fn.nih6n1f1aijmbnx5 \ ### Inspect the Master Node with Kubectl -After completing the previous section, your Kubernetes master node is ready with all the necessary components to manage a cluster. To gain a better understanding of all the parts that make up the master's control plane, this section will walk you through inspecting your master node. If you have not yet reviewed the [Beginner's Guide to Kubernetes](/docs/applications/containers/beginners-guide-to-kubernetes/), it will be helpful to do so prior to continuing with this section as it relies on the understanding of basic Kubernetes concepts. +After completing the previous section, your Kubernetes master node is ready with all the necessary components to manage a cluster. To gain a better understanding of all the parts that make up the master's control plane, this section will walk you through inspecting your master node. If you have not yet reviewed the [Beginner's Guide to Kubernetes](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes/), it will be helpful to do so prior to continuing with this section as it relies on the understanding of basic Kubernetes concepts. 1. View the current state of all nodes in your cluster. At this stage, the only node you should expect to see is the master node, since worker nodes have yet to be bootstrapped. A `STATUS` of `Ready` indicates that the master node contains all necessary components, including the pod network add-on, to start managing clusters. @@ -248,7 +248,7 @@ NAME        STATUS    RO kube-master Ready     master    1h    v1.14.1 {{}} -1. Inspect the available [namespaces](https://deploy-preview-2397--nostalgic-ptolemy-b01ab8.netlify.com/applications/containers/beginners-guide-to-kubernetes/#namespaces) in your cluster. +1. Inspect the available [namespaces](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes-part-3-objects/#namespaces) in your cluster. kubectl get namespaces @@ -283,7 +283,7 @@ Now that your Kubernetes master node is set up, you can join worker nodes to you 1. The worker node's kubelet is now able to connect to the Kubernetes API server using the node's established identity. -Before continuing, you will need to make sure that you know your Kubernetes API server's IP address, that you have a bootstrap token, and a CA key hash. This information was provided when kubeadm was initialized on the master node in the [Set up the Kubernetes Control Plane](/docs/applications/containers/getting-started-with-kubernetes/#set-up-the-kubernetes-control-plane) section of this guide. If you no longer have this information, you can regenerate the necessary information from the master node. +Before continuing, you will need to make sure that you know your Kubernetes API server's IP address, that you have a bootstrap token, and a CA key hash. This information was provided when kubeadm was initialized on the master node in the [Set up the Kubernetes Control Plane](/docs/applications/containers/kubernetes/getting-started-with-kubernetes/#set-up-the-kubernetes-control-plane) section of this guide. If you no longer have this information, you can regenerate the necessary information from the master node. {{< disclosure-note "Regenerate a Bootstrap Token" >}} These commands should be issued from your master node. @@ -332,7 +332,7 @@ kube-node-2 Ready 1d22h v1.14.1 ## Next Steps -Now that you have a Kubernetes cluster up and running, you can begin experimenting with the various ways to configure pods, group resources, and deploy services that are exposed to the public internet. To help you get started with this, move on to follow along with the [Deploy a Static Site on Linode using Kubernetes](/docs/applications/containers/deploy-container-image-to-kubernetes/) guide. +Now that you have a Kubernetes cluster up and running, you can begin experimenting with the various ways to configure pods, group resources, and deploy services that are exposed to the public internet. To help you get started with this, move on to follow along with the [Deploy a Static Site on Linode using Kubernetes](/docs/applications/containers/kubernetes/deploy-container-image-to-kubernetes/) guide. ## Tear Down Your Cluster diff --git a/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/deploy-kubernetes-with-k8s-cli.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/deploy-kubernetes-with-k8s-cli.png new file mode 100644 index 00000000000..4b32ab97787 Binary files /dev/null and b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/deploy-kubernetes-with-k8s-cli.png differ diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/index.md b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/index.md similarity index 94% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/index.md rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/index.md index 2fab3e1e66a..d4eae35417f 100644 --- a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/index.md +++ b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/index.md @@ -9,6 +9,8 @@ published: 2019-04-29 modified_by: name: Linode title: 'How to Deploy Kubernetes on Linode with the k8s-alpha CLI' +aliases: ['applications/containers/how-to-deploy-kubernetes-on-linode-with-k8s-alpha-cli/'] +concentrations: ["Kubernetes"] external_resources: - '[Linode Kubernetes Tools](https://developers.linode.com/kubernetes/)' --- @@ -44,15 +46,15 @@ These nodes will all exist as billable services on your account. You can specify Another easy way to create clusters is with [Rancher](https://rancher.com). Rancher is a web application that provides a GUI interface for cluster creation and for management of clusters. Rancher also provides easy interfaces for deploying and scaling apps on your clusters, and it has a built-in catalog of curated apps to choose from. -To get started with Rancher, review our [How to Deploy Kubernetes on Linode with Rancher 2.2](/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/) guide. Rancher is capable of importing clusters that were created outside of it, so you can still use it even if you create your clusters through the k8s-alpha CLI or some other means. +To get started with Rancher, review our [How to Deploy Kubernetes on Linode with Rancher 2.2](/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/) guide. Rancher is capable of importing clusters that were created outside of it, so you can still use it even if you create your clusters through the k8s-alpha CLI or some other means. ### Beginners Resources If you haven't used Kubernetes before, we recommend reading through our introductory guides on the subject: -- [Beginner's Guide to Kubernetes](/docs/applications/containers/beginners-guide-to-kubernetes/): this guide explains the concepts and architecture of Kubernetes. +- [Beginner's Guide to Kubernetes](/docs/applications/containers/kubernetes/beginners-guide-to-kubernetes/): this guide explains the concepts and architecture of Kubernetes. -- [Getting Started with Kubernetes - Basic Installation and Setup](/docs/applications/containers/getting-started-with-kubernetes/): this guide shows how to create a Kubernetes cluster manually. While you wouldn't normally set your clusters up in this way, doing it once can help provide a better understanding for how a cluster's components fit together. +- [Getting Started with Kubernetes - Basic Installation and Setup](/docs/applications/containers/kubernetes/getting-started-with-kubernetes/): this guide shows how to create a Kubernetes cluster manually. While you wouldn't normally set your clusters up in this way, doing it once can help provide a better understanding for how a cluster's components fit together. ## Before You Begin @@ -70,6 +72,10 @@ The k8s-alpha CLI is bundled with the Linode CLI, and using it requires the inst - [Terraform](#install-terraform): The k8s-alpha CLI creates clusters by defining a resource *plan* in Terraform and then having Terraform create those resources. If you're interested in how Terraform works, you can review our [Beginner's Guide to Terraform](/docs/applications/configuration-management/beginners-guide-to-terraform/), but doing so is not required to use the k8s-alpha CLI. + {{< note >}} +The k8s-alpha CLI requires [Terraform version 0.12.0+](https://www.hashicorp.com/blog/announcing-terraform-0-12). + {{}} + - [kubectl](#install-kubectl): kubectl is the client software for Kubernetes, and it is used to interact with your Kubernetes cluster's API. - [SSH agent](#configure-your-ssh-agent): Terraform will rely on public-key authentication to connect to the Linodes that it creates, and you will need to configure your SSH agent on your computer with the keys that Terraform should use. @@ -287,6 +293,6 @@ When you delete a cluster with the k8s-alpha CLI, its connection information wil Now that you have a cluster up and running, you're ready to start deploying apps to it. Review our other Kubernetes guides for help with deploying software and managing your cluster: -- [Installing Apps on Kubernetes with Helm](/docs/applications/containers/how-to-install-apps-on-kubernetes-with-helm/) +- [Installing Apps on Kubernetes with Helm](/docs/applications/containers/kubernetes/how-to-install-apps-on-kubernetes-with-helm/) - [Linode Container Storage Interface](/docs/applications/containers/deploy-volumes-with-the-linode-block-storage-csi-driver/) diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/66.228.44.63_n_drivers_cluster.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/66.228.44.63_n_drivers_cluster.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/66.228.44.63_n_drivers_cluster.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/66.228.44.63_n_drivers_cluster.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/activate-linode-node-driver.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/activate-linode-node-driver.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/activate-linode-node-driver.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/activate-linode-node-driver.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-3-node-all-role-pool.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-3-node-all-role-pool.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-3-node-all-role-pool.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-3-node-all-role-pool.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-add-node-template-button-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-add-node-template-button-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-add-node-template-button-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-add-node-template-button-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-custom-cloud-provider.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-custom-cloud-provider.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-custom-cloud-provider.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-custom-cloud-provider.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-example-production-node-pools.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-example-production-node-pools.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-example-production-node-pools.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-example-production-node-pools.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-linode-node-driver-selected.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-linode-node-driver-selected.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-linode-node-driver-selected.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-form-linode-node-driver-selected.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-yaml-editor.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-yaml-editor.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-yaml-editor.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-cluster-yaml-editor.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-api-token.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-api-token.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-api-token.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-api-token.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-form-template-name.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-form-template-name.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-form-template-name.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-form-template-name.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-linode-options.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-linode-options.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-linode-options.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-linode-options.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-list.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-list.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-list.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-list.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-profile.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-profile.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-profile.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/add-node-template-profile.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/app-catalog-list-wordpress.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/app-catalog-list-wordpress.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/app-catalog-list-wordpress.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/app-catalog-list-wordpress.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/authentication-client-id-secret-form.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/authentication-client-id-secret-form.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/authentication-client-id-secret-form.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/authentication-client-id-secret-form.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/authentication-github-form-values.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/authentication-github-form-values.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/authentication-github-form-values.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/authentication-github-form-values.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/authentication-github-selected.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/authentication-github-selected.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/authentication-github-selected.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/authentication-github-selected.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/authentication-site-access-form.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/authentication-site-access-form.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/authentication-site-access-form.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/authentication-site-access-form.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cloud-manager-linodes-provisioning.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cloud-manager-linodes-provisioning.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cloud-manager-linodes-provisioning.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cloud-manager-linodes-provisioning.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard-kubeconfig-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard-kubeconfig-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard-kubeconfig-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard-kubeconfig-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard-kubectl-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard-kubectl-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard-kubectl-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard-kubectl-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard-kubectl-prompt.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard-kubectl-prompt.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard-kubectl-prompt.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard-kubectl-prompt.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard-provisioning.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard-provisioning.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard-provisioning.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard-provisioning.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-dashboard.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-navigation-bar-nodes-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-navigation-bar-nodes-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-navigation-bar-nodes-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-navigation-bar-nodes-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-navigation-bar-projects-namespaces-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-navigation-bar-projects-namespaces-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-navigation-bar-projects-namespaces-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-navigation-bar-projects-namespaces-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-navigation-bar.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-navigation-bar.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-navigation-bar.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-navigation-bar.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-nodes-list-active.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-nodes-list-active.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-nodes-list-active.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-nodes-list-active.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-nodes-list-provisioning.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-nodes-list-provisioning.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-nodes-list-provisioning.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-nodes-list-provisioning.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-selection-menu-default-project-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-selection-menu-default-project-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-selection-menu-default-project-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-selection-menu-default-project-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-selection-menu-show-projects.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-selection-menu-show-projects.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-selection-menu-show-projects.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/cluster-selection-menu-show-projects.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/completed-cluster-config.yml b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/completed-cluster-config.yml similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/completed-cluster-config.yml rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/completed-cluster-config.yml diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/default-project-app-view-wordpress-provisioned-link-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/default-project-app-view-wordpress-provisioned-link-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/default-project-app-view-wordpress-provisioned-link-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/default-project-app-view-wordpress-provisioned-link-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/default-project-app-view-wordpress-provisioning-link-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/default-project-app-view-wordpress-provisioning-link-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/default-project-app-view-wordpress-provisioning-link-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/default-project-app-view-wordpress-provisioning-link-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/default-project-navigation-bar-apps-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/default-project-navigation-bar-apps-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/default-project-navigation-bar-apps-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/default-project-navigation-bar-apps-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/default-project-navigation-bar.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/default-project-navigation-bar.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/default-project-navigation-bar.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/default-project-navigation-bar.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/drivers-menu-option.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/drivers-menu-option.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/drivers-menu-option.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/drivers-menu-option.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/edit-cluster-adjust-node-pool-count.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/edit-cluster-adjust-node-pool-count.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/edit-cluster-adjust-node-pool-count.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/edit-cluster-adjust-node-pool-count.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/enter-server-url.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/enter-server-url.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/enter-server-url.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/enter-server-url.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/first-load-screen.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/first-load-screen.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/first-load-screen.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/first-load-screen.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-clusters-page-no-clusters.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-clusters-page-no-clusters.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-clusters-page-no-clusters.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-clusters-page-no-clusters.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-cluster-selection-menu-cluster-name-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-cluster-selection-menu-cluster-name-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-cluster-selection-menu-cluster-name-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-cluster-selection-menu-cluster-name-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-delete-cluster-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-delete-cluster-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-delete-cluster-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-delete-cluster-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-edit-cluster-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-edit-cluster-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-edit-cluster-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-edit-cluster-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-new-cluster-provisioning-cluster-name-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-new-cluster-provisioning-cluster-name-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-new-cluster-provisioning-cluster-name-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-new-cluster-provisioning-cluster-name-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-new-cluster-provisioning.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-new-cluster-provisioning.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-new-cluster-provisioning.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/global-home-page-new-cluster-provisioning.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/index.md b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/index.md similarity index 99% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/index.md rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/index.md index ad5d09c38b9..3a13d9ba9a1 100644 --- a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/index.md +++ b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/index.md @@ -9,7 +9,7 @@ published: 2019-03-14 modified_by: name: Linode title: 'How to Deploy Kubernetes on Linode with Rancher 2.2' -aliases: ['applications/containers/how-to-deploy-apps-with-rancher/', 'applications/containers/how-to-deploy-apps-with-rancher-2-2/'] +aliases: ['applications/containers/how-to-deploy-apps-with-rancher/', 'applications/containers/how-to-deploy-apps-with-rancher-2-2/', 'applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/'] concentrations: ["Kubernetes"] external_resources: - '[Rancher Official Docs](http://rancher.com/docs/)' diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/navigate-back-to-global-view.gif b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/navigate-back-to-global-view.gif similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/navigate-back-to-global-view.gif rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/navigate-back-to-global-view.gif diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/node-drivers-tab-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/node-drivers-tab-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/node-drivers-tab-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/node-drivers-tab-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/rancher_title_graphic.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/rancher_title_graphic.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/rancher_title_graphic.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/rancher_title_graphic.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/security-menu-authentication-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/security-menu-authentication-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/security-menu-authentication-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/security-menu-authentication-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-form-database-settings.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-form-database-settings.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-form-database-settings.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-form-database-settings.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-form-services-and-load-balancing-settings.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-form-services-and-load-balancing-settings.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-form-services-and-load-balancing-settings.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-form-services-and-load-balancing-settings.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-form-wordpress-settings.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-form-wordpress-settings.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-form-wordpress-settings.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-form-wordpress-settings.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-http-nodebalancer-endpoint-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-http-nodebalancer-endpoint-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-http-nodebalancer-endpoint-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-http-nodebalancer-endpoint-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-wordpress-service-view-edit-yaml.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-wordpress-service-view-edit-yaml.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-wordpress-service-view-edit-yaml.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-wordpress-service-view-edit-yaml.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-wordpress-workload-link-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-wordpress-workload-link-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-wordpress-workload-link-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-wordpress-workload-link-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-workloads-provisioning.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-workloads-provisioning.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-workloads-provisioning.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-app-workloads-provisioning.png diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-service-example-metadata-section.yml b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-service-example-metadata-section.yml similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-service-example-metadata-section.yml rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-service-example-metadata-section.yml diff --git a/docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-workload-config-scale-highlighted.png b/docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-workload-config-scale-highlighted.png similarity index 100% rename from docs/applications/containers/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-workload-config-scale-highlighted.png rename to docs/applications/containers/kubernetes/how-to-deploy-kubernetes-on-linode-with-rancher-2-2/wordpress-workload-config-scale-highlighted.png diff --git a/docs/applications/containers/how-to-deploy-nginx-on-a-kubernetes-cluster/Nginx_Kubernetes.jpg b/docs/applications/containers/kubernetes/how-to-deploy-nginx-on-a-kubernetes-cluster/Nginx_Kubernetes.jpg similarity index 100% rename from docs/applications/containers/how-to-deploy-nginx-on-a-kubernetes-cluster/Nginx_Kubernetes.jpg rename to docs/applications/containers/kubernetes/how-to-deploy-nginx-on-a-kubernetes-cluster/Nginx_Kubernetes.jpg diff --git a/docs/applications/containers/how-to-deploy-nginx-on-a-kubernetes-cluster/index.md b/docs/applications/containers/kubernetes/how-to-deploy-nginx-on-a-kubernetes-cluster/index.md similarity index 99% rename from docs/applications/containers/how-to-deploy-nginx-on-a-kubernetes-cluster/index.md rename to docs/applications/containers/kubernetes/how-to-deploy-nginx-on-a-kubernetes-cluster/index.md index fb5b839714f..f58d58f212a 100644 --- a/docs/applications/containers/how-to-deploy-nginx-on-a-kubernetes-cluster/index.md +++ b/docs/applications/containers/kubernetes/how-to-deploy-nginx-on-a-kubernetes-cluster/index.md @@ -4,17 +4,18 @@ author: description: 'This guide shows how to install Kubernetes on a Linode with CentOS or Ubuntu. Includes a section on how to deploy nginx to the example cluster.' keywords: ["kubernetes","docker","container","deployment","nginx"] license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' -modified: 2019-01-21 modified_by: name: Linode published: 2017-11-27 title: 'How to Install, Configure, and Deploy NGINX on a Kubernetes Cluster' +aliases: ['applications/containers/how-to-deploy-nginx-on-a-kubernetes-cluster/'] contributor: name: Kiran Singh link: https://github.com/snarik og_description: 'Kubernetes can be configured to provide highly available, horizontally autoscaling, automated deployments. This guide shows you how to set up a Kubernetes cluster on a Linode and manage the lifecycle of an NGINX service.' deprecated: true deprecated_link: 'applications/containers/getting-started-with-kubernetes/' +concentrations: ["Kubernetes"] external_resources: - '[Kubernetes](https://kubernetes.io/)' - '[Google Borg](https://research.google.com/pubs/pub43438.html)' diff --git a/docs/applications/containers/how-to-install-apps-on-kubernetes-with-helm/ghost-home-page.png b/docs/applications/containers/kubernetes/how-to-install-apps-on-kubernetes-with-helm/ghost-home-page.png similarity index 100% rename from docs/applications/containers/how-to-install-apps-on-kubernetes-with-helm/ghost-home-page.png rename to docs/applications/containers/kubernetes/how-to-install-apps-on-kubernetes-with-helm/ghost-home-page.png diff --git a/docs/applications/containers/how-to-install-apps-on-kubernetes-with-helm/index.md b/docs/applications/containers/kubernetes/how-to-install-apps-on-kubernetes-with-helm/index.md similarity index 99% rename from docs/applications/containers/how-to-install-apps-on-kubernetes-with-helm/index.md rename to docs/applications/containers/kubernetes/how-to-install-apps-on-kubernetes-with-helm/index.md index c1cb3211ae3..465ed9af4ab 100644 --- a/docs/applications/containers/how-to-install-apps-on-kubernetes-with-helm/index.md +++ b/docs/applications/containers/kubernetes/how-to-install-apps-on-kubernetes-with-helm/index.md @@ -9,6 +9,7 @@ published: 2019-03-26 modified_by: name: Linode title: 'How to Install Apps on Kubernetes with Helm' +aliases: ['applications/containers/how-to-install-apps-on-kubernetes-with-helm/'] concentrations: ["Kubernetes"] external_resources: - '[Helm Documentation](https://helm.sh/docs/)' diff --git a/docs/applications/containers/kubernetes/how-to-install-apps-on-kubernetes-with-helm/install-apps-kubernetes-helm.png b/docs/applications/containers/kubernetes/how-to-install-apps-on-kubernetes-with-helm/install-apps-kubernetes-helm.png new file mode 100644 index 00000000000..4b32ab97787 Binary files /dev/null and b/docs/applications/containers/kubernetes/how-to-install-apps-on-kubernetes-with-helm/install-apps-kubernetes-helm.png differ diff --git a/docs/applications/containers/manage-a-docker-cluster-with-kubernetes/docker-cluster-kubernetes.jpg b/docs/applications/containers/kubernetes/manage-a-docker-cluster-with-kubernetes/docker-cluster-kubernetes.jpg similarity index 100% rename from docs/applications/containers/manage-a-docker-cluster-with-kubernetes/docker-cluster-kubernetes.jpg rename to docs/applications/containers/kubernetes/manage-a-docker-cluster-with-kubernetes/docker-cluster-kubernetes.jpg diff --git a/docs/applications/containers/manage-a-docker-cluster-with-kubernetes/index.md b/docs/applications/containers/kubernetes/manage-a-docker-cluster-with-kubernetes/index.md similarity index 98% rename from docs/applications/containers/manage-a-docker-cluster-with-kubernetes/index.md rename to docs/applications/containers/kubernetes/manage-a-docker-cluster-with-kubernetes/index.md index 96b5daf5797..bfb51ec1a72 100644 --- a/docs/applications/containers/manage-a-docker-cluster-with-kubernetes/index.md +++ b/docs/applications/containers/kubernetes/manage-a-docker-cluster-with-kubernetes/index.md @@ -7,10 +7,10 @@ og_description: 'Kubernetes makes it easy to manage containers across multiple s keywords: ["Kubernetes", "cluster", "docker"] license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' published: 2018-02-28 -modified: 2018-02-28 modified_by: name: Linode title: 'Manage a Docker Cluster with Kubernetes' +aliases: ['applications/containers/manage-a-docker-cluster-with-kubernetes/'] contributor: name: Damaso Sanoja link: https://twitter.com/damasosanoja @@ -38,7 +38,7 @@ To complete this guide you will need three Linodes running Ubuntu 16.04 LTS, eac ## Before You Begin -This article requires that you first complete our [How to Install, Configure, and Deploy NGINX on a Kubernetes Cluster](https://linode.com/docs/applications/containers/how-to-deploy-nginx-on-a-kubernetes-cluster/) guide and follow the procedures described there to configure one master node and two worker nodes. +This article requires that you first complete our [How to Install, Configure, and Deploy NGINX on a Kubernetes Cluster](https://linode.com/docs/applications/containers/kubernetes/how-to-deploy-nginx-on-a-kubernetes-cluster/) guide and follow the procedures described there to configure one master node and two worker nodes. Set the hostnames of the three Linodes as follows: diff --git a/docs/applications/containers/manage-a-docker-cluster-with-kubernetes/kubernetes-cluster.png b/docs/applications/containers/kubernetes/manage-a-docker-cluster-with-kubernetes/kubernetes-cluster.png similarity index 100% rename from docs/applications/containers/manage-a-docker-cluster-with-kubernetes/kubernetes-cluster.png rename to docs/applications/containers/kubernetes/manage-a-docker-cluster-with-kubernetes/kubernetes-cluster.png diff --git a/docs/applications/containers/troubleshooting-kubernetes/index.md b/docs/applications/containers/kubernetes/troubleshooting-kubernetes/index.md similarity index 99% rename from docs/applications/containers/troubleshooting-kubernetes/index.md rename to docs/applications/containers/kubernetes/troubleshooting-kubernetes/index.md index ab3212de6ea..8e0ca2e0f5a 100644 --- a/docs/applications/containers/troubleshooting-kubernetes/index.md +++ b/docs/applications/containers/kubernetes/troubleshooting-kubernetes/index.md @@ -5,12 +5,14 @@ author: description: 'Learn frequently-used troubleshooting commands for Kubernetes and review common Kubernetes issues.' keywords: ['kubernetes','cluster','troubleshooting','k8s','kubectl'] license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' -published: 2019-07-01 +published: 2019-07-29 modified_by: name: Linode title: "Troubleshooting Kubernetes" +concentrations: ["Kubernetes"] external_resources: - '[Kubernetes Documentation - Troubleshooting](https://kubernetes.io/docs/tasks/debug-application-cluster/troubleshooting/)' +aliases: ['applications/containers/troubleshooting-kubernetes/'] ---