Terraform에서 GKE (GoogleContainerCluster) 용 컨테이너 클러스터 만들기

전제


  • GoogleCloudPlatform 계정을 받았습니다
  • Google Cloud SDK 설치 및 인증
  • terraform은 설치되었습니다 (이번 환경에서는 0.6.8)

  • 사전 작업



    GoogleDevelopersConsole에서 다음 작업을 수행합니다.
  • 프로젝트 만들기
  • OAuth 동의 설정
  • 서비스 계정 키 가져오기(JSON 형식)

  • 절차



    tf 파일과 같은 위치에 미리 얻은 서비스 계정 키의 JSON을 넣습니다.

    ■tf 파일 만들기
    variable "project" {}
    variable "region" {
      default = "asia-east1"
    }
    variable "cluster_name" {}
    variable "zone" {}
    variable "network" {}
    variable "initial_node_count" {}
    variable "machine_type" {}
    variable "disk_size" {}
    variable "master_auth_username" {}
    variable "master_auth_password" {}
    
    provider "google" {
      credentials = "${file("account.json")}"
      project     = "${var.project}"
      region      = "${var.region}"
    }
    
    resource "google_container_cluster" "default" {
      name = "${var.cluster_name}"
      zone = "${var.zone}"
      network = "${var.network}"
      initial_node_count = "${var.initial_node_count}"
    
      node_config {
        machine_type = "${var.machine_type}"
        disk_size_gb = "${var.disk_size}"
      }
    
      master_auth {
        username = "${var.master_auth_username}"
        password = "${var.master_auth_password}"
      }
    
    }
    

    ■terraform.tfvars의 내용
    project = "************"
    cluster_name = "cluster-1"
    zone = "asia-east1-b"
    network = "default"
    initial_node_count = "3"
    machine_type = "f1-micro"
    disk_size = "10"
    master_auth_username = "***********"
    master_auth_password = "***********"
    

    ※f1-micro의 경우, initial_node_count의 값은 3 이상을 지정

    terraform apply 실행하면 컨테이너 클러스터가 생성됨

    Kubernetes 웹 UI에 로그인



    만든 컨테이너 클러스터의 MASTER IP 확인
    $ gcloud container clusters list
    NAME       ZONE          MASTER_VERSION  MASTER_IP        MACHINE_TYPE  NUM_NODES  STATUS
    cluster-1  asia-east1-b  1.1.3           ***.***.***.***  f1-micro      3          RUNNING
    

    https://{위 MASTER_IP에 표시된 IP 주소}/ui/방문
    ※Basic 인증의 ID・패스워드는 terraform 의 .tfvars 로 설정한 master_auth_username/master_auth_password 가 됩니다



    kubectl 자격 증명 얻기
    $ gcloud container clusters get-credentials cluster-1
    

    노드 확인
    $ kubectl get node
    NAME                               LABELS                                                    STATUS    AGE
    gke-cluster-1-e6ff40f6-node-oxvo   kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-oxvo   Ready     1m
    gke-cluster-1-e6ff40f6-node-v2rg   kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-v2rg   Ready     1m
    gke-cluster-1-e6ff40f6-node-v8mt   kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-v8mt   Ready     1m
    

    ※치 PS



    cluster 내의 노드 추가·삭제에 관해서는, terraform에서는 변경할 수 없다

    initial_node_count = "4"(으)로 변경해 terraform plan 실행하면 cluster 가 재작성되는 것을 알 수 있다
    -/+ google_container_cluster.default
        cluster_ipv4_cidr:                    "10.52.0.0/14" => "<computed>"
        endpoint:                             "***.***.***.***" => "<computed>"
        initial_node_count:                   "3" => "4" (forces new resource)
    

    노드를 추가하는 방법



    먼저 인스턴스 그룹 확인
    $ gcloud compute instance-groups managed list
    NAME                         ZONE         BASE_INSTANCE_NAME          SIZE TARGET_SIZE INSTANCE_TEMPLATE            AUTOSCALED
    gke-cluster-1-e6ff40f6-group asia-east1-b gke-cluster-1-e6ff40f6-node 3    3           gke-cluster-1-e6ff40f6-1-1-3 no
    

    gcloud 명령으로 확인한 인스턴스 그룹의 크기 조정 (노드 수를 3 → 4로 변경)
    $ gcloud compute instance-groups managed resize gke-cluster-1-e6ff40f6-group --size 4
    ...snip...
    currentActions:
      abandoning: 0
      creating: 1
      deleting: 0
      none: 3
      recreating: 0
      refreshing: 0
      restarting: 0
    ...snip...
    targetSize: 4
    zone: asia-east1-b
    

    노드 확인
    $ kubectl get node
    NAME                               LABELS                                                    STATUS    AGE
    gke-cluster-1-e6ff40f6-node-c723   kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-c723   Ready     1m
    gke-cluster-1-e6ff40f6-node-oxvo   kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-oxvo   Ready     23m
    gke-cluster-1-e6ff40f6-node-v2rg   kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-v2rg   Ready     23m
    gke-cluster-1-e6ff40f6-node-v8mt   kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-v8mt   Ready     23m
    

    노드 삭제



    노드 수를 4→3으로 변경
    $ gcloud compute instance-groups managed resize gke-cluster-1-e6ff40f6-group --size 3
    

    노드 확인
    $ kubectl get node
    NAME                               LABELS                                                    STATUS    AGE
    gke-cluster-1-e6ff40f6-node-oxvo   kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-oxvo   Ready     34m
    gke-cluster-1-e6ff40f6-node-v2rg   kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-v2rg   Ready     34m
    gke-cluster-1-e6ff40f6-node-v8mt   kubernetes.io/hostname=gke-cluster-1-e6ff40f6-node-v8mt   Ready     34m
    

    좋은 웹페이지 즐겨찾기