GO学习公知_Golang下的微服务-第7部分-TerraformaCloud

在之前的文章中,我们简要介绍了用户界面和Web客户端以及如何使用微工具包rpc代理与我们新创建的rpc服务进行交互。

本文将讨论如何创建云环境来托管我们的服务。 我们将使用 Terraform 在 Google Cloud 平台上构建我们的云群集。这应该是一篇相当短的文章,但它也很重要。

为什么选择 Terraform?我已经使用了几种不同的云供应解决方案,但对我而言,Hashicorps Terraform 感觉最容易使用并且得到最好的支持。近年来出现了一个术语:基础设施作为代码。为什么你想要你的基础设施作为代码?那么,基础设施很复杂,它描述了很多移动部件。跟踪基础架构的变更和版本控制变更也很重要。

Terraform 完美地做到了这一点。他们实际上已经创建了自己的DSL(域特定语言),它允许您描述您的基础设施应该是什么样子。

Terraform 还允许您进行原子更改。所以在出现失败的情况下,它会将所有东西都退回来,并将其恢复到原来的状态。 Terraform 甚至允许您通过执行转出计划来预览更改。这将准确描述您的更改将对您的基础架构做什么。这给了你很多的信心,曾经是一个可怕的前景。

所以让我们开始吧!

创建您的云计划转到 Google Cloud 并创建一个新项目。 如果您之前没有使用过它,您可能会发现您有300英镑的免费试用版。太好了! 无论如何,你应该看到一个空白的新项目。 现在在你的左边,你应该看到一个IAM&Admin tabb,然后在那里创建一个新的服务密钥。 确保选择“提供新密钥”,然后确保您选择了json类型。 安全保管,我们稍后需要。 这允许程序代表您执行对 Google Cloud API 的更改。 现在我们应该掌握一切我们需要开始的事情。 所以创建一个新的回购。 我称之为我的 shippy-infrastructure。

描述我们的基础设施创建一个名为 variables.tf 的新文件。 这将包含关于我们项目的基本信息。 在这里,我们有我们的项目 ID,我们的地区,我们的项目名称和我们的平台名称。 该地区是我们希望集群运行的数据中心。 该区域是该区域内的可用区域。 项目名称是我们Google项目的项目ID,最后,平台名称是我们的群集的名称。

variable "gcloud-region"    { default = "europe-west2" }variable "gcloud-zone"      { default = "europe-west2-a" }variable "gcloud-project"   { default = "shippy-freight" }variable "platform-name"    { default = "shippy-platform" }

创建一个名为 providers.tf 的新文件,这是 Google 特定的部分:

provider "google" {    credentials = "${file("google-cred.json")}"    project     = "${var.gcloud-project}"    region      = "${var.gcloud-region}"}

现在让我们创建一个名为 global.tf 的文件。 这里是我们设置的一部分:

# Creates a network layerresource "google_compute_network" "shippy-network" {    name = "${var.platform-name}"}# Creates a firewall with some sane defaults, allowing ports 22, 80 and 443 to be open# This is ssh, http and https.resource "google_compute_firewall" "ssh" {    name    = "${var.platform-name}-ssh"    network = "${google_compute_network.shippy-network.name}"    allow {        protocol = "icmp"    }    allow {        protocol = "tcp"        ports    = ["22", "80", "443"]    }     source_ranges = ["0.0.0.0/0"]}# Creates a new DNS zoneresource "google_dns_managed_zone" "shippy-freight" {    name        = "shippyfreight-com"    dns_name    = "shippyfreight.com."    description = "shippyfreight.com DNS zone"}# Creates a new subnet for our platform within our selected regionresource "google_compute_subnetwork" "shippy-freight" {    name          = "dev-${var.platform-name}-${var.gcloud-region}"    ip_cidr_range = "10.1.2.0/24"    network       = "${google_compute_network.shippy-network.self_link}"    region        = "${var.gcloud-region}"}# Creates a container cluster called shippy-freight-cluster# Attaches new cluster to our network and our subnet,# Ensures at least one instance is runningresource "google_container_cluster" "shippy-freight-cluster" {    name = "shippy-freight-cluster"    network = "${google_compute_network.shippy-network.name}"    subnetwork = "${google_compute_subnetwork.shippy-freight.name}"    zone = "${var.gcloud-zone}"    initial_node_count = 1    master_auth {        username = <redacted>        password = <redacted>    }    node_config {        # Defines the type/size instance to use        # Standard is a sensible starting point        machine_type = "n1-standard-1"        # Grants OAuth access to the following APIs within the cluster        oauth_scopes = [            "",            "",            "",            "",            "",            ""        ]    }}# Creates a new DNS range for clusterresource "google_dns_record_set" "dev-k8s-endpoint-shippy-freight" {    name  = "k8s.dev.${google_dns_managed_zone.shippy-freight.dns_name}"    type  = "A"    ttl   = 300    managed_zone = "${google_dns_managed_zone.shippy-freight.name}"    rrdatas = ["${google_container_cluster.shippy-freight-cluster.endpoint}"]}

现在将您之前创建的密钥移至此项目的根目录并将其命名为 google-cred.json。

你现在应该拥有一切你需要创建一个新的集群! 但是,我们不要发疯,你应该先进行测试,并检查一切是否正常。

运行terraform init - 这将下载任何缺少的提供 providers/plugins。 这会发现我们正在使用 Google Cloud 模块并自动获取这些依赖关系。

现在,如果您运行 terraforminit−这将下载任何缺少的提供providers/plugins。这会发现我们正在使用GoogleCloud模块并自动获取这些依赖关系。现在,如果您运行 terraform 计划,它会向您显示它将做出的更改。 这几乎就像在你的整个基础设施上做git diff。 现在很酷!

浏览部署计划后,我认为很好。

$ terraform apply

注意:您可能会被要求启用一些 API 以完成此操作,没关系,单击链接,确保启用它们并重新运行 gitdiff。现在很酷!浏览部署计划后,我认为很好。¨G3G注意:您可能会被要求启用一些API以完成此操作,没关系,单击链接,确保启用它们并重新运行terraform apply。 如果您想节省时间,请转到 Google 云端控制台中的 API 部分,并启用 DNS,Kubernetes 和计算引擎 API。

这可能需要一段时间,但那是因为发生了很多事情。 但是一旦完成,如果您转到Google云端控制台右侧菜单中的 Kubernetes 引擎或计算引擎细分,则应该能够看到您的新群集。

注意:如果你没有使用免费试用期,这将立即开始花费你的钱。 请务必查看实例定价列表。 哦,而且我在开展这些职位的工作之间已经开动了我的力量。 这不会产生费用,因为这些费用是根据资源使用情况收取的。

而已! 我们有一个完全正常运行的cluster / vm,准备好让我们开始部署我们的容器。 本系列的下一部分将介绍Kubernetes,以及如何设置和部署容器到Kubernetes。

via:

作者:Ewan Valentine 

译者:zhangyang9 

校对:polaris1119

本文由 GCTT 原创编译

-事必有法,然后有成- 最后祝大家学习顺利 ~

版权申明:内容来源网络,仅供分享学习,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!

来源:聚焦未来

扫码关注我们了解更多资讯

PS:因平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持一下呀!😀