미래의 CI / CD 구축, EKS 클러스터 생성

에서 개발 운영 엔지니어로이 튜토리얼에서는, 나는 내 경험을 공유 Cloudify.co는 , 이것은이다 두번째 이후튜토리얼 나는 우리가에서 만든 VPC에 기반 클러스터 EKS 만드는 방법을 설명 할에 이전 게시물.

미래 게시 게시물 의 CI / CD 구축 :

Amazon EKS 란 무엇입니까?

Amazon Elastic Kubernetes Service (Amazon EKS)는 자체 Kubernetes 제어 플레인을 세우거나 유지 관리 할 필요없이 AWS에서 Kubernetes를 쉽게 실행할 수있는 관리 형 서비스입니다. Kubernetes는 컨테이너화 된 애플리케이션의 배포, 확장 및 관리를 자동화하기위한 오픈 소스 시스템입니다.

Amazon EKS는 고 가용성을 보장하기 위해 여러 가용 영역에서 Kubernetes 제어 플레인 인스턴스를 실행합니다. Amazon EKS는 비정상적인 제어 플레인 인스턴스를 자동으로 감지하고 교체하며 이에 대한 자동 버전 업그레이드 및 패치를 제공합니다.

https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html

eksctl CLI 란 무엇입니까?

eksctlEC2 용 Amazon의 새로운 관리 형 Kubernetes 서비스 인 EKS에서 클러스터를 생성하기위한 간단한 CLI 도구입니다. Go로 작성되고 CloudFormation을 사용하며 Weaveworks 에서 생성했으며 커뮤니티의 기여를 환영합니다.

https://eksctl.io/

AWS 스팟 인스턴스 란 무엇입니까?

스팟 인스턴스는 온 디맨드 가격보다 낮은 가격으로 제공되는 미사용 EC2 인스턴스입니다. 스팟 인스턴스를 사용하면 사용하지 않는 EC2 인스턴스를 대폭 할인 된 가격으로 요청할 수 있으므로 Amazon EC2 비용을 크게 낮출 수 있습니다.

스팟 인스턴스는 애플리케이션 실행시기에 대해 유연하게 결정할 수 있고 애플리케이션이 중단 될 수있는 경우 비용 효율적인 선택입니다. 예를 들어 스팟 인스턴스는 데이터 분석, 배치 작업, 백그라운드 처리 및 선택적 작업에 적합합니다.

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html

우리가 구축하는 EKS 클러스터의 아키텍처

  • 단일 장애 지점으로부터 보호하기 위해 두 가용 영역에 걸쳐 EKS 클러스터를 프로비저닝합니다. 이전 게시물에서 두 개의 가용 영역에서 생성 한 VPC를 기억하십니까?
  • 각 가용 영역에는 AWS EKS에서 프로비저닝 및 관리하는 마스터 노드와 작업자 노드, 마스터 노드가 있습니다.
  • 자가 치유 제어 플레인이므로 마스터 노드에 대한 모니터링 / 경고가 필요하지 않습니다.
  • 스팟 인스턴스를 사용하는 워크 플로를 실행하려면이를 위해 노드 그룹 (AWS 자동 확장 그룹)을 정의해야합니다. 나중에 그 방법을 보여 드리겠습니다.
  • 클러스터 자동 확장 처리를 사용하여 클러스터 크기를 자동으로 확장 / 축소합니다.

클러스터는 두 개의 노드 그룹으로 구성됩니다.

  • Jenkins 마스터의 경우 소규모 온 디맨드 노드 그룹 'ng-on-demand'는 필요한 경우 몇 가지 모니터링 도구와 Vault를 배치 할 수도 있습니다. Jenkins 전용 인 경우 일반 온 디맨드 EC2 인스턴스를 하나만 프로비저닝 할 수 있습니다. Jenkins 마스터를 항상 사용할 수 있기를 원하므로이 경우 스팟 인스턴스를 사용하지 않습니다.
  • 동적 노드 그룹 'ng-spot'은 minSize가 0이고 maxSize가 10이고 desiredCapacity가 0이며, 스팟 인스턴스를 기반으로 '클러스터 자동 확장 처리'에 의해 부하에 따라 필요한 크기로 조정됩니다.

AWS 사용자 생성, AWS Cli 설치 및 구성, EKS 용 VPC 생성 방법을 모르는 경우 이전 게시물을 참조하십시오.

'kubectl'설치

https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html

'eksctl'설치

https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html

'eksctl'을 사용하여 EKS 클러스터 만들기

먼저 클러스터 생성을 위해 'eksctl'이 실행할 ClusterConfig를 정의해야합니다.

eks-cluster.yaml

ApiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: eks-ci-cd
  region: us-east-1
vpc:
  subnets:
    private:
      us-east-1a:
        id: "subnet-private-id1"
      us-east-1b:
        id: "subnet-private-id2"
    public:
      us-east-1a:
        id: "subnet-public-id1"
      us-east-1b:
        id: "subnet-public-id2"
nodeGroups:
  - name: ng-on-demand
    instanceType: t3.large
    desiredCapacity: 1
    privateNetworking: true
    labels:
      instance-type: on-demand
    availabilityZones: ["us-east-1a", "us-east-1b"]
  - name: ng-spot
    desiredCapacity: 0
    minSize: 0
    maxSize: 10
    privateNetworking: true
    instancesDistribution:
      instanceTypes: ["m5.large", "m4.large", "t3.large", "m5d.large", "m5ad.large","t3a.large"]
      onDemandBaseCapacity: 0
      onDemandPercentageAboveBaseCapacity: 0
      spotInstancePools: 6
    tags:
      k8s.io/cluster-autoscaler/node-template/label/instance-type: spot
    availabilityZones: ["us-east-1a", "us-east-1b"]
    labels:
      instance-type: spot
    iam:
      withAddonPolicies:
        autoScaler: true
  • 2 개의 가용성 영역 [ "us-east-1a", "us-east-1b"], us-east-1 지역에 대한 클러스터 생성
  • 프라이빗 서브넷, privateNetworking : true의 모든 작업자 노드를 프로비저닝합니다.
  • '겨 현장'노드 그룹이 저렴하고 다양 둘 다 스팟 인스턴스의 함대의 사용 lowestPrice과 결합하여 할당 전략을 InstancePoolsToUseCount. 스팟 집합은 지정한 스팟 풀 수에 걸쳐 현재 스팟 가격을 기준으로 가장 저렴한 인스턴스 유형 및 가용 영역 조합을 자동으로 배포합니다. 이 조합을 사용하면 가장 비싼 스팟 인스턴스를 피할 수 있습니다. 그것에 대해 자세히 알아보십시오.
  • 인스턴스 배포 를 지정 온 디맨드 인스턴스 및 스팟 인스턴스의 분포는, 우리의 경우에 우리는 spotInstancePools 만 스팟 인스턴스를 제공
  • 노드 그룹에 대해 다른 레이블을 사용하여 스팟 인스턴스와 온 디맨드 인스턴스를 식별하고 nodeSelector와 같은 앱 선택기에서 사용합니다.
  • Cluster Autoscaler에서 사용하는 태그

먼저 구성 파일의 서브넷 ID를 교체하고 AWS 계정에서 서비스-> VPC-> 서브넷으로 이동합니다.

$ eksctl create cluster -f eks-cluster.yaml

'ng-on-demand'노드 그룹에 대해 프로비저닝 된 인스턴스 하나가 실행되고 있는지 확인하겠습니다.

로그에서 "/Users/igorzhivilo/.kube/config"가 생성 된 것을 볼 수 있습니다.

'kubectl'노드 가져 오기

$ kubectl get nodes

다음 포스트에서는 클러스터에 Cluster Autoscaler를 설치하는 방법에 대한 설명부터 시작하겠습니다.

결론

이 게시물에서는 CI / CD를위한 고 가용성 및 내결함성 EKS 클러스터를 구축하는 방법을 설명했습니다. 워크로드에 스팟 인스턴스를 사용해야하는 이유와 '노드 그룹'및 'eksctl'유틸리티를 사용하여 구성하는 방법에 대해 이야기하고 마지막으로 실제로 수행하는 방법을 보여주었습니다.

읽어 주셔서 감사합니다. 즐거웠기를 바랍니다. 다음 게시물에서 만나요.

이 튜토리얼의 다음 게시물이 게시 될 때 알림을 받고 싶다면 여기 미디엄과 트위터 (@warolv) 에서 저를 팔로우하세요 .

이 자습서를 복제 할 개인 블로그 : http://igorzhivilo.com ,이 자습서에서 만든 모든 구성을 Github (warolv)에 저장 합니다.

참고 문헌

https:///@warolv/build-ci-cd-of-the-future-with-kubernetes-aws-eks-and-jenkins-84b744f26949

https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html

https://eksctl.io/

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html

https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html

https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet.html

https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_InstancesDistribution.html

Suggested posts

Kubernetes 디버깅 및 로컬 개발에 Telepresence 2 사용

Kubernetes 디버깅 및 로컬 개발에 Telepresence 2 사용

Telepresence 2는 최근에 출시되었으며 (Telepresence 1과 같이) Kubernetes 도구 상자에 추가 할 가치가 있습니다. Telepresence는 일상적인 작업 흐름이 어떻게 개선되는지 발견 한 후에는 살 수없는 도구 중 하나입니다.

HashiCorp Consul을 사용하여 Kubernetes에서 Canary 배포

HashiCorp의 Consul Connect 및 Ingress Gateway 기능을 사용하여 새 애플리케이션 릴리스를 출시하는 방법에 대한 대화 형 가이드입니다.

HashiCorp Consul을 사용하여 Kubernetes에서 Canary 배포

소개 애플리케이션 팀이 고객 대면 애플리케이션의 새 버전을 배포하고 출시 할 준비가 된 시나리오를 그려보십시오. 개발자는 엄격한 테스트를 수행했지만 애플리케이션이 프로덕션에 도달하면 클라이언트는 의도 한대로 서비스를 사용하지 못하게하는 잡히지 않은 버그에 부딪 힙니다.

Related posts

"실용적인 프로그래머"의 5 가지 필수 사항

역대 베스트셀러 코딩 북의 요점

"실용적인 프로그래머"의 5 가지 필수 사항

Pragmatic Programmer는 1999 년에 처음 출판되었으며 이후 역대 최고의 프로그래밍 책으로 선정되었습니다. 저자 Andy Hunt와 David Thomas는 Agile Manifesto의 원저자 중 하나였으며 몇 가지 심각한 자격을 가지고 있습니다.

대규모 GraphQL 쿼리 공격으로부터 보호

공격자가 공개적으로 사용 가능한 GraphQL 인터페이스를 사용하여 사이트를 스크랩하거나 서비스 거부 공격을 실행하는 방법에 대해 알아보십시오. 이들은 4 가지 방법 중 하나로이를 수행 할 수 있습니다. 단일 대형 쿼리를 신중하게 구성하여 실행하고, 관련 데이터를 가져올 수있는 병렬 쿼리를 많이 작성하고, 일괄 요청을 사용하여 많은 쿼리를 연속적으로 실행하고, 마지막으로 많은 요청을 보냅니다.

기술 인터뷰의 사회적 구성 요소

코딩 문제는 스트레스가 많지만 스트레스에 대한 당신의 반응은 당신의 기술적 능력보다 더 크게 말합니다.

기술 인터뷰의 사회적 구성 요소

기술 업계의 직책을 위해 인터뷰 할 때 일반적으로 제안을 고려하기 전에 최소한 3 차례의 인터뷰를 거치게됩니다. 라운드는 일반적으로 다음과 같습니다. 그렇게 생각하면 잘못된 것입니다.

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자를 만드는 비 기술적 인 것들 나는이 기사를 작성하는 것을 한동안 미루고 있습니다. 나는 그것을 작성할 자격이 있다고 생각하지 못했습니다. 오늘은 쓸 때라고 생각했습니다.