Cấp phép cụm Kubernetes trên GCP bằng Terraform và GKE
Bạn muốn tạo cụm trên GCP nhưng chưa biết cách thực hiện như thế nào? Hãy cùng Bizfly Cloud học cách tạo các cụm trên GCP Google Kubernetes Engine (GKE) với Terraform và GKE.
GKE là một dịch vụ Kubernetes được quản lý, có nghĩa là Google Cloud Platform (GCP) hoàn toàn chịu trách nhiệm quản lý mặt phẳng điều khiển của cụm.
Cụ thể, GCP:
- Quản lý máy chủ Kubernetes API và cơ sở dữ liệu etcd.
- Chạy điều khiển Kubernetes một hoặc nhiều vùng khả dụng.
- Chia tỷ lệ mặt phẳng điều khiển khi bạn thêm nhiều nút hơn vào cụm của mình.
- Cung cấp cơ chế nâng cấp mặt phẳng điều khiển và các nút của bạn lên phiên bản mới hơn.
- Xoay các chứng chỉ và khóa.
Ba tùy chọn phổ biến để cung cấp một cụm GKE
Có ba tùy chọn phổ biến để chạy và triển khai một cụm GKE:
- Bạn có thể tạo một cụm từ giao diện web GCP.
- Bạn có thể sử dụng tiện ích dòng lệnh gcloud.
- Bạn có thể xác định cụm bằng cách sử dụng mã với một công cụ như Terraform.
Ngay cả khi nó được liệt kê là tùy chọn đầu tiên, việc tạo một cụm bằng giao diện GCP không được khuyến khích. Có rất nhiều tùy chọn cấu hình và màn hình mà bạn phải hoàn thành trước khi sử dụng cụm.
Khi tạo cụm theo cách thủ công, bạn có thể chắc chắn rằng:
- Bạn không quên thay đổi một trong các thông số?
- Bạn có thể lặp lại chính xác các bước tương tự trong khi tạo một cụm cho các môi trường khác không?
- Khi có một thay đổi, bạn có thể áp dụng các sửa đổi tương tự theo trình tự cho tất cả các cụm mà không có bất kỳ sai lầm nào?
Một tùy chọn tốt hơn là xác định một tệp chứa tất cả các cờ cấu hình và sử dụng nó làm bản thiết kế để tạo cụm.
Cấp phép một cụm bằng Terraform
Terraform là một Cơ sở hạ tầng nguồn mở như một công cụ Mã.
Thay vì viết mã để tạo cơ sở hạ tầng, bạn xác định một kế hoạch về những gì bạn muốn được thực hiện và bạn để Terraform thay mặt bạn tạo các tài nguyên.
Tuy nhiên, kế hoạch không được viết bằng YAML mà thay vào đó Terraform sử dụng một ngôn ngữ gọi là HCL - Ngôn ngữ cấu hình HashiCorp.
Nói cách khác, bạn sử dụng HCL để khai báo cơ sở hạ tầng bạn muốn được triển khai và Terraform thực thi các hướng dẫn. Terraform sẽ sử dụng các plugin được gọi là nhà cung cấp để giao tiếp với các tài nguyên trong nhà cung cấp đám mây.
Xác minh rằng công cụ Terraform đã được cài đặt đúng cách với:
terraform version
Terraform v0.13.5
Cấp phép cụm Kubernetes trên GCP bằng Terraform
Tạo một thư mục mới với các tệp sau:
- variables.tf - để xác định các tham số cho cụm.
- main.tf - để lưu trữ mã thực tế cho cụm.
- outputs.tf - để xác định kết quả đầu ra.
Trong main.tf tệp, sao chép và dán mã sau:
main.tf
provider "google" {
version = "~> 3.42.0"
}
module "gke_auth" {
source = "terraform-google-modules/kubernetes-engine/google//modules/auth"
depends_on = [module.gke]
project_id = var.project_id
location = module.gke.location
cluster_name = module.gke.name
}
resource "local_file" "kubeconfig" {
content = module.gke_auth.kubeconfig_raw
filename = "kubeconfig-${var.env_name}"
}
module "gcp-network" {
source = "terraform-google-modules/network/google"
version = "~> 2.5"
project_id = var.project_id
network_name = "${var.network}-${var.env_name}"
subnets = [
{
subnet_name = "${var.subnetwork}-${var.env_name}"
subnet_ip = "10.10.0.0/16"
subnet_region = var.region
},
]
secondary_ranges = {
"${var.subnetwork}-${var.env_name}" = [
{
range_name = var.ip_range_pods_name
ip_cidr_range = "10.20.0.0/16"
},
{
range_name = var.ip_range_services_name
ip_cidr_range = "10.30.0.0/16"
},
]
}
}
module "gke" {
source = "terraform-google-modules/kubernetes-engine/google//modules/private-cluster"
project_id = var.project_id
name = "${var.cluster_name}-${var.env_name}"
regional = true
region = var.region
network = module.gcp-network.network_name
subnetwork = module.gcp-network.subnets_names[0]
ip_range_pods = var.ip_range_pods_name
ip_range_services = var.ip_range_services_name
node_pools = [
{
name = "node-pool"
machine_type = "e2-medium"
node_locations = "europe-west1-b,europe-west1-c,europe-west1-d"
min_count = 1
max_count = 2
disk_size_gb = 30
},
]
}
Tạo variables.tf với nội dung sau:
biến.tf
variable "project_id" {
description = "The project ID to host the cluster in"
}
variable "cluster_name" {
description = "The name for the GKE cluster"
default = "learnk8s-cluster"
}
variable "env_name" {
description = "The environment for the GKE cluster"
default = "prod"
}
variable "region" {
description = "The region to host the cluster in"
default = "europe-west1"
}
variable "network" {
description = "The VPC network created to host the cluster in"
default = "gke-network"
}
variable "subnetwork" {
description = "The subnetwork created to host the cluster in"
default = "gke-subnet"
}
variable "ip_range_pods_name" {
description = "The secondary ip range to use for pods"
default = "ip-range-pods"
}
variable "ip_range_services_name" {
description = "The secondary ip range to use for services"
default = "ip-range-services"
}
Như bạn có thể thấy, tất cả các khối mã được lặp lại ở đây. Tiếp theo bạn chỉ cần xác định biến nào sẽ giữ giá trị nào.
Cuối cùng, tạo outputs.tf tệp để xác định dữ liệu nào từ cụm mà bạn muốn kiểm tra sau khi cụm được tạo.
output.tf
output "cluster_name" {
description = "Cluster name"
value = module.gke.name
}
Tiếp tục và chạy trong cùng một thư mục:
terraform init
Lệnh sẽ khởi tạo Terraform và tạo thêm hai thư mục cũng như một tệp trạng thái. Tệp trạng thái được sử dụng để theo dõi các tài nguyên đã được tạo.
Để nhanh chóng kiểm tra xem cấu hình không có bất kỳ lỗi cấu hình nào, bạn có thể thực hiện lệnh:
terraform validate
Success! The configuration is valid.
Tiếp theo,bạn hãy chạy lệnh:
terraform plan
# output truncated
Plan: 16 to add, 0 to change, 0 to destroy.
Terraform sẽ chạy và nhắc bạn với một bản tóm tắt chi tiết về những tài nguyên sắp tạo.
terraform apply
# output truncated
Apply complete! Resources: 16 added, 0 changed, 0 destroyed.
Sau khi phát hành lệnh áp dụng, bạn sẽ được nhắc nhập id dự án từ dự án GCP mà bạn đã tạo trước đó - tức là nơi bạn muốn tạo và đặt cụm. Bạn sẽ được nhắc một lần nữa để xác nhận hành động của mình, Lúc này bạn chỉ cần nhập Yes.
Có một điều bạn cần lưu ý đó chính là việc tạo hoặc sửa đổi các cụm mất nhiều thời gian. Quá trình này có thể mất đến 20 phút để khởi tạo và chạy, do vậy hãy kiên nhẫn chờ đợi.
Sau khi hoàn tất bạn hãy thực hiện kiểm tra thư mục, lúc này bạn sẽ thấy một vài tệp mới:
tree .
.
├── kubeconfig-prod
├── main.tf
├── output.tf
├── terraform.tfstate
└── variables.tf
Terraform sử dụng terraform.tfstate để theo dõi những tài nguyên nào đã được tạo ra.
Kiểm tra các nhóm cụm bằng cách sử dụng tệp kubeconfig đã tạo:
kubectl get pods --all-namespaces --kubeconfig=kubeconfig-prod
NAMESPACE NAME READY STATUS AGE
kube-system coredns-56666f95ff-l5ppm 1/1 Running 23m
kube-system coredns-56666f95ff-w9brq 1/1 Running 23m
kube-system kube-proxy-98vcw 1/1 Running 10m
# truncated output
Nếu bạn không muốn đặt trước KUBECONFIG cho mọi lệnh, bạn có thể xuất nó bằng:
export KUBECONFIG="${PWD}/kubeconfig-prod"
Việc xuất chỉ hợp lệ cho phiên đầu cuối hiện tại.
Như vậy là bạn đã tạo cụm Kubernetes thành công với Terraform. Hãy theo dõi những bài viết tiếp theo của Bizfly Cloud để cập nhật những thủ thuật công nghệ mới hữu ích mỗi ngày.
Bizfly Cloud là 1 trong top 4 doanh nghiệp đáp ứng đầy đủ toàn bộ tiêu chí, chỉ tiêu kỹ thuật, an toàn thông tin của nền tảng điện toán đám mây của Bộ TT&TT. Bizfly Cloud - Được vận hành bởi công ty Cổ phần VCCorp, đã xây dựng và ứng dụng thành công nền tảng điện toán đám mây bao gồm hơn 15 dịch vụ/giải pháp đáp ứng hầu như toàn bộ các nhu cầu về hạ tầng trong một doanh nghiệp tại Việt Nam.
Bizfly Cloud - Đơn vị HÀNG ĐẦU cung cấp giải pháp hạ tầng IT/Cloud phục vụ Chuyển đổi số cho doanh nghiệp SME tại Việt Nam.