Terraform 으로 EKS 클러스터 생성하기

By | 2020년 5월 3일
Table of Contents

Terraform 으로 EKS 클러스터 생성하기

작업중

참조

사전준비

  • AWS 계정

  • AWS CLI

    여기 를 참조해서 설정합니다.

  • terraform

    여기 를 참조해 설치합니다.

  • kubectl

    여기 를 참조해 설치합니다.

  • aws-iam-authenticator

    여기 를 참조해 설치합니다.

  • helm

    curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh
    chmod 700 get_helm.sh
    ./get_helm.sh

EKS 리포 클론받기

EKS 템플릿을 위한 리포를 클론받습니다.

git clone https://github.com/terraform-providers/terraform-provider-aws.git
cd terraform-provider-aws/examples/eks-getting-started

리전을 ap-northeast-2 로 변경합니다.

vi providers.tf

map_public_ip_on_launch = true 를 추가해 줍니다.

vi vpc.tf

......
resource "aws_subnet" "demo" {
  count = 2

  availability_zone = data.aws_availability_zones.available.names[count.index]
  cidr_block              = "10.0.${count.index}.0/24"
  map_public_ip_on_launch = true
  vpc_id                  = aws_vpc.demo.id
......

EKS 클러스터 생성

terraform init
terraform plan
terraform apply

yes 를 입력해야 실제로 클러스터가 생성됩니다.

Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.

Enter a value: yes

클러스터의 생성이 완료되려면 10-20분 정도가 소요됩니다.

kubectl 설정하기

mkdir ~/.kube/
terraform output kubeconfig>~/.kube/config
kubectl version

Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.2", GitCommit:"52c56ce7a8272c798dbc29846288d7cd9fbae032", GitTreeState:"clean", BuildDate:"2020-04-16T11:56:40Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"15+", GitVersion:"v1.15.11-eks-af3caf", GitCommit:"af3caf6136cd355f467083651cc1010a499f59b1", GitTreeState:"clean", BuildDate:"2020-03-27T21:51:36Z", GoVersion:"go1.12.17", Compiler:"gc", Platform:"linux/amd64"}
terraform output config_map_aws_auth > configmap.yml
kubectl apply -f configmap.yml
kubectl get nodes -o wide
vi tiller-user.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system
kubectl apply -f tiller-user.yaml
helm init --service-account tiller
helm install \
  stable/nginx-ingress \
  --name my-nginx \
  --set rbac.create=true

클러스터 삭제하기

terraform destroy

답글 남기기