Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS에서 Kubernetes 실전 활용하기

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

AWS에서 Kubernetes 실전 활용하기

By Ben

Avatar for Buzzvil

Buzzvil

July 04, 2018
Tweet

More Decks by Buzzvil

Other Decks in Programming

Transcript

  1. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. 유병우 Buzzvil Kubernetes in Action on AWS
  2. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Why Container orchestration tool? Why Kubernetes? Why Kops? Demo
  3. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Why Container orchestration tool?
  4. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Why Container? • State? • Relation? • History?
  5. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Why Container? - Relation 격리된 공간 가상화 Overhead
  6. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Why Container? - History # Use an official Python runtime as a parent image FROM python:2.7-slim # Set the working directory to /app WORKDIR /app # Copy the current directory contents into the container at /app ADD . /app # Install any needed packages specified in requirements.txt RUN pip install --trusted-host pypi.python.org -r requirements.txt # Make port 80 available to the world outside this container EXPOSE 80
  7. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Why Container orchestration tool? EC2 Django EC2 Django EC2 Django EC2 Go EC2 Go EC2 Go 2 Apps + 2 AS Groups + 1 ALB Docker 도입 Django Go Application load balancer Nginx 3 Apps + 1 AS Groups Container orchestration tool 을 통해 이걸 해결해보자!
  8. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Cluster Cluster / Node / Pod
  9. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. RC / Deployment / Service • ReplicationController (ReplicaSet) • 하나의 Pod 상태를 공유하는 Set • Deployment? • 업데이트! (RC 가 추가됨) • 어떻게 배포할지 설정 가능 How to expose them? Service
  10. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Why Kubernetes? • Automatic binpacking • Horizontal scaling • Automated rollouts and rollbacks • Self-healing • Service discovery and load balancing
  11. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Automatic binpacking
  12. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Automatic binpacking Node 1 (4 CPU / 8G) 2 CPU / 2G Node 2 (4 CPU / 8G) 2 CPU / 2G 2 CPU / 2G 1 CPU / 2G
  13. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Automatic binpacking Node 1 (4 CPU / 8G) 2 CPU / 2G Node 2 (4 CPU / 8G) 2 CPU / 2G 2 CPU / 2G 1 CPU / 2G
  14. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Automatic binpacking Node 1 (4 CPU / 8G) 2 CPU / 2G 1 CPU / 2G Node 2 (4 CPU / 8G) 2 CPU / 2G 2 CPU / 2G 1 CPU / 2G
  15. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Automatic binpacking Node 1 (4 CPU / 8G) 2 CPU / 2G Node 2 (4 CPU / 8G) 2 CPU / 2G 2 CPU / 2G 1 CPU / 2G 1 CPU / 2G
  16. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Automatic binpacking 2 CPU / 16G 2 CPU / 4G 4 CPU / 8G 2 CPU / 2G 1 CPU / 2G 2 CPU / 16G 1 CPU / 4G 1 CPU / 8G 4 CPU / 8G 2 CPU / 2G 1 CPU / 2G 2 CPU / 16G 1 CPU / 4G 1 CPU / 8G 4 CPU / 8G 2 CPU / 2G 1 CPU / 2G 2 CPU / 16G 1 CPU / 6G 1 CPU / 2G 4 CPU / 8G 2 CPU / 2G 1 CPU / 2G 3 CPU / 4G 1 CPU / 8G
  17. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Horizontal scaling
  18. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Horizontal scaling
  19. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Automated rollouts and rollbacks
  20. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Automated rollouts and rollbacks https://kubernetes.io/docs/tutorials/kubernetes-basics/update-intro/
  21. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Automated rollouts and rollbacks
  22. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Self-healing Node 1 App 1 App 2 Node 2 App 2 Node 3 App 3 Master Contoller Scheduler
  23. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Self-healing Node 1 App 1 App 2 Node 2 App 2 Node 3 App 3’ Master Contoller Scheduler
  24. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Self-healing Node 1 App 1 App 2 Node 2 App 2 Node 3 App 3 Master Contoller Scheduler
  25. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Self-healing Node 1 App 1 App 2 Node 2 App 2 App 3 Master Contoller Scheduler
  26. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Service discovery and load balancing
  27. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Service discovery and load balancing {{service-name}}.{{namespace}}.svc.cluster.local
  28. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Service discovery and load balancing • Internal • ClusterIP • External • LoadBalancer • NodePort
  29. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Why kops? • AWS 위에 Kubernetes clusters 관리를 자동화 AWS AWS Kube
  30. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Kube + α Why kops? • AWS 위에 Kubernetes clusters 관리를 자동화 S3 IAM VPC EC2 Route53
  31. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Why kops? • AWS 위에 Kubernetes clusters 관리를 자동화 • 고가용성(Highly Available) Kubernetes Masters
  32. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Why kops? • AWS 위에 Kubernetes clusters 관리를 자동화 • 고가용성(Highly Available) Kubernetes Masters • State-sync model (dry-runs & Idempotency) • kops create cluster --zones us-west-2a ${NAME} • kops update cluster ${NAME} --yes
  33. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Prerequisites • Install CLI tools – kops / kubectl • IAM permissions
  34. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Demo • Cluster 구성 (1 master & 2 nodes) • Web app & Nginx proxy 구성 • External load balancer 구성 • Auto scaling 설정
  35. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. VPC Overview Cluster Load balancer hello-go Pod Pod Pod Pod autoscaler Nginx Pod Cluster autoscaler
  36. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. VPC Cluster 구성 Cluster Master Node Node
  37. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Cluster 구성 • 환경변수 설정 • export AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id) • export AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key) • export S3_BUCKET_NAME=k8s-state-test-honeyscreen-com • export KOPS_STATE_STORE=s3://${S3_BUCKET_NAME} • export CLUSTER_NAME=k8s-test.honeyscreen.com • export SSH_PUBLIC_KEY=~/.ssh/id_rsa.pub • export VPC={{VPC-ID}} • export CLUZTER_REGION=ap-northeast-2 • export CLUSTER_ZONE=${CLUZTER_REGION}a
  38. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Cluster 구성 • S3 Bucket 만들기 / Cluster 생성
  39. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Cluster 구성 • Cluster 확인 및 수정
  40. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Cluster 구성 • Cluster 적용 • kops update cluster --name $CLUSTER_NAME –yes • Cluster 업데이트 • kops edit instancegroup nodes • kops update cluster --name $CLUSTER_NAME –yes
  41. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Cluster 구성 • Dashboard 설치 • kubectl create -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/kubernetes- dashboard/v1.8.1.yaml • http://api.k8s-test.honeyscreen.com/ui
  42. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. VPC Web app & Nginx proxy 구성 Cluster hello-go Pod Pod Pod Nginx Pod
  43. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Web app & Nginx proxy 구성 • Web app - hello-go • Source code • Return Git revision • Build • kube/app-hello-go.yaml • kube/svc-hello-go.yaml • Nginx proxy • kube/app-nginx.yaml • kube/svc-nginx.yaml
  44. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Web app - hello-go • main.go
  45. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Web app – build-docker.sh • hello
  46. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Web app – kube/app-hello-go.yaml
  47. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Web app – kube/svc-hello-go.yaml
  48. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Web app – kube/app-nginx.yaml
  49. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. VPC External load balancer 구성 Cluster Load balancer hello-go Pod Pod Pod Nginx Pod
  50. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Web app – kube/svc-nginx.yaml
  51. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. External load balancer 구성 • Expose Nginx to Load balancer • kube/svc-nginx.yaml • Load balancer 확인 • Route53 에서 sub domain 할당
  52. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. VPC Auto scaling 설정 Cluster Load balancer hello-go Pod Pod Pod Pod autoscaler Nginx Pod Cluster autoscaler
  53. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Auto scaling - Pod • kube/hpa-hello-go.yaml
  54. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. Auto scaling - Cluster • kube/app-autoscaler.yaml
  55. © 2018, Amazon Web Services, Inc. or Its Affiliates. All

    rights reserved. References • Github https://github.com/urunimi/kube-sample/ • E-mail [email protected] [email protected] We are hiring!
  56. Q&A