ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • EKS로 빠르고 안정적인 서비스 구축하기 - 환경 구성 1
    EKS 2019. 3. 19. 02:00

    EKS 서비스 환경을 구축하기에 앞서 우리는 앞으로 이 시스템을 어떻게 운영을 할 것인지에 대해 고민을 해야 됩니다.


    kubernetes나 docker로 서비스를 구성한다는 것은 최근에 유행하는 마이크로 서비스 아케텍쳐(MSA)에 맞는 인프라를 구성하고 운영해야 된다는 것이고, 서비스가 늘어남에 따라 그만큼 관리 포인트도 기하 급수적으로 늘어날 수 밖에 없습니다. 특히 EKS 환경은 기존의 베어메탈이나 VM 환경 보다도 더 많은 서비스의 생성과 삭제, 구성의 변경들이 발생하게 될 것이니깐요.


    이런 다양한 요구사항을 소수의 인력으로 감내하기 위해서, 우리는 유용한 도구를 선정하고 학습할 필요가 있습니다.

    그러기 위해 우리는 아래와 같은 환경 구성에 대한 방향을 정해 보았습니다.

    • AWS의 인프라는 Hashicorp의 Terraform을 이용합니다. Terraform은 간단한 문법과 모듈화를 통한 재사용성이 장점 입니다.
    • kubernetes 환경은 Helm chart를 이용해서 관리합니다. template를 이용한 기능별 관리와 chart의 구성을 통한 통합 관리가 장점 입니다.
    • git을 이용해 Terraform과 Helm의 변경사항들을 관리하고 팀원들과 공유합니다.
    • CI/CD는 도구 ( 저희는 bamboo)를 이용해서 동일한 절차에 따라 진행합니다.

    은근슬쩍 IaC에 대해 간단하게 설명을 드렸는데요... 혹시 좀 더 상세한 내용을 원하시는 분들은 아래 책을 읽어 보시는 걸 추천 드립니다! 


    책 장사 아닙니다..;;;


    아울러 개발 환경은 아래와 같습니다.

    • macOS Mojave 10.14.2

    • Visual Studio Code with Terraform, vscode-helm module

    • iTerm2 with zsh

    • Helm v2.12.2

    • Terraform v0.11.13

    • AWS cli with python 2.6.5+ or 3.3+

    • kubectl


    그럼 설치를 진행해 보겠습니다.


    iTerm2 와 zsh 설치

    mac의 기본 터미널을 사용해도 무방하지만 iTerm을 사용하면 좀 더 가독성이 좋고 편리한 환경에서 작업이 가능합니다. 특히 git을 사용하는 환경에서는 매우 유용합니다.

    맥용 iTerm2은 아래 배포 사이트에서 다운로드 가능합니다.

    https://www.iterm2.com/downloads.html


    zsh는 brew를 이용해 설치 합니다.

    $ brew install zsh

    $ chsh -s $(which zsh)    #기본쉘을 zsh로 변경


    추가로 oh my zsh도 같이 설치를 진행 합니다. 설치 후에는 테마도 같이 변경을 합니다.

    $ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

    $ vi ~/.zshrc


    ZSH_THEME="agnoster"


    $ source ~/.zshrc


    oh my zsh에는 쉘 플러그인 설치를 지원하는데, syntax highlighter와 autosuggestions는 꼭 설치하시기 바랍니다.

    $ brew install zsh-autosuggestions

    echo "source /usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc    #설정 적용

    $ source ~/.zshrc        # 설정 적용


    $ cd ~/.oh-my-zsh/custom/plugins

    $ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git

    echo "source ${(q-)PWD}/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc    #설정 적용


    $ source ~/.zshrc


    컬러나 폰트 변경에 대한 부분은 아래 블로그를 참고해 주시기 바랍니다.

    http://heetop.blogspot.com/2017/10/oh-my-zsh_12.html



    AWS cli 설치


    kubeconfig를 업데이트 한다던지 terraform으로 EKS 클러스터를 설치 할 때, AWS cli를 통해서 진행되기에 반드시 설치가 필요로 합니다.

    AWS cli는 pip를 이용해서 설치해 보겠습니다.

    $ sudo pip install --upgrade pip

    $ sudo easy_install pip

    $ pip install awscli --upgrade --user

    $ export PATH=/Users/minheo/Library/Python/2.7/bin:$PATH

    $ echo 'PATH=/Users/minheo/Library/Python/2.7/bin:$PATH' >> ~/.zshrc


    그리고 AWS 인증 설정이 필요한데요. 저는 ~/.aws 디렉터리에 아래 두개의 파일을 생성하였습니다.

    참고로 aws_access_key_id와 aws_secret_access_key 정보는 본인의 AWS IAM의 User 계정에서 생성하여 사용하시면 됩니다.

    $ ~/.aws/credentials


    [default]

    aws_access_key_id=AKIAIOSFODNN7EXAMPLE

    aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY


    $ ~/.aws/config


    [default]

    region=ap-northeast-2

    output=json


    kubectl 설치


    kubernetes의 모든 명령은 kubectl을 통해서 클러스터 API와 통신을 합니다. 해당 바이너리를 다운로드 해서 설치합니다.

    $ curl -o kubectl https://amazon-eks.s3-us-west-2.amazonaws.com/1.11.5/2018-12-06/bin/darwin/amd64/kubectl


    그리고 실행권한을 적용하고 PATH 설정을 합니다.

    $ chmod +x ./kubectl

    $ mkdir $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH

    $ echo 'export PATH=$HOME/bin:$PATH' >> ~/.zshrc


    제대로 적용이 되었는지 확인합니다.

    $ kubectl version --short --client


    aws-iam-authenticator 설치


    kubectl 명령을 사용시 IAM 인증처리를 위해 AWS IAM Authenticator를 설치합니다. 해당 바이너리를 다운로드 해서 설치합니다.

    $ curl -o aws-iam-authenticator https://amazon-eks.s3-us-west-2.amazonaws.com/1.11.5/2018-12-06/bin/darwin/amd64/aws-iam-authenticator


    그리고 실행권한을 적용하고 PATH 설정을 합니다.

    $ chmod +x ./aws-iam-authenticator

    $ mkdir $HOME/bin && cp ./aws-iam-authenticator $HOME/bin/aws-iam-authenticator && export PATH=$HOME/bin:$PATH

    $ echo 'export PATH=$HOME/bin:$PATH' >> ~/.zshrc


    제대로 적용이 되었는지 확인합니다.

    $ aws-iam-authenticator help


    kubeconfig 생성


    kubeconfig 파일은 클러스터의 액세스를 구성하는데 사용되는 파일입니다. eks에서 aws cli의 update-kubeconfig 명령을 사용하면 간단히 구성 가능합니다,

    $ aws eks --region region update-kubeconfig --name cluster_name


    제대로 적용이 되었는지 확인합니다.

    $ kubectl get svc


    혹시 error: the server doesn't have a resource type "svc" 라는 에러가 발생 했을 경우에는 credentials 파일에서 정의한 access_key_id가 configmap auth에 등록이 되지 않아서 발생하는 문제 입니다.


    일단은 해당 계정을 확인합니다.

    $ aws sts get-caller-identity


    arn의 user 계정을 확인!!

    그리고 kubernetes resource edit 권한을 갖고 있는 사용자가 아래 명령어로 해당 사용자를 등록해 줍니다.

    $ kubectl edit -n kube-system configmap/aws-auth


    아래와 같이 mapUsers에 위에서 확인한 arn 정보와 username 그리고 kubernetes role group을 등록합니다.


    지금까지 EKS와 kubernetes 접근에 필요한 command tool이나 환경정보를 등록해 봤습니다.

    다음글에서는 terraform과 helm, vscode의 셋팅을 진행해 보겠습니다.

Designed by Tistory.