티스토리 뷰

출처 : https://soul0.tistory.com/616?category=829396

 

EKS란? (Amazon Elastic Kubernetes Service)

Amazon Elastic Kubernetes Service(EKS)를 사용하면 AWS에서 Kubernetes를 사용하여 컨테이너식 애플리케이션을 손쉽게 배포, 관리 및 확장할 수 있습니다.

Amazon EKS는 사용자를 위해 여러 AWS 가용 영역 전체에서 Kubernetes 관리 인프라를 운영하여 단일 장애 지점을 제거합니다. 

Amazon EKS는 공인 Kubernetes 준수 서비스이므로 파트너와 Kubernetes 커뮤니티의 기존 도구 및 플러그인을 사용할 수 있습니다. 

* 장점

1. AWS 가용 영역에 걸쳐 Kubernetes 관리 인프라를 실행

2. 비정상 컨트롤 플레인 노드를 자동으로 탐지하여 교체

3. 온디맨드 업그레이드 및 패치를 제공

4. (보안) 작업자 노드와 관리형 컨트롤 플레인 간에 암호화된 보안 통신 채널이 자동으로 설정되므로 Amazon EKS에서 실행되는 고객의 인프라는 기본적으로 안전

* 배경(역사)

2013년 등장한 도커 (docker) 는 인프라 세계를 컨테이너 (container) 세상으로 바꿔버렸습니다.

수많은 애플리케이션이 컨테이너로 배포되고 도커파일을 만들어 이미지를 빌드하고 컨테이너를 배포하는 게 흔한 개발 프로세스가 되었습니다. 2019년 DockerCon 발표에선 무려 1052억번의 컨테이너 image pull이 발생했다고 합니다. 이러한 도커의 인기와 함께 쿠버네티스kubernetes의 인기도 엄청나게 치솟고 있습니다.

 

 

1. 쿠버네티스 클러스터에 Deployment를 배포하고 Ingress를 연결하자. Nginx말고 Traefik Ingress도 좋다던데?

2. AWS에 설치할 땐 kops가 좋고 요즘엔 EKS도 많이 쓰더라.

3. on-prem에 설치할 때 kubespray, kubeadm, rancher, openshift 중에 뭐가 나을까?

    ㄱ.https://github.com/kubernetes-sigs/kubespray

    ㄴ.https://github.com/kubernetes/kubeadm

    ㄷ.https://rancher.com/

    ㄹ.https://www.openshift.com/

 

쿠버네티스에 istio나 linkerd 설치해서 서비스메시 적용하고 zipkin으로 추적하자.

컨테이너 서버리스Serverless Cloud Run이 Knative 기반이라던데?

컨테이너 시대에 빌드, 배포는 Spinnaker나 Jenkins X (Jenkins와는 다름!) 써야지.

설정 파일은 helm으로 만들고 ChartMuseum으로 관리하자.

클러스터 하나는 불안한데 멀티 클러스터 구성해야 하지 않을까? Anthos?

클라우드 네이티브Cloud Native 애플리케이션 만들어서 쿠버네티스에 배포하자.

 

 

 

저번 ECS를 끝으로, 다음솔루션인 EKS를 살펴보도록 합니다. (경수)

 

https://eksworkshop.com

 

EKSworkshop.com

Amazon EKS Workshop In this workshop, we will explore multiple ways to configure VPC, ALB, and EC2 Kubernetes workers, and Amazon Elastic Kubernetes Service.

eksworkshop.com

Lab 0: Create EKS Cluster  (만드는 액션으로만 20분걸림)

Kubernetes Objects: Pod, Deployment, Service Lab 1: Exposing a Nginx Service

Kubernetes Objects: Ingress

Lab 2: Ingress (Deploy ALB)

 

 

 

클러스터의 현재 상태를 가지고 있다. (desired 값과 똑같이 만들려고 노력을 하고 있다)

 

kubectl (YAML (red*3 / blue *3)) -> Master로 전달

Desired state 는 3 / 3

Current State 가 2 / 3 일 경우 3 / 3 으로 만들어 주려고 함

 

 

Worker Nodes =  Data Plane 이라 부름

Master Node = Control Plane 이라 부름

이 둘간에 사이에는 kubelet 이 역할을 함

+

kube-proxy 

마스터가 죽더라도 이 둘간의 노드간에는 서비스를 함

하지만 current state 하고 Desired state 를 비교할 수 는 없게 됨.

 

 

Controll Manager : 현재 상태와 목표 상태를 비교하는 역할

Seheduler : 배치하는 역할

etcd : 어떤 상태인지 저장하게 되고, 메타 데이터를 저장함.

 

맨 앞에 NLB + 중간에 ELB를 두게 되는데, 고객이 관리해야 함.

ECS를 운영해야 하는것과 차이점 : 

가격 : $ 0.2 시간당  ( = m4.xlarge 가격과 같음 )

 

EKS 클러스터를 만들면

 

 

 

이 구조가 됨.

1. Create VPC, Subnet

2. Create EKS Cluster

3. Create Node Group

4. Connect kubectl to Cluster

5. Register Nodes to Cluster

액션이 복잡한 절차인데, 

 

EKSCTL 로 한줄의 명령어로 1~5 모든 절차를 함

- EKS를 다루기 위한 Tool 

 

Lab 0. Kubectl 을 이용하여 EKS Cluster 생성하기

EC2 Instance 생성

Seoul Region에서 Amazon Linux 2 AMI로 Instance 생성

 

 

Role 생성

1. Follow this deep link to create an IAM role with Administrator access.

2. Confirm that AWS service and EC2 are selected, then click Next to view permissions.

3. Confirm that AdministratorAccess is checked, then click Next to review.

4. Enter eksworkshop-admin for the Name, and select Create Role

 

 

Kubernetes tools 설치

1. kubectl

sudo curl --silent --location -o /usr/local/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/v1.13.7/bin/linux/amd64/kubectl

 

sudo chmod +x /usr/local/bin/kubectl

2.Install JQ and envsubst

sudo yum -y install jq gettext

 

 

export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account)

export AWS_REGION=$(curl -s 169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region')

echo "export ACCOUNT_ID=${ACCOUNT_ID}" >> ~/.bash_profile

echo "export AWS_REGION=${AWS_REGION}" >> ~/.bash_profile

aws configure set default.region ${AWS_REGION}

aws configure get default.region

권한 잘 들어갔는지 확인.

1. For this module, we need to download the eksctl binary:

 

curl --silent --location "https://github.com/weaveworks/eksctl/releases/download/latest_release/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp/

 

 

sudo mv -v /tmp/eksctl /usr/local/bin

 

 

2. Confirm the eksctl command works:

 

eksctl version

 

 

3.Create an EKS cluster

 

Name 또는 Resource 충돌이 나면 Cluster 이름과 Region을 바꿔서 실행하세요.

eksctl create cluster --version=1.13 --name=eksworkshop-eksctl-[이름입력] --nodes=3 --node-ami=auto --region=${AWS_REGION}

->

eksctl create cluster --version=1.13 --name=eksworkshop-eksctl-stkim881116 --nodes=3 --node-ami=auto --region=ap-northeast-2

- 서울리전에 생성했더니 , internet gateway 제한에 걸려 수행이 안된 사례이며, 도쿄리전으로 변경하여 생성하였다. 

- EC2는 서울에 만들었어도 서울리전 클라이언트이기 때문에 EKS랑은 상관이 없음

 

다음과 같이 확인할 수 있음

 

 

 

================

 

러스터의 사소한 버전 차이 내에있는 kubectl 버전을 사용해야합니다. 예를 들어, v1.2 클라이언트는 v1.1, v1.2 및 v1.3 마스터와 함께 작동해야합니다. 최신 버전의 kubectl을 사용하면 예기치 않은 문제를 피할 수 있습니다.

Linux에 kubectl 설치

Linux에서 curl을 사용하여 kubectl 바이너리 설치

  1. 다음 명령으로 최신 릴리스를 다운로드하십시오.

    curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl

    특정 버전을 다운로드하려면 $(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)명령 부분을 특정 버전으로 바꾸십시오 .

    예를 들어, Linux에서 v1.17.0 버전을 다운로드하려면 다음을 입력하십시오.

    curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.17.0/bin/linux/amd64/kubectl
  2. kubectl 바이너리를 실행 가능하게 만듭니다.

    chmod +x ./kubectl
  3. 바이너리를 PATH로 옮기십시오.

    sudo mv ./kubectl /usr/local/bin/kubectl
  4. 설치 한 버전이 최신인지 확인하십시오.

    kubectl version --client

기본 패키지 관리를 사용하여 설치

sudo apt-get update && sudo apt-get install -y apt-transport-https curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubectl

다른 패키지 관리를 사용하여 설치

스냅 패키지 관리자 를 지원하는 Ubuntu 또는 다른 Linux 배포판에있는 경우 kubectl을 스냅 응용 프로그램으로 사용할 수 있습니다 .

snap install kubectl --classic kubectl version

macOS에 kubectl 설치

macOS에서 curl을 사용하여 kubectl 바이너리 설치

  1. 최신 릴리스를 다운로드하십시오.

    curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl"

    특정 버전을 다운로드하려면 $(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)명령 부분을 특정 버전으로 바꾸십시오 .

    예를 들어, macOS에서 버전 v1.17.0을 다운로드하려면 다음을 입력하십시오.

    curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.17.0/bin/darwin/amd64/kubectl
  2. kubectl 바이너리를 실행 가능하게 만듭니다.

    chmod +x ./kubectl
  3. 바이너리를 PATH로 옮기십시오.

    sudo mv ./kubectl /usr/local/bin/kubectl
  4. 설치 한 버전이 최신인지 확인하십시오.

    kubectl version --client

macOS에서 Homebrew와 함께 설치

macOS를 사용 중이고 Homebrew 패키지 관리자를 사용하는 경우 Homebrew 와 함께 kubectl을 설치할 수 있습니다.

  1. 설치 명령을 실행하십시오.

    brew install kubectl

    또는

    brew install kubernetes-cli
  2. 설치 한 버전이 최신인지 확인하십시오.

    kubectl version --client

macOS에서 Macports와 함께 설치

macOS를 사용 중이고 Macports 패키지 관리자를 사용하는 경우 Macports와 함께 kubectl을 설치할 수 있습니다.

  1. 설치 명령을 실행하십시오.

    sudo port selfupdate sudo port install kubectl
  2. 설치 한 버전이 최신인지 확인하십시오.

    kubectl version --client

Windows에 kubectl 설치

Windows에서 curl을 사용하여 kubectl 바이너리 설치

  1. 이 링크 에서 최신 릴리스 v1.17.0을 다운로드하십시오 .

    또는 curl설치 한 경우 다음 명령을 사용하십시오.

    curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.17.0/bin/windows/amd64/kubectl.exe

    최신 안정 버전 (예 : 스크립팅)을 찾으려면 https://storage.googleapis.com/kubernetes-release/release/stable.txt  참조하십시오 .

  2. 바이너리를 PATH에 추가하십시오.

  3. 의 버전이 kubectl다운로드 한 버전과 같은지 확인하십시오 .

    kubectl version --client

참고 : Windows 용 Docker Desktop 은 자체 버전의 kubectlPATH를 추가합니다 . Docker Desktop을 이전에 설치 한 경우 Docker Desktop 설치 프로그램에서 추가 한 항목 앞에 PATH 항목을 배치하거나 Docker Desktop을 제거해야 할 수도 있습니다 kubectl.

PSGallery에서 Powershell로 설치

Windows에 있고 Powershell Gallery 패키지 관리자를 사용하는 경우 Powershell을 사용하여 kubectl을 설치하고 업데이트 할 수 있습니다.

  1. 설치 명령을 실행하십시오 (를 지정하십시오 DownloadLocation).

    Install-Script -Name install-kubectl -Scope CurrentUser -Force install-kubectl.ps1 [-DownloadLocation <path>]

    참고 : 당신이를 지정하지 않으면 DownloadLocation, kubectl사용자의 임시 디렉토리에 설치됩니다.

  2. 설치 프로그램 $HOME/.kube이 구성 파일을 작성하도록 지시하고 지시합니다.
  3. 설치 한 버전이 최신인지 확인하십시오.

    kubectl version --client

    참고 : 설치 업데이트는 1 단계에 나열된 두 명령을 다시 실행하여 수행됩니다.

Chocolatey 또는 Scoop을 사용하여 Windows에 설치

Windows에 kubectl을 설치하려면 Chocolatey package manager 또는 Scoop 명령 줄 설치 프로그램을 사용할 수 있습니다 .

choco install kubernetes-cli

  1. 설치 한 버전이 최신인지 확인하십시오.

    kubectl version --client
  2. 홈 디렉토리로 이동하십시오.

    cd %USERPROFILE%
  3. .kube디렉토리를 작성하십시오 .

    mkdir .kube
  4. .kube방금 만든 디렉토리로 변경하십시오 .

    cd .kube
  5. 원격 Kubernetes 클러스터를 사용하도록 kubectl을 구성하십시오 :

    New-Item config -type file

    참고 : 메모장과 같은 선택한 텍스트 편집기를 사용하여 구성 파일을 편집하십시오.

Google Cloud SDK의 일부로 다운로드

kubectl을 Google Cloud SDK의 일부로 설치할 수 있습니다.

  1. Google Cloud SDK를 설치하십시오 .
  2. kubectl설치 명령을 실행하십시오 .

    gcloud components install kubectl
  3. 설치 한 버전이 최신인지 확인하십시오.

    kubectl version --client

kubectl 구성 확인

kubectl이 Kubernetes 클러스터를 찾아 액세스하려면 kube-up.sh 를 사용하여 클러스터를 만들 거나 Minikube 클러스터를 성공적으로 배포 할 때 자동으로 생성되는 kubeconfig 파일 이 필요 합니다. 기본적으로 kubectl 구성은에 있습니다 ~/.kube/config.

클러스터 상태를 가져와 kubectl이 올바르게 구성되어 있는지 확인하십시오.

kubectl cluster-info

URL 응답이 표시되면 kubectl이 클러스터에 액세스하도록 올바르게 구성된 것입니다.

다음과 유사한 메시지가 표시되면 kubectl이 올바르게 구성되지 않았거나 Kubernetes 클러스터에 연결할 수 없습니다.

The connection to the server <server-name:port> was refused - did you specify the right host or port?

예를 들어 랩톱에서 로컬로 Kubernetes 클러스터를 실행하려면 Minikube와 같은 도구를 먼저 설치 한 다음 위에 언급 된 명령을 다시 실행해야합니다.

kubectl cluster-info가 URL 응답을 반환하지만 클러스터에 액세스 할 수없는 경우 올바르게 구성되었는지 확인하려면 다음을 사용하십시오.

kubectl cluster-info dump

선택적 kubectl 구성

셸 자동 완성 활성화

kubectl은 Bash 및 Zsh에 대한 자동 완성 지원을 제공하므로 입력을 많이 절약 할 수 있습니다.

다음은 Bash (Linux와 macOS의 차이 포함) 및 Zsh에 대한 자동 완성을 설정하는 절차입니다.

소개

Bash의 kubectl 완료 스크립트는 명령으로 생성 할 수 있습니다 kubectl completion bash. 쉘에서 완성 스크립트를 소싱하면 kubectl 자동 완성 기능이 활성화됩니다.

그러나 완료 스크립트는 bash-completion 에 따라 다릅니다. 즉,이 소프트웨어를 먼저 설치해야합니다 (을 실행하여 bash-completion이 이미 설치되어 있는지 테스트 할 수 있음 type _init_completion).

bash-completion 설치

bash-completion은 많은 패키지 관리자에 의해 제공됩니다 ( 여기 참조 ). apt-get install bash-completion또는 yum install bash-completion등으로 설치할 수 있습니다 .

위의 명령 /usr/share/bash-completion/bash_completion은 bash-completion의 기본 스크립트 인 create를 작성 합니다. 패키지 관리자에 따라 파일에서이 파일을 수동으로 소스해야 ~/.bashrc합니다.

찾으려면 쉘을 다시로드하고을 실행하십시오 type _init_completion. 명령이 성공하면 이미 설정되었으므로 ~/.bashrc파일에 다음을 추가 하십시오.

source /usr/share/bash-completion/bash_completion

쉘을 다시로드하고을 입력하여 bash-completion이 올바르게 설치되었는지 확인하십시오 type _init_completion.

kubectl 자동 완성 활성화

이제 kubectl 완성 스크립트가 모든 셸 세션에서 제공되도록해야합니다. 이를 수행 할 수있는 두 가지 방법이 있습니다.

  • ~/.bashrc파일 에서 완료 스크립트를 소싱 하십시오.

    echo 'source <(kubectl completion bash)' >>~/.bashrc

  • 완료 스크립트를 /etc/bash_completion.d디렉토리에 추가하십시오 .

    kubectl completion bash >/etc/bash_completion.d/kubectl

  • kubectl에 대한 별칭이있는 경우 해당 별칭으로 작업하도록 쉘 완성을 확장 할 수 있습니다.

    echo 'alias k=kubectl' >>~/.bashrc echo 'complete -F __start_kubectl k' >>~/.bashrc

참고 : bash-completion은의 모든 완료 스크립트를의 소스에 둡니다 /etc/bash_completion.d.

두 방법 모두 동일합니다. 쉘을 다시로드 한 후 kubectl 자동 완성 기능이 작동해야합니다.

 

댓글