day3 : k8s建置(中)

昨天准备好了control center主机上所需要的各项工具,今天就可以来编写iac的脚本了。

开始配置

terraform脚本基本上会由两个元件组成provider和resources,provider定义要在哪个环境上做事,如我的范例使用gcp那麽最简单的provider写法如下

provider "google" {
  credentials = “service account key”
  project    = “project id”
  region     = “region name”
}

terraform在看到这个provider後会知道可以用这个service account在这个project id 的这个region上创建resources。

而resource的写法范例如下

variable "instance_name" {}
variable "instance_zone" {}
variable “instance_type" {
default = "custom-8-16384-ext"
}

resource "google_compute_instance" "default" {
  name = "${var.instance_name}"
  zone = "${var.instance_zone}"
  machine_type = "${var.instance_type}"

  boot_disk {
    initialize_params {
      image = "centos-cloud/centos-7"
      size = 100
    }
  }

  network_interface {
    subnetwork = "default"
    access_config {
    }
  }

  metadata = {
    ssh-keys = "root:${file("/root/.ssh/id_rsa.pub")}"
  }

  metadata_startup_script = "sed -i 's/PermitRootLogin no/PermitRootLogin yes/g' /etc/ssh/sshd_config ; systemctl restart sshd"
}

output "ip" {
  value = google_compute_instance.default.network_interface.0.network_ip
}

terraform会得到一个宣告的resource,请他产生一台主机名字和zone会由变数带入,instance规格为8 core 16G,os使用centos7 并且容量为100G,网路设定为default,带入目前主机的ssh key并且设定root可以远端登入,完成的时候output ip,这样就可以做为一个terraform的模板使用,让我在刚刚定义的provider.tf中加入以这个module为框架的主机

module "create_ithome2021” {
  source        = “./lab”
  instance_name = “ithome-2021-1”
  instance_zone = "asia-east1-b"
}

这样的写法有一个好处,我只要在provider中加入三组同样的module就可以得到三台同样规格的主机,同时我需要新增别的module例如网路 防火墙的设定也可以很弹性的加入。

因为我没有要讲述复杂的网路使用情境,所以单纯使用上述的module配置即可轻易的完成要建立k8s和之後需要扩充时所需要的主机。

那麽下一个问题是,如何轻易的重复利用这个provider宣告资源呢?

使用terraform apply之後,可以发现在当前的provider路径下会得到一个terraform.tfstate,这个档案说明了宣告的resources透过terraform创建出来的资讯,如果在同一个路径下继续创建资源,那麽原有的资源将会被覆盖掉,但是对於terraform其实他的概念并不是覆盖而是异动。

因此我使用了阶层的方式进行管理让彼此的resource独立不互相影响,如下范例
https://ithelp.ithome.com.tw/upload/images/20210903/20139661SAfzAPTpK3.png

透过terraform可以轻松的布建环境,但是风险就是要是不小心异动错了,就会非常的痛,所以管理上一定要非常的小心,有了基本的环境後,明天就可以开始用ansible进行kuberbetes的安装了。


<<:  < 关於 React: 开始打地基| JSX >

>>:  Day2 今晚我想来点CSV

用 Python 畅玩 Line bot - 17:Template message

Line bot API 中有一种只有 line bot 专属的讯息种类,叫做 Template m...

Day 07-Terraform 写起来不够 DRY 的问题,这解 Terragrunt 你试试看

课程内容与代码会放在 Github 上: https://github.com/chechiacha...

Day 18 prototype 配色与精稿绘制

来找设计师一起 side project,前後端 / UIUX 皆可ㄛ。配对单连结: https:...

字串和物件的差异

今天会用两个例子来比较看看多个字串和一个物件多笔资料有什麽不同 第一个范例是在data中放「首页」、...

DAY 9 Big Data 5Vs – Velocity(多样性) RDS

Amazon Relational Database Service (RDS) 是AWS中为「结构...