Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mingfang/terraform-provider-k8s
Terraform Provider For Kubernetes
https://github.com/mingfang/terraform-provider-k8s
k8s kubernetes terraform terraform-modules terraform-provider
Last synced: 3 months ago
JSON representation
Terraform Provider For Kubernetes
- Host: GitHub
- URL: https://github.com/mingfang/terraform-provider-k8s
- Owner: mingfang
- Created: 2018-10-08T04:43:55.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2023-06-26T02:51:15.000Z (over 1 year ago)
- Last Synced: 2024-09-27T19:21:00.323Z (3 months ago)
- Topics: k8s, kubernetes, terraform, terraform-modules, terraform-provider
- Language: Go
- Homepage:
- Size: 2.34 MB
- Stars: 65
- Watchers: 9
- Forks: 12
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# terraform-provider-k8s
terraform-provider-k8s is a Terraform provider to manage Kubernetes resources.## Features
- Supports all Kubernetes [resources](./site), including alpha and beta versions
- Supports resources based on Custom Resource Definition(CRD).
- Supports the latest version of Kubernetes
- Auto extract from live Kubernetes cluster and import as Terraform state
- Convert Kubernetes manifests to Terraform files## Modules Catalog
A catalog of reusable modules is at [terraform-k8s-modules](https://github.com/mingfang/terraform-k8s-modules)## Requirements
- Terraform 0.12 and 0.13
- Kubernetes v1.14+ (Recommended for best CRD support)## Upgrading to Terraform 0.13
- Terraform 0.13 can automatically install this plugin. Make sure your Terraform configuration block has the plugin information like this.
```
terraform {
required_providers {
k8s = {
source = "mingfang/k8s"
}
}
}
```- If you have existing Terraform state created before Terraform 0.13 then you may have to upgrade the state using this command.
```
terraform state replace-provider 'registry.terraform.io/-/k8s' 'mingfang/k8s'
```## Installation
Download the binary from the [releases](https://github.com/mingfang/terraform-provider-k8s/releases).Follow official plugin installations instructions here https://www.terraform.io/docs/configuration/providers.html#third-party-plugins.
## Run Using Docker (optional)
```sh
docker pull registry.rebelsoft.com/terraform-provider-k8s
alias terraform='docker run -v `pwd`/kubeconfig:/kubeconfig -e KUBECONFIG=/kubeconfig -v `pwd`:/docker -w /docker --rm -it registry.rebelsoft.com/terraform-provider-k8s terraform'
alias tfextract='docker run -v `pwd`/kubeconfig:/kubeconfig -e KUBECONFIG=/kubeconfig -v `pwd`:/docker -w /docker --rm -it registry.rebelsoft.com/terraform-provider-k8s extractor'
alias tfgenerate='docker run -v `pwd`/kubeconfig:/kubeconfig -e KUBECONFIG=/kubeconfig -v `pwd`:/docker -w /docker --rm -it registry.rebelsoft.com/terraform-provider-k8s generator'
```## Init
For new projects or after install/upgrade, run ```terraform init```## Import
After extracting existing resources to terraform files, you can import the state for them.Run ```terraform import k8s_core_v1_service.nginx default.service.nginx``` to import, in this case a nginx service.
## Resource Format
The resource format is ```resource "k8s___" ""```.Note the ```name``` here is the Terraform name and not the Kubernetes name.
All Kubernetes resources requires a name in the metadata like this
```hcl
metadata {
name = "nginx"
}
```The set of supported groups, versions and kinds are loaded dynamically from your Kubernetes cluster.
## Data Source Format
The data source format is ```data "k8s___" ""```.The set of supported groups, versions and kinds are loaded dynamically from your Kubernetes cluster.
For example, this gets the cluster_ip of the httpbin service.
```hcl
data "k8s_core_v1_service" "httpbin" {
metadata {
name = "httpbin"
}
}
output "httpbin_cluster_ip" {
value = "${data.k8s_core_v1_service.httpbin.spec.0.cluster_ip}"
}
```## Id Format
The format of the resource Ids is ```..```. These are all Kubernetes identifiers.If the Kind of the resource is not namespaced, such as ```Namespace``` resource, then the Id format is ```..```.
Ids are used internally by Terraform to uniquely identify resource state. The user will only need to know them when importing state from a Kubernetes cluster.
# Utilities
## List Resource Types
Run ```tfgenerate``` to list all available resource and data source types## Generate
Run ```tfgenerate ``` to generate a skeleton terraform file for the resource. For example,- ```tfgenerate k8s_core_v1_service``` to generate a Kubernetes Service
- ```tfgenerate k8s_apps_v1_deployment``` to generate a Kubernetes Deployment
- ```tfgenerate k8s_apps_v1_stateful_set``` to generate a Kubernetes StatefulSet## Extract From YAML File
The ```tfextract``` will load the existing resources from YAML files and create Terraform files for them. One file per resource in the YAML file.For local file, run the ```tfextract -filename <> -dir ``` command.
For remote file, run the ```tfextract -url <> -dir ``` command.
## Extract From Kubernetes
The ```tfextract``` will load the existing resources from Kubernetes and create Terraform files for them. One file per resource.Run the ```tfextract -namespace <> -kind <> -name <> -import -dir ``` command. Any may be left blank but at least one must be set.
Example: ```tfextract -kind service -name nginx -dir ``` will extract the Service named nginx into a file called service-nginx.tf.
For this example, if ```-kind service``` was left blank then all resources named nginx will be extracted to their coresponding files. Likewise for ```-name nginx```; if left blank then all services will be extracted.
The ```-import``` flag will automatically import the extracted resources as Terraform state.