AWS에서 Kubernetes 클러스터 설정

이번 AWS 및 Kubernetes 자문 시리즈 기사에서는 Amazon Web Services에서 Kubernetes를 시작하는 과정을 단계별로 안내합니다.

기능을 관리하고 개선할 올바른 도구 없이 클라우드에서 애플리케이션을 실행하는 것은 어려울 수 있습니다. 따라서 고객 애플리케이션을 배포할 때 신속한 배포, 기능 롤아웃, 리소스 관리, 탄력성 및 특정 작업의 자동화를 위한 수단이 있어야 합니다. Kubernetes는 이를 수행할 수 있는 일련의 도구를 제공하는 오픈 소스 플랫폼입니다.

K&C – 우리는 20년 이상 혁신적인 기술 솔루션을 만들어 왔습니다.

오늘 우리는 AWS에서 Kubernetes 다중 마스터 클러스터를 실행하고 간단한 애플리케이션을 배포할 것입니다. Kubernetes 클러스터 관리 유틸리티인 kops(Kubernetes Operations)를 사용합니다. 우리의 의견으로는 kops는 현재 Amazon Web Services에 Kubernetes 클러스터를 배포하기 위한 최고의 도구입니다.

1. Route53에서 영역 생성:

aws route53 create-hosted-zone name example.com

2. 클러스터 구성을 저장할 S3 버킷을 생성합니다.

aws s3api create-bucket   --bucket kubernetes-cluster  --region eu-west-1

버전 관리를 제공합니다(버전 관리 포함).

aws s3api put-bucket-versioning --bucket kubernetes-cluster  --versioning-configuration Status=Enabled

3. 새 클러스터 만들기

export KOPS_STATE_STORE=s3://kubernetes-cluster
 
kops create cluster 
--name example.com 
--master-zones eu-west-1a,eu-west-1b,eu-west-1c 
--zones eu-west-1a,eu-west-1b,eu-west-1c 
--state s3://kubernetes-cluster 
--node-count 3 
--yes 

이름 클러스터 이름은 영역 이름과 동일해야 합니다.

마스터가 실행되는 마스터 영역 영역

노드가 위치할 구역 구역

상태 구성 버킷 저장소

node-count 클러스터의 노드 수

예 변경 사항을 수락합니다

클러스터의 가용성 확인:

kops validate cluster
Using cluster from kubectl context: example.com
 
Validating cluster example.com
 
INSTANCE GROUPS
NAME			ROLE	MACHINETYPE	MIN	MAX	SUBNETS
master-eu-west-1a	Master	m3.medium	1	1	eu-west-1a
master-eu-west-1b	Master	m3.medium	1	1	eu-west-1b
master-eu-west-1c	Master	m3.medium	1	1	eu-west-1c
nodes			Node	t2.medium	3	3	eu-west-1a,eu-west-1b,eu-west-1c
 
NODE STATUS
NAME						ROLE	READY
ip-174-21-107-10.eu-west-1.compute.internal	node	True
ip-174-21-113-20.eu-west-1.compute.internal	master	True
ip-174-21-38-94.eu-west-1.compute.internal	node	True
ip-174-21-53-131.eu-west-1.compute.internal	node	True
ip-174-21-61-2.eu-west-1.compute.internal	master	True
ip-174-21-67-114.eu-west-1.compute.internal	master	True
Your cluster example.com is ready

Kops는 kubectl에 대한 설정도 생성합니다. 다음과 같이 할 수도 있습니다.

kubectl get node
ip-174-21-107-10.eu-west-1.compute.internal   Ready     11d       v1.7.2
ip-174-21-113-20.eu-west-1.compute.internal   Ready     11d       v1.7.2
ip-174-21-38-94.eu-west-1.compute.internal    Ready     11d       v1.7.2

노드 구성을 편집하려면 다음을 수행합니다.

kops edit ig nodes
apiVersion: kops/v1alpha2
kind: InstanceGroup
metadata:
  creationTimestamp: 2017-10-02T23:10:46Z
  labels:
    kops.k8s.io/cluster: example.com
  name: nodes
spec:
  image: kope.io/k8s-1.7-debian-jessie-amd64-hvm-ebs-2017-07-28
  machineType: t2.medium -> t2.xlarge
  maxSize: 3 -> 4
  minSize: 3 -> 4
  role: Node
  subnets:
  - eu-west-1a
  - eu-west-1b
  - eu-west-1c

파일을 저장하고 구성을 전송합니다.

kops rolling-update cluster yes

클러스터 상태 확인:

kops validate cluster
nodes	Node  t2.xlarge	  4	4    eu-west-1a,eu-west-1b,eu-west-1c

단순화를 위해 대시보드를 배포해 보겠습니다.

kubectl create -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/kubernetes-dashboard/v1.6.3.yaml

대시보드는 다음에서 사용할 수 있습니다.

https://api.example.com/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy/#!/pod?namespace=default

AWS에서 Kubernetes를 설정하기 위한 단계별 가이드

이제 SSL 및 도메인 이름이 있는 밸런서를 위한 설정으로 간단한 웹 애플리케이션을 설정하겠습니다.

Kubernetes를 Route53에 연결하려면 포드를 배포해야 합니다.

kubectl apply -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/route53-mapper/v1.3.0.yml

IAM 역할에서 노드 이름을 찾고 정책을 추가해야 합니다.

" Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "route53:ListHostedZonesByName",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "elasticloadbalancing:DescribeLoadBalancers",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "route53:ChangeResourceRecordSets",
            "Resource": "*"
        }
    ]
}

배포용 yaml 파일 작성:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: project-ci
spec:
  replicas: 2
  template:
    metadata:
      labels:
        projectenv: ci
    spec:
      containers:
        - name: project
          image: ecr.eu-west-1.amazonaws.com/project
          env:
           - name: DEPLOYMENT_ENV
              value: "ci"
            - name: FILEBEAT_ENABLE
              value: "yes"
          ports:
            - containerPort: 80

이제 서비스에 대한 yaml 파일을 만듭니다.

kind: Service
apiVersion: v1
metadata:
  annotations:
    domainName: "projectci.example.com."
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:us-west-1:659153740712:certificate/xxxxxxxx"
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
  name: projectci
  labels:
    projectenv: ci
    dns: route53
spec:
  selector:
    projectenv: ci
  ports:
    - name: "https"
      protocol: TCP
      port: 443
  type: LoadBalancer

배포 후 애플리케이션은 https://projectci.example.com에서 볼 수 있습니다.

AWS 콘솔에는 새로 생성된 밸런서가 표시됩니다.

그게 다야! 당신은 갈 준비가되었습니다. 다음과 같은 Kubernetes 시리즈의 다른 기사: B. Kubernetes를 사용한 Hashicorp Consul/Vault 가이드.

뮌헨에 본사를 둔 K&C는 IT 서비스 및 아웃소싱 개발 서비스에 대한 컨설턴트로서 20년 이상의 경험을 가지고 있습니다. 최신 개발 기술 스택 및 컨설팅을 통해 DevOps, 클라우드 서비스, 서버리스 아키텍처 설계 및 기타 많은 전문 분야를 제공합니다.

당사의 파트너에는 가장 잘 알려진 유럽 브랜드, 흥미진진한 신생 기업 및 기존 중소기업이 포함됩니다. 그들은 아웃소싱 IT 요구 사항을 구현하기 위해 독일 경영진과 근해 기술 인재의 조합을 신뢰합니다.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top