Skip to content

HallsHolicker/aws-kops-terraform-ansible

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Install Kops by Terraform & Ansible

가시다님의 PKOS 스터디를 진행하면서 작성을 합니다.

스터디는 AWS에서 KOPS를 이용하여 쿠버네티스를 설치하고 테스트를 진행합니다.

스터디에서는 Cloudformation을 이용하여 KOPS 배포를 진행하기에 Terraform & ansible로 배포하는 스크립트를 작성해 봤습니다.

Prerequirement

스크립트를 시작하기 전에 AWS에서 다음의 작업을 필요합니다.

  1. Route53에 DNS 도메인 ( KOPS Cluster Name으로 사용됨 )
  2. 구축 및 테스트의 편의성을 위해 administraotr 권한을 가진 IAM User 생성
  3. 생성된 유저에 Access Key 생성
  4. Default VPC는 삭제

생성된 AWS Access Key와 Secret Key는 Ansible에서 사용이 됩니다.

Terraform

Terraform을 이용하여 다음 서비스들을 배포합니다.

  1. VPC
  2. KOPS Client용 EC2
  3. KOPS에서 k8s 설정을 저장할 S3

Ansible

Ansible을 이용하여 다음 작업들이 가능합니다.

kops.yaml

생성된 AWS Access Key 및 Secre Key는 다음 위치에 작성합니다. 아래의 파일은 .gitignore로 git에는 올라가지 않으니 만드셔야 합니다.

roles/kops/vars/.secret

roles/test-deploy/vars/.secret

AWS_AccessKey: <생성된 Access Key>
AWS_SecretKey: <생성된 Secret Key>
  1. install-kops : KOPS Client Ec2에 kubectl, kops 설치

  2. create-cluster : KOPS를 이용한 K8S 생성

  3. install-addons : K8S Plugin 설치

    A. krew : k8s 패키지 매니저

    B. kube-ctx : 멀티 클러스터에서 클러스터간 전환을 쉽게 해주는 플러그인

    C. kube-ns : k8s에서 namespace 전환을 쉽게 해주는 플러그인

    D. df-pv : k8s에서 PV가 실제로 사용하는 Disk 사용량을 쉽게 볼 수 있는 플러그인

    E. get-all : k8s의 모든 리소스를 확인 할 수 있는 플러그인 ( 기본적인 get all은 ingress는 보여주지 않음 )

    F. ktop : linux의 top처럼 k8s 자원을 확인 할 수 있는 플러그인

    G. neat : yaml 형식을 가독성있게 출력해 주는 플러그인

    H. oomd : Out of Memory로 죽은 pod 정보를 보여주는 플러그인

    I. view-secret : k8s secret 정보를 복호화 해주는 플러그인

    J. community-images : 이미지 저장소 신규 변경 점검 플러그인

    K. kube-ps1 : bash or zsh 환경에서 context와 namespace를 표시해주는 플러그인

    L. kubescape : DevOps를 위한 k8s 보안 플랫폼

  4. info-cluster: K8S 정보 ( KOPS(Cluster Info, Instance Group, Instance, Node IP), K8S(Cluster Info, Nodes, pods) )

  5. delete-cluster : 생성된 K8S 삭제

  6. install-externaldns : External DNS Addon 설치

  7. install-awslbcontroller : AWS Load Balancer Controller Addon 설치

  8. update-kops : Kops 설정 업데이트 ( 업데이트에 사용되는 변수들은 다음 경로의 파일을 사용합니다. roles/kops/vars/update.yaml)

    A. workerNodeSize : Worker Node Size 변경

    • Worker Node Size 변경은 다음값들을 변경후에 실행하면 됩니다.
    targetZone: nodes-ap-northeast-2a
    workerMinSize: 1
    workerMaxSize: 1
    

    B. nodeLocalDNSCache: Node Local DNS Cache 설정

    • Node Local DNS Cach는 다음값을 변경후에 실행하면 됩니다.
    nodeLocalDNSCache: true or false
    

    C. maxPod: Max Pod 변경 ( 예정 )

  9. install-harbor : Harbor 설치

  • region의 ACM에 인증서가 미리 발급되어 있어야 합니다.
  • Aws Load Balancer Controller 가 설치됩니다.
  • ExternalDNS 가 설치됩니다.
  1. install-gitlab : Gitlab 설치
  • region의 ACM에 인증서가 미리 발급되어 있어야 합니다.
  • Aws Load Balancer Controller 가 설치됩니다.
  • ExternalDNS 가 설치됩니다.
  1. install-argocd : Argocd 설치
  • region의 ACM에 인증서가 미리 발급되어 있어야 합니다.
  • Aws Load Balancer Controller 가 설치됩니다.
  • ExternalDNS 가 설치됩니다.
  1. install-prometheus: Prometheus & AlertManager & Grafana 설치
  • region의 ACM에 인증서가 미리 발급되어 있어야 합니다.
  • Aws Load Balancer Controller 가 설치됩니다.
  • ExternalDNS 가 설치됩니다.
  1. install-kwatch : Kwatch 설치
  • secret yaml에 다음 정보가 있어야 합니다.
slack_webhook: <Slack Webhook URL>
  1. install-loki : Loki & Promtail 설치

  2. install-polaris : Polaris 설치

  • Aws Load Balancer Controller 가 설치됩니다.
  • ExternalDNS 가 설치됩니다.

test-deploy.yaml

  1. mario-deploy : Mario 게임을 배포합니다.

  2. mario-deploy-with-externaldns : Mario 게임을 ExternalDNS를 사용해서 보유한 도메인의 mario.<<도메인>> 으로 배포합니다.

  3. netshoot-network-dump : aws vpc cni network 테스트를 할 수 있는 netshoot을 배포합니다.

  4. deploy-nlb-http : http 테스트를 nlb를 사용하여 배포합니다.

  5. deploy-nlb-https : https 테스트를 nlb를 사용하여 배포합니다.

  6. deploy-nlb-proxyprotocol : proxyprotocol을 적용한 nlb를 배포합니다.

  7. deploy-alb : http / https 테스트가 가능한 alb를 배포합니다.

  8. deploy-alb-externaldns : http /https 테스트가 가능하며, ExternalDNS를 사용해서 보유한 도메인으로 접속 가능하게 배포합니다.

실행 순서

  1. Terraform으로 AWS 프로비저닝 진행
  2. 실행후 나온 EC2 Public IP 확인
  3. Ansible playbook 실행 (* 주의사항 : IP 마지막에 ,를 꼭 써줘야 합니다.)
    예>
    ansible-playbook --private-key=<ec2 key pair location> -i ec2-user@<terraform에서 확인한 ip>, kops.yaml
    

주의 사항

Cluster 생성과 삭제를 빠르게 진행하면 AWS의 내부 DNS에서 도메인 갱신에 시간이 걸려 Cluster 생성이 되어도 Validate가 제대로 되지 않는 현상이 발생합니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published