Terraform Cloud 및 GitHub 작업을 사용하여 Digital Ocean Kubernetes 배포

이것은 내가 지난번에 제출한 DigitalOcean Kubernetes Challenge에 관한 게시물의 후속이다!최소한 Kubegres 의 상하문을 훑어보시기 바랍니다. Kubernetes 조작부호를 사용하여Postgres를 배치할 것입니다.
면책 성명: 이것은 언급한 어떤 기술에 대한 소개가 아니다!GitHub 작업에서 Terraform을 사용하지 않았다면 HashiCorp 자체부터 시작하는 것을 강력히 권장합니다 this tutorial.나는 대부분의 시간을 반복해서 중요한 편향을 지적한다.
필요한 사항:
  • GitHub 계정 1개 및 작동 Git 설치
  • 1개
  • 지형 클라우드 계정과 작업 지형 설치
  • 디지털 Ocean 계정 하나(다른 공급자의 절차는 매우 유사함)
  • 개술


    최근 Digital Ocean Kubernetes에 신축 가능한 Postgres 클러스터를 배치했지만 수동으로 완성했습니다.이 과정은 매우 간단하지만 상당히 지루해서 자동화의 첫 번째 선택이 되었다.

    작업 원리

  • 인프라 시설 배치가 GitHub repo로 전송되고 GitHub 조작 작업 흐름을 촉발
  • GitHub 작업으로 코드 체크 아웃runner
  • Runner가 Terraform Cloud에 연결하여 구성 계획 및 적용
  • Terraform Cloud 를 공급업체에 연결하여 필요한 리소스를 제공합니다
  • .

    층계

  • 지형운 설치
  • GitHub 저장소 설정
  • 지형 파일 설치
  • Push 저장소
  • 정리!
  • 1. 지형운 조성


    1.1. DigitalOcean 계정create a personal access token에서 왔습니다.
    1.2. Terraform Cloud 계정에서 새 작업공간을 만들고 API 제어 워크플로우 유형을 선택합니다.

    1.3. 새로 생성된 작업공간에서 변수 탭으로 이동하여 DIGITALOCEAN TOKEN이라는 새 작업공간 변수를 생성합니다.환경 변수 유형을 선택하고 민감 상자를 선택합니다.


    1.4. Terraform 클라우드 계정에서 사용자 설정 페이지로 이동하여 사이드바에서 영패를 선택하고 새 영패를 생성합니다.GitHub 작업에서 이것이 필요합니다.

    2. GitHub 저장소 설정


    2.1. 새 저장소를 만듭니다.설정 탭으로 이동하여 사이드바에서 [기밀]을 선택합니다.


    2.2. TF API TOKEN이라는 새 비밀을 생성하고 방금 생성한 Terraform Cloud TOKEN을 붙여넣습니다.

    2.3. 저장소의 작업 탭으로 이동하여 Terraform 템플릿을 찾습니다.이 워크플로우 설정 을 클릭합니다.


    워크플로우 단계에 대한 자세한 내용은 this tutorial의 작업 워크플로우 검토 섹션을 참조하십시오.업데이트 요청 절차가 없기 때문에 우리가 사용하는 템플릿은 약간 다르다.
    2.4. 서류를 제출하다.작업 흐름이 터치될 것입니다. 그러나 곧 오류가 발생할 것입니다. 왜냐하면 우리는 지형 문서가 없기 때문입니다.

    3. 지형 파일 설정


    Click here 내가 사용한 지형 파일을 보십시오.이 강좌의 이 부분은 일련의 절차가 아니라 파일을 분해할 것이다.관중 중의 전문가들: 저는 지형에 익숙하지 않으니까 편하게 하세요!나는 설명에 도움이 되는 방식으로 주문하려고 한다.
    terraform {
      backend "remote" {
        organization = "your-org-here"
    
        workspaces {
          name = "your-workspace-name-here"
        }
      }
    
    이 부분은 Terraform이 로컬이 아닌 Terraform 클라우드를 사용하여 기획하고 응용하는 것을 알려준다.이것은 또한 당신의 배치 상태가 stored remotely and securely임을 의미합니다.
    required_providers {
        digitalocean = {
          source  = "digitalocean/digitalocean"
          version = "~> 2.16.0"
        }
    
        kubernetes = {
          source  = "hashicorp/kubernetes"
          version = "~> 2.6.0"
        }
    
        kubectl = {
          source  = "gavinbunney/kubectl"
          version = ">= 1.7.0"
        }
      }
    
    아주 간단합니다.kubectl provider 우아하게 처리하는 kubectl apply 집단에 매우 유용하다(지난번에 우리는 수동으로 많이 처리했다).우리는 잠시 후에 그것의 실제 응용을 볼 것이다.
    resource "digitalocean_project" "k8s_challenge" {
      name        = "k8s-challenge"
      description = "Entry for the DigitalOcean Kubernetes Challenge"
      purpose     = "Just trying out DigitalOcean"
      environment = "Development"
    
      resources = [
        digitalocean_kubernetes_cluster.postgres.urn
      ]
    }
    
    resource "digitalocean_vpc" "k8s" {
      name   = "k8s-vpc"
      region = "sgp1"
    
      timeouts {
        delete = "4m"
      }
    }
    
    DigitalOcean은 프로젝트를 사용하여 리소스를 구성합니다.우리는 우리의 집단을 새로운 집단에 놓고 새로운 전용 네트워크를 만들 것이다.VPC 자원 중의 delete timeout 부분은 VPC를 삭제하기 전에 모든 다른 내용을 삭제했는지 확인하십시오. (그렇지 않으면 삭제 과정에서 오류가 발생할 수 있습니다. 삭제는 몇 분이 걸려야 등록할 수 있습니다.)
    data "digitalocean_kubernetes_versions" "prefix" {
      version_prefix = "1.21."
    }
    
    resource "digitalocean_kubernetes_cluster" "postgres" {
      name         = "postgres"
      region       = "sgp1"
      auto_upgrade = true
      version      = data.digitalocean_kubernetes_versions.prefix.latest_version
    
      vpc_uuid = digitalocean_vpc.k8s.id
    
      maintenance_policy {
        start_time = "04:00"
        day        = "sunday"
      }
    
      node_pool {
        name       = "worker-pool"
        size       = "s-2vcpu-2gb"
        node_count = 3
      }
    }
    
    여기서, 우리는 최종적으로 집단 자체를 배치할 것이다.우리는 많든 적든 기본값을 만들었다.저희가 만든 VPC의 id를 사용하고 있습니다.유지 관리 정책은 DigitalOcean이 업데이트 및 패치를 설치할 시기를 결정합니다.
    provider "kubernetes" {
      host  = digitalocean_kubernetes_cluster.postgres.endpoint
      token = digitalocean_kubernetes_cluster.postgres.kube_config[0].token
      cluster_ca_certificate = base64decode(
        digitalocean_kubernetes_cluster.postgres.kube_config[0].cluster_ca_certificate
      )
    }
    
    provider "kubectl" {
      host  = digitalocean_kubernetes_cluster.postgres.endpoint
      token = digitalocean_kubernetes_cluster.postgres.kube_config[0].token
      cluster_ca_certificate = base64decode(
        digitalocean_kubernetes_cluster.postgres.kube_config[0].cluster_ca_certificate
      )
      load_config_file = false
    }
    
    Kubegres 자원을 추가하기 위한 인증서를 그룹에서 가져올 수 있도록 공급자를 설정합니다.
    variable "superUserPassword" {}
    variable "replicationUserPassword" {}
    
    
    resource "kubernetes_secret" "postgres_secret" {
      metadata {
        name      = "mypostgres-secret"
        namespace = "default"
      }
    
      data = {
        superUserPassword       = var.superUserPassword
        replicationUserPassword = var.replicationUserPassword
      }
    
      type = "Opaque"
    }
    
    이것은 기본적으로 Kubegres tutorial 중의 my-postgres-secret.yaml에 해당한다.
    단거리 우회: 이 비밀들을 당신의 Terraform Cloud 작업 영역 변수에 놓으세요!

    data "kubectl_path_documents" "docs" {
      pattern = "./manifests/*.yaml"
    }
    
    resource "kubectl_manifest" "kubegres" {
      for_each  = toset(data.kubectl_path_documents.docs.documents)
      yaml_body = each.value
    }
    
    kubectl 공급자 응용 프로그램 ./manifests/* 디렉터리에 있는 모든 목록을 알려 줍니다.우리는 kubectl_path_documents가 아니라 kubectl_filename_list를 사용합니다. 왜냐하면 kubegres.yaml 파일은 실제적으로 서로 다른 자원을 정의하는 여러 문서로 구성되어 있기 때문입니다.나는 처음으로 이 문제에 갇혔다: ^)
    자세한 내용은 kubectl provider docs를 참조하십시오.
    단거리 우회: 당신의 환매 협의에 명세서 목록을 만들고 필요한 명세서를 넣으세요!이전 문장의 상하문도 살펴봐야 한다.

    4. 저장소로 밀어넣기


    4.1. 너는 거의 완성하지 못했을 거야!모든 컨텐트를 저장소로 밀어넣습니다.적어도 너는 메인 파이프가 있어야 한다.tf 파일, 목록 디렉터리 및.github/workflows 디렉토리입니다.
    4.2. 트리거된 워크플로우를 보려면 작업 탭을 봅니다.너는 아래의 이런 물건을 보아야 한다.

    쿠베그스 리스트에는 많은 설정이 숨겨져 있다.만약 컨트롤러가 너에게 수천 줄의 출력을 던진다면 당황하지 마라.

    Terraform 클라우드 계정에서 실행 중인 상태를 확인할 수도 있습니다.terraform apply 섹션은 몇 분 걸립니다.네가 가장 좋아하는 음료수를 한 잔 마시고 앉아라!

    몇 분 후:


    또한 DigitalOcean 제어판에서 클러스터를 볼 수도 있습니다.

    기본적으로 집단에는 계기판이 덧붙여져 있습니다.

    5.청소!


    5.1 저희가 Terraform Cloud를 사용했기 때문에 저희는 간단하게 줄을 서서 폐기 계획을 기다릴 수 있습니다!작업공간 설정에 들어가서 삭제와 삭제를 선택하십시오.빨간색 대기열 제거 계획을 클릭하고 그룹 이름을 입력하여 확인하십시오.



    5.2. 너는 마땅히 다시 달리기를 시작해야 한다.아래에서 확인 및 적용 을 클릭하고 주석을 추가한 다음 계획 확인 을 클릭합니다.

    5.3. 클러스터가 제거될 때까지 잠시 기다려 주십시오!작성된 DigitalOcean 항목도 곧 제어판에서 사라져야 합니다.


    보시다시피 VPC는 파괴되는 데 시간이 좀 걸렸습니다.

    감사합니다!


    이렇게!나는 이 강좌가 좀 난삽하다는 것을 알고 있으니, 마음대로 질문하고 디버깅 도움을 구하세요.Digital Ocean이 이번 도전을 조직해 주셔서 감사합니다!환매 협의는 here.

    좋은 웹페이지 즐겨찾기