Terraform으로 Amazon EKS 추가 기능 설치 및 관리

11717 단어 awsterraformkubernetes

Amazon EKS의 추가 기능이란 무엇입니까?



추가 기능은 Kubernetes 애플리케이션에 지원 운영 기능을 제공하지만 애플리케이션에만 국한되지 않는 소프트웨어입니다.
여기에는 클러스터가 네트워킹, 컴퓨팅 및 스토리지를 위한 기본 AWS 리소스와 상호 작용할 수 있도록 하는 관찰 가능성 에이전트 또는 Kubernetes 드라이버와 같은 소프트웨어가 포함됩니다.

Reference: https://docs.aws.amazon.com/eks/latest/userguide/eks-add-ons.html



Amazon EKS 추가 기능



Amazon VPC CNI
Kubernetes용 Amazon VPC CNI 추가 기능은 Amazon EKS 클러스터의 포드 네트워킹을 위한 네트워킹 플러그인입니다. 플러그인은 Kubernetes 노드에 VPC IP 주소를 할당하고 각 노드의 포드에 필요한 네트워킹을 구성하는 역할을 합니다.

Reference: https://docs.aws.amazon.com/eks/latest/userguide/cni-iam-role.html



코어DNS
CoreDNS는 Kubernetes 클러스터 DNS 역할을 할 수 있는 유연하고 확장 가능한 DNS 서버입니다. 노드가 하나 이상 있는 Amazon EKS 클러스터를 시작하면 클러스터에 배포된 노드 수에 관계없이 CoreDNS 이미지의 복제본 2개가 기본적으로 배포됩니다. CoreDNS 포드는 클러스터의 모든 포드에 대한 이름 확인을 제공합니다.

Reference: https://docs.aws.amazon.com/eks/latest/userguide/managing-coredns.html



큐브 프록시
Kube-proxy는 각 Amazon EC2 노드에서 네트워크 규칙을 유지 관리합니다. 그것은 당신의 포드에 대한 네트워크 통신을 가능하게 합니다.

Reference: https://docs.aws.amazon.com/eks/latest/userguide/managing-kube-proxy.html



아마존 EBS CSI
Amazon Elastic Block Store(Amazon EBS) CSI(Container Storage Interface) 드라이버를 사용하면 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터가 영구 볼륨에 대한 Amazon EBS 볼륨의 수명 주기를 관리할 수 있습니다.

Reference: https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html
https://docs.aws.amazon.com/eks/latest/userguide/managing-ebs-csi.html



Amazon EKS는 모든 클러스터에 대해 Amazon VPC CNI, kube-proxy 및 CoreDNS와 같은 자체 관리형 추가 기능을 자동으로 설치하지만 추가 기능의 기본 구성을 변경하고 원하는 경우 업데이트할 수 있습니다.

Amazon EBS CSI Driver is now available as an Add-on. This Add-on is in preview version with some limitations and inconsistencies. For this reason, its use in Production is not recommended.



이 게시물은 terraform으로 애드온을 설치하는 방법을 단계별로 보여줍니다.

전제 조건


  • Kubernetes 버전 1.18 이상을 실행하는 Amazon EKS 클러스터

  • To create an EKS cluster you can check this post


  • AWS CLI가 설치됨

  • https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html


  • AmazonEKS_CNI_Policy가 연결된 IAM 역할

  • 단계


    01단계 - 각 추가 기능의 버전 가져오기



    각 추가 기능의 모든 버전을 알기 위해 AWS CLI를 사용하여 추가 기능에 대한 모든 정보를 설명할 수 있습니다.

    aws eks describe-addon-versions > addons.json
    


    이 명령을 사용하면 모든 추가 기능 버전을 설명할 수 있으며 보다 편의를 위해 출력을 JSON 파일에 저장할 수 있습니다.

    결과 JSON 파일은 다음과 같습니다.

    {
        "addons": [
            {
                "addonName": "kube-proxy",
                "type": "networking",
                "addonVersions": [
                    {
                        "addonVersion": "v1.21.2-eksbuild.2",
                        "architecture": [
                            "amd64",
                            "arm64"
                        ],
                        "compatibilities": [
                            {
                                "clusterVersion": "1.21",
                                "platformVersions": [
                                    "*"
                                ],
                                "defaultVersion": true
                            }
                        ]
                    },
    ...
    


    이 JSON 파일에는 이름, 유형, 호환성 등과 같은 EKS 클러스터 추가 기능에 대한 모든 정보가 포함되어 있습니다.

    클러스터 버전에 따라 terraform 코드에서 지정하려면 각 추가 기능 버전을 기록해 둡니다.

    02단계 - Terraform 코드 생성



    먼저 마지막 단계에서 얻은 JSON 파일에서 얻은 정보를 기반으로 각 추가 기능의 모든 이름과 버전을 지정하기 위해 list(object()) 유형의 변수를 만들 수 있습니다.

    variable "addons" {
      type = list(object({
        name    = string
        version = string
      }))
    
      default = [
        {
          name    = "kube-proxy"
          version = "v1.21.2-eksbuild.2"
        },
        {
          name    = "vpc-cni"
          version = "v1.10.1-eksbuild.1"
        },
        {
          name    = "coredns"
          version = "v1.8.4-eksbuild.1"
        },
        {
          name    = "aws-ebs-csi-driver"
          version = "v1.4.0-eksbuild.preview"
        }
      ]
    }
    


    Terraform용 AWS 공급자에는 추가 기능을 설치하고 관리하기 위한 특정 리소스가 있습니다.
    for_each 문을 사용하여 addons 변수의 모든 정보를 반복할 수 있습니다.

    resource "aws_eks_addon" "addons" {
      for_each          = { for addon in var.addons : addon.name => addon }
      cluster_name      = aws_eks_cluster.eks-cluster.id
      addon_name        = each.value.name
      addon_version     = each.value.version
      resolve_conflicts = "OVERWRITE"
    }
    


    03단계 - Terraform 코드 적용



    우리가 사용할 수 있는 새로운 자원을 적용하기 위해

    terraform apply -auto-approve
    


    설치가 완료되면 UI를 사용하여 추가 기능을 확인할 수 있습니다.



    설치에 성공하여 각 추가 기능의 StatusActive임을 알 수 있습니다.

    모든 것이 사용 가능한지 확인하는 또 다른 방법kubectl
    kubectl get po -n kube-system
    


    이 명령을 사용하여 각 추가 기능의 포드가 실행 중인지 확인할 수 있습니다.

    좋은 웹페이지 즐겨찾기