接著進行:
2. 使用 AWS Elastic Kubernetes Service(AWS EKS) 部署叢集
請注意:以下範例使用 AWS EKS 服務,並非免費 💸💸💸!
請注意:以下範例使用 AWS EKS 服務,並非免費 💸💸💸!
請注意:以下範例使用 AWS EKS 服務,並非免費 💸💸💸!
若做為練習建立後刪除並不會太貴,每個 Amazon EKS 叢集,每小時需支付 0.10 USD。(實際以官方為準)
本篇參考 How to Deploy AWS EKS with Terraform - The Simplest Guide to Get Up and Running,透過 Terraform 工具可以快速在 AWS 上建立資源,本篇將著重部署 AWS EKS。
簡稱為 Amazon EKS 是一項受管服務,不需要在 AWS 上安裝、操作及維運 k8s 叢集中的 controlplane,controlplane 由 AWS 來幫忙管理,優點是簡化使用者建置及管理叢集要做的事情。
在前項使用 kops 雖可自行管理叢集的設定,有較高的彈性,但相比使用 AWS EKS,使用者需投入更多維運叢集的工作(例如:更新、安全性等)。但使用 kops 不用另外支付額外成本(AWS EKS 的費用)。
本篇會透過撰寫 Terraform 腳本來建立 AWS EKS 資源。
先前往 GitHub 複製 Terraform module for AWS EKS terraform-aws-eks 專案的 main.tf
腳本到本地修改。
完整 main.tf
如下:
# AWS Provider
provider "aws" {
region = "us-east-1"
}
# VPC module
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
name = "my-vpc"
cidr = "10.0.0.0/16"
azs = ["us-east-1a", "us-east-1b", "us-east-1c"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
enable_nat_gateway = true
enable_vpn_gateway = true
tags = {
Terraform = "true"
Environment = "dev"
}
}
################################################################################
# EKS Module
################################################################################
module "eks" {
# Provision Instructions
source = "terraform-aws-modules/eks/aws"
version = "19.21.0"
cluster_name = "vii-cluster" # 叢集名稱
cluster_endpoint_public_access = true
cluster_addons = {
coredns = {
preserve = true
}
kube-proxy = {
most_recent = true
}
vpc-cni = {
most_recent = true
}
}
vpc_id = module.vpc.vpc_id
subnet_ids = module.vpc.private_subnets
control_plane_subnet_ids = module.vpc.intra_subnets
# EKS Managed Node Group(s)
eks_managed_node_group_defaults = {
ami_type = "AL2_x86_64"
instance_types = ["m5.large"]
attach_cluster_primary_security_group = true
}
eks_managed_node_groups = {
my-worker-group = {
min_size = 1
max_size = 2 # 最多 2 個 worker nodes
desired_size = 1
instance_types = ["t3.large"]
capacity_type = "SPOT"
tags = {
ExtraTag = "hello world"
}
}
}
tags = {
Example = "vii-cluster"
}
}
terraform init
驗證 Terraform 設定文件的語法和結構是否正確,確保沒有語法錯誤和其他問題。
terraform validate
Success! The configuration is valid.
在套用前檢視該設定會造成產生哪些變動,並與現有建立的設定去做比對(若先前已執行計畫過)。-out=tfplan
將當前的計畫儲存起來,後續可使用該 tfplan
進行確認和應用,而不需要再重新計算設定的異動。
terraform plan -out=tfplan
執行該 plan,需要等他跑一下。
terraform apply tfplan
...
Apply complete! Resources: 66 added, 0 changed, 0 destroyed.
在 AWS 管理後台查看。
查看 worker node,另外在這邊看不到 controlplane ,是因為 controlplane 是由 AWS 管理。
terraform plan
terraform apply --auto-approve # --auto-approve 可以省略使用者輸入 yes
更新叢集的 kubeconfig。
aws eks update-kubeconfig --region us-east-1 --name vii-cluster
查看 nodes。
k get no
NAME STATUS ROLES AGE VERSION
ip-10-0-3-169.ec2.internal Ready <none> 11m v1.28.3-eks-e71965b
建立一個測試用的 image 為 nginx 的 pod。
k run test --image=nginx
pod/test created
查看。
k get po
NAME READY STATUS RESTARTS AGE
test 1/1 Running 0 46s
最後記得 terraform destroy
,一直開著是要收費的,刪除也是需要一些時間。
terraform destroy --auto-approve