{"id":28739817,"url":"https://github.com/codingforentrepreneurs/terraforming-kubernetes","last_synced_at":"2025-07-26T21:38:04.975Z","repository":{"id":65641696,"uuid":"584521155","full_name":"codingforentrepreneurs/terraforming-kubernetes","owner":"codingforentrepreneurs","description":"Use Terraform to provision a Kubernetes Cluster on Linode","archived":false,"fork":false,"pushed_at":"2023-04-03T15:24:47.000Z","size":21,"stargazers_count":19,"open_issues_count":0,"forks_count":20,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-06-10T01:58:38.458Z","etag":null,"topics":["devops","kubernetes","terraform"],"latest_commit_sha":null,"homepage":"https://www.codingforentrepreneurs.com/courses/terraforming-kubernetes-on-linode/","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codingforentrepreneurs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2023-01-02T20:03:22.000Z","updated_at":"2024-09-17T04:10:28.000Z","dependencies_parsed_at":"2023-02-12T17:31:01.681Z","dependency_job_id":null,"html_url":"https://github.com/codingforentrepreneurs/terraforming-kubernetes","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/codingforentrepreneurs/terraforming-kubernetes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codingforentrepreneurs%2Fterraforming-kubernetes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codingforentrepreneurs%2Fterraforming-kubernetes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codingforentrepreneurs%2Fterraforming-kubernetes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codingforentrepreneurs%2Fterraforming-kubernetes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codingforentrepreneurs","download_url":"https://codeload.github.com/codingforentrepreneurs/terraforming-kubernetes/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codingforentrepreneurs%2Fterraforming-kubernetes/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260109606,"owners_count":22960037,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["devops","kubernetes","terraform"],"created_at":"2025-06-16T06:10:58.958Z","updated_at":"2025-06-16T06:10:59.553Z","avatar_url":"https://github.com/codingforentrepreneurs.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Terraforming Kubernetes Image](https://static.codingforentrepreneurs.com/media/courses/terraforming-kubernetes-on-linode/5d16a50c-a2f3-40e5-8906-eb375d696d81.jpg)](https://www.codingforentrepreneurs.com/courses/terraforming-kubernetes-on-linode/)\n# Terraforming Kubernetes\nWhat if starting a remote virtual machine instance was as simple as changing a number on a document and running a command? That is how simple terraform can be and why it's so powerful.\n\nUsing documents to change what server we need running is a feature of Infrastructure as Code and can be a paradigm shift for many developers since it's so simple yet effective. One of the biggest advantages of IaC and terraform: version control and CI/CD pipeline automation.\n\nTerraform will turn on (and off) the servers we need. Kubernetes will manage how we allocate the resources on those servers to run the applications we want and need. The pair is a juggernaut of automation. This post will teach you exactly what to do to use them both.\n\nWant a minimal and rapid-fire version of this post? Check out this [repo](https://github.com/codingforentrepreneurs/terraforming-kubernetes-rapid).\n\n### Watch the course [here](https://www.codingforentrepreneurs.com/courses/terraforming-kubernetes-on-linode/)\n\n\n__Other Resources__\n- [Blog Post](https://www.codingforentrepreneurs.com/blog/terraforming-kubernetes-on-linode/)\n- [Github Repo](https://github.com/codingforentrepreneurs/terraforming-kubernetes)\n- Recommended Course: [Docker \u0026 Docker Compose](https://www.codingforentrepreneurs.com/courses/docker-and-docker-compose/)\n- [Terraform Install Guide](https://developer.hashicorp.com/terraform/downloads)\n- [Kubernetes Command Line Tool Install Guide](https://kubernetes.io/docs/tasks/tools/)\n\n\n\n### Using this Repo\n\n#### Clone Repo\n```bash\ngit clone https://github.com/codingforentrepreneurs/terraforming-kubernetes\ncd terraforming-kubernetes\n```\n\n#### Create Linode API Key\n1. Get an account with a $100 credit [here](https://www.linode.com/cfe)\n2. Create an API Personal Access Key on Linode [here](https://cloud.linode.com/profile/tokens)\n\n```bash\necho \"linode_api_token=\\\"YOUR_API_KEY\\\"\" \u003e\u003e devops/terraform.tfvars\n```\n\n### Configure Cloud-based Terraform State on a Object Storage Bucket\n\n1. Create an [Object Storage Bucket](https://cloud.linode.com/object-storage/buckets)\n2. Create an [Access Key for Object Storage](https://cloud.linode.com/object-storage/access-keys)\n3. Update the terraform backend.\n\nBelow is an example backend that you need to modify to fit your Object Storage bucket. This backend will store your Terraform statefiles in Object Storage instead of locally.\n\nIn `devops/backend` add:\n```bash\nskip_credentials_validation=true\nskip_region_validation=true\nbucket=\"YOUR_CUSTOM_OBJECT_STORAGE_BUCKET_NAME\"\nkey=\"terraforming-kubernetes.tfstate\"\nregion=\"us-southeast-1\"\nendpoint=\"us-southeast-1.linodeobjects.com\"\naccess_key=\"YOUR_CUSTOM_S3_ACCESS_KEY\"\nsecret_key=\"YOUR_CUSTOM_S3_SECRET_KEY\"\n```\nReplace:\n- `YOUR_CUSTOM_OBJECT_STORAGE_BUCKET_NAME` with the bucket you created\n- `YOUR_CUSTOM_S3_ACCESS_KEY` and `YOUR_CUSTOM_S3_SECRET_KEY` with the object storage access keys you created\n- Replace any other attributes to fit your specific bucket and project (i.e. region, endpoint, key)\n\n#### Terraform commands\n\n```\nterraform -chdir=./devops init --backend-config=backend\nterraform -chdir=./devops apply\n```\nAfter running apply, type `yes` to agree.\n\n### Kubernetes Commands\nOnce Terraform completes, the relative folder `.kube` will be created with a `kubeconfig.yaml` file that you can use. If you're on VSCode, your `KUBECONFIG` environment variable will already be set for you so you can:\n\n```\nkubecl get nodes\n```\nIf you have any issues here, consider watching [the course](https://www.codingforentrepreneurs.com/courses/terraforming-kubernetes-on-linode/) or reading [the blog post](https://www.codingforentrepreneurs.com/blog/terraforming-kubernetes-on-linode/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodingforentrepreneurs%2Fterraforming-kubernetes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodingforentrepreneurs%2Fterraforming-kubernetes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodingforentrepreneurs%2Fterraforming-kubernetes/lists"}