--- title: "Create a Kubernetes cluster" description: "Create a TIR Kubernetes cluster, with every choice explained, from the version and control plane to worker pools, committed plans, and the VPC." content_type: "how-to" product: "tir-kubernetes" platform: "TIR" url: "/tir/tir-kubernetes/how-to/create-a-cluster/" topic: ["create-and-connect"] --- # Create a Kubernetes cluster Create a Kubernetes cluster in your TIR project: choose its version, its control plane, its worker pools, and the VPC its nodes sit in. Everything is on one page, **Create Kubernetes Cluster**, and **Cluster summary** beside the form adds up the estimated cost as you go. For the shortest path to a working cluster, see [Get started with TIR Kubernetes](/tir/tir-kubernetes/get-started/). ## Before you begin - An **Active** VPC with a subnet, in the same project and region as the cluster. See [Create a VPC](/tir/tir-vpc/how-to/create-a-vpc/). - A role with the create permission on Kubernetes, such as Project Lead. See [Roles and permissions](/tir/tir-iam/concepts/roles-and-permissions/). - On a prepaid account, enough credit for every pool. TIR checks your credit before it creates anything, and tells you how many more credits to buy if you are short. - (Optional) A reserved public IP in the project, if you plan to expose Services of type LoadBalancer. You can attach it after you create the cluster. See [Reserve an IP](/tir/tir-reserved-ip/how-to/reserve-an-ip-address/). ## Open the form 1. In TIR, open your project. In the side menu, under **PRODUCTS**, select **Kubernetes**. 2. Select **Create Cluster**. ## Name the cluster and choose its version Under **Cluster details**, fill in two fields: - **Cluster name**: keep the suggested name, which starts with `k8s-cluster`, or type your own of up to 128 characters. Each cluster in a project needs its own name, whatever the case of its letters. - **Kubernetes version** starts on the newest version on offer. Keep it unless your workloads need an older one: the version you choose here cannot be changed later. ## Configure the control plane The control plane runs the Kubernetes API server, and E2E manages it for you. Under **Control plane configuration**, choose: 1. **Number of nodes**: **1 node** or **3 nodes**, with 3 chosen by default. Choose 3 for a cluster you depend on: 3 nodes give the control plane redundancy, and you set the count once, when you create the cluster. One node suits a cluster you are trying out. 2. **Computing resource**: the control plane runs on CPU plans only. Choose a resource family by its price per node; one marked "Inventory not available" is out of capacity. TIR starts you on the first CPU resource with stock, on its hourly plan. 3. **Configuration**: the vCPUs and RAM of each node. 4. **Pricing plan**: with **On-Demand**, you pay by the hour. A committed plan is a term of a number of days, paid upfront. Each plan's price is per node. A committed plan also asks for a commitment policy; see [Choose a commitment policy](#choose-a-commitment-policy). The chosen resource needs free capacity for every node that uses it, including the worker pools on the same resource. If it falls short, TIR says how many nodes your configuration needs and how many are free; choose another resource or fewer nodes. The control plane's node count and plan cannot be changed after you create the cluster. ## Add worker pools Worker nodes run your pods, and they come in worker pools. A cluster needs at least one pool, and it can have as many as you need. Each pool has its own plan and node count, so you can mix hourly and committed pools in one cluster. 1. Under **Worker configuration**, select **Add your first worker node pool**, or **Add node pool** once you have one. 2. Keep the **Pool name** TIR suggests, which starts with `worker-pool-`, or type your own. Use up to 128 lowercase letters, numbers, and hyphens, and start and end with a letter or number. Each pool in a cluster needs its own name. 3. Set **Number of nodes**, from 1 to 25. It starts at 1. 4. Choose a **Computing resource**, a **Configuration**, and a **Pricing plan**, as for the control plane. **Estimated pool cost** gives the cost for the number of nodes you set. 5. (Optional) Add node labels and taints, so that pods land on the nodes meant for them. See [Set node labels and taints](/tir/tir-kubernetes/how-to/set-node-labels-and-taints/). 6. Select **Add node pool**. A committed plan fixes the pool's node count for the whole committed period. While you are still learning the size a workload needs, start the pool on **On-Demand**. Once you know its size, move it to a committed plan. See [Manage committed plans](/tir/tir-kubernetes/how-to/manage-committed-plans/). If the pool needs more nodes than are free, TIR says how many are free after the control plane and your other pools. Lower the count or choose another resource to go on. You can still edit or remove each pool before you create the cluster. ## Choose a commitment policy A committed plan, for the control plane or a worker pool, asks for a **Commitment policy**. The policy sets what happens when the term ends, on the date given. - **Auto-renew the committed plan** is the default. It renews the term for the same number of days and nodes, at the price shown, if the account has enough credit. When the account is short of credit, the resource moves to hourly billing instead. - **Switch to hourly billing** keeps the resource running and bills it by the hour once the term ends. You can change a worker pool's policy later. The control plane keeps the policy you choose here. See [Manage committed plans](/tir/tir-kubernetes/how-to/manage-committed-plans/). ## Choose the VPC Under **Cluster network**, choose one of your **Active** VPCs in **VPC**. The cluster uses the VPC's first subnet, and its nodes take their addresses from it, so TIR picks the subnet for you. The cluster stays in this VPC. To create a VPC first, follow the link under the field. The form loads VPCs only when it opens, so open it again once the new VPC is **Active**. Every cluster uses `172.30.0.0/16` for pods and `172.31.0.0/16` for Services. Choose a VPC whose range, and the networks it routes to, stay clear of both: traffic to addresses in those ranges stays inside the cluster. ## Check the storage and the summary Every cluster comes with a default StorageClass that supports ReadWriteOnce volumes, which one node mounts at a time, so your pods can keep data on persistent volumes from the start. See [Use persistent volumes](/tir/tir-kubernetes/how-to/use-persistent-volumes/). Before you create the cluster, check **Cluster summary**: the name, version, and VPC, the control plane's node count and **Estimated cost**, and each worker pool with its cost. Cluster storage shows as a usage-based estimate per GB per month. Prices for every plan are on [E2E's pricing page](https://www.e2enetworks.com/pricing). ## Create the cluster Select **Create Cluster**. Every resource you chose needs enough stock. - If any pool or the control plane is on a committed plan, confirm it in **Committed Plans Confirmation**, which lists each committed resource with its plan, policy, and end date. The full amount is deducted upfront, and nothing is refunded if you delete the cluster or its committed resources early. Tick the box to accept this, then select **Proceed**. - If your account runs on unverified free credit, confirm one more thing: on such an account, TIR deletes the cluster if your account's credits become negative. Tick the box to accept this, and select **Submit**. Keep the page open while TIR sends the request. TIR then queues the cluster and opens its details page. If TIR refuses the request, for example for lack of credit or capacity, it says why; see [Troubleshooting TIR Kubernetes](/tir/tir-kubernetes/troubleshooting/tir-kubernetes/#creating-a-cluster-or-pool-is-refused). ## Watch the cluster come up The cluster's status moves on by itself through **Queued**, **Cluster Provisioning**, **Worker Joining**, and briefly **Worker Joined**, to **Ready**. Provisioning usually takes 10 to 30 minutes. From **Worker Joining** you can add reserved IPs on the **LB IP Pool** tab. From **Worker Joined**, you can download the kubeconfig and change worker pools. Once the cluster is **Ready**, [connect to it](/tir/tir-kubernetes/how-to/connect-to-a-cluster/) with its kubeconfig, then add pools or change their size as your workloads grow. If the cluster ends at **Failed** or stays on one status, see [Troubleshooting TIR Kubernetes](/tir/tir-kubernetes/troubleshooting/tir-kubernetes/#the-cluster-shows-failed).