SlideShare a Scribd company logo
BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발
DEVSISTERS
jeonghyun.nam@devsisters.com
DEVSISTERS
Agenda
• Azure Container Instance
• Virtual Node & Virtual Kubelet
• Integrating with Docker Kubernetes Service
Container Instances BatchService Fabric Kubernetes ServiceApp Service
Azure Container Instances
Azure Container Instances (ACI)
서버 관리 없이 컨테이너를 쉽게 생성할 수 있습니다.
컨테이너 단위로
초당 청구되는 과금 체계
하이퍼바이저 격리를 통
한
안전한 실행 환경
서버 없이
컨테이너를
실행할 수 있습니다.
ACI에 대한 이해
• Kubernetes의 Pod과 개념적
으로 유사함
• 컨테이너 그룹 안에 하나 이상
의 컨테이너 존재 (App +
Sidecar)
할당량에 대한 정보
• 구독 당 100개의 컨테이너 그룹 사용 가능
• 컨테이너 그룹 당 60개의 컨테이너, 20개의 볼륨 사용 가능
• IP당 포트는 5개까지 생성 가능
• 컨테이너 로그는 실행 중일 때 4MB, 멈추었을 때 16KB 또는
1000줄까지 보관 가능
• 시간 당 300개까지, 5분 당 100개 컨테이너 생성/삭제 가능
Virtual Node & Virtual
Kubelet
Virtual Node & Virtual Kubelet
• Kubernetes는 다수의 Node와 각 Node에서 실행되는 Pod으로
구성된 클러스터 집합
• 원래 Node는 Kubeadm 등의 수단을 이용하여 클러스터 내부의
등록 명부인 ETCD 데이터베이스에 정보를 등록해야 함
Virtual Node & Virtual Kubelet (Cont.)
• 하지만 실제 Node 대신 Serverless Container 서비스를 Node의
대용품으로 생각해볼 수 있지 않을까 하는 참신한 아이디어가
실현됨
• 그것이 바로 Virtual Node이며 Virtual Kubelet이 그 일을 대행
함
• Virtual Kubelet은 하나의 스펙이라고 생각하면 편리함
Virtual Kubelet
Virtual Kubelet
• Serverless Container를 Kubernetes에 통합하고 함께 사용할 수
있도록 제공
• Azure Container Instance, AWS Fargate, Alibaba Cloud ECI,
HashiCorp Nomad 등 여러 Provider 연동을 지원
기존과 무엇이 달라지는가
• App 개발자 (Deployment YAML 파일 작성자) 입장에서는 달라
질 것이 없으며, 클러스터 관리자가 가상 노드를 추가하는 것
• 네트워크 서브넷을 공유해야 한다는 조건이 없다면, 공인 IP를
할당받는 가상의 Pod을 서비스 한도 내에서 제한없이 추가/제
거 가능
• 네트워크 서브넷 공유가 필요한 경우는 조건이 서로 맞아야 함
ACI 과금 체계
• 동남아시아 Region 기준
• 1GB/초당 0.0017276원, 1CPU/초당 0.0158076원
• Windows 컨테이너인 경우 1CPU/초당 0.0134958원 추가
Integrating with Docker
Kubernetes Service
오늘 살펴보려는 것
• Virtual Kubelet 표준을 지원하는 Azure ACI Connector를
Docker for Desktop에 설치해서 활용하기
• 이를 통해 AKS 없이 Linux와 Windows Pod을 쉽게 배포하고 테스트할
수 있도록 만들 것입니다.
준비할 것
• Azure Subscription
• Azure CLI
• Kubernetes CLI
• Helm CLI
• Docker for Desktop v2.0 이상
Step 1 – Docker for Desktop 설정 변경
• Linux 컨테이너 모드에서만 사
용 가능함
• Kubernetes 지원 활성화 체크
후 확인
Step 2 – Context 확인 및 선택
• kubectl config get-contexts
• kubectl config use-context docker-for-desktop
Step 3 - Master Cluster 주소 확인
• kubectl cluster-info
• $env:MASTER_URI=“…"
Step 4 - Subscription ID 획득
• az account list
• $env:AZURE_SUBSCRIPTION_ID=“…"
Step 5 - ACI용 Resource Group 생성
• $env:ACI_REGION=“…"
• $env:AZURE_RG=“…"
• az group create --name $env:AZURE_RG --location
$env:ACI_REGION
Step 6 - 서비스 사용자 (Service Principal)
• az ad sp create-for-rbac --name … -o table
• $env:AZURE_TENANT_ID=“…"
• $env:AZURE_CLIENT_ID=“…"
• $env:AZURE_CLIENT_SECRET=“…"
Step 7 - Windows 가상 노드 추가
helm install "https://github.com/virtual-kubelet/virtual-
kubelet/raw/master/charts/virtual-kubelet-latest.tgz" --name "vktest-
windows" `
--set provider=azure `
--set nodeName=vktest-windows `
--set nodeOsType=Windows `
--set rbac.install=false `
--set providers.azure.targetAKS=false `
--set providers.azure.aciResourceGroup=$env:AZURE_RG `
--set providers.azure.aciRegion=$env:ACI_REGION `
--set providers.azure.tenantId=$env:AZURE_TENANT_ID `
--set providers.azure.subscriptionId=$env:AZURE_SUBSCRIPTION_ID `
--set providers.azure.clientId=$env:AZURE_CLIENT_ID `
--set providers.azure.clientKey=$env:AZURE_CLIENT_SECRET `
--set providers.azure.masterUri=$env:MASTER_URI
Step 8 - Linux 가상 노드 추가
helm install "https://github.com/virtual-kubelet/virtual-
kubelet/raw/master/charts/virtual-kubelet-latest.tgz" --name "vktest-
linux" `
--set provider=azure `
--set nodeName=vktest-linux `
--set nodeOsType=Linux `
--set rbac.install=false `
--set providers.azure.targetAKS=false `
--set providers.azure.aciResourceGroup=$env:AZURE_RG `
--set providers.azure.aciRegion=$env:ACI_REGION `
--set providers.azure.tenantId=$env:AZURE_TENANT_ID `
--set providers.azure.subscriptionId=$env:AZURE_SUBSCRIPTION_ID `
--set providers.azure.clientId=$env:AZURE_CLIENT_ID `
--set providers.azure.clientKey=$env:AZURE_CLIENT_SECRET `
--set providers.azure.masterUri=$env:MASTER_URI
Step 9 – 노드 상태 확인
• kubectl get pods --watch --namespace=default
• kubectl get nodes
버전 차이는 걱정하지 않아도 됩니다.
Pod 예제 배포하기
• https://gist.github.com/rkttu/100a063dd79c5c09c7679838866
5ca25
Linux Pod 배포하기
apiVersion: v1
kind: Pod
metadata:
name: aci-helloworld
spec:
containers:
- image: microsoft/aci-helloworld:latest
imagePullPolicy: Always
name: aci-helloworld
resources:
requests:
memory: 1G
cpu: 1
ports:
- containerPort: 80
name: http
protocol: TCP
dnsPolicy: ClusterFirst
nodeName: vktest-linux
Windows Pod 배포하기
apiVersion: v1
kind: Pod
metadata:
name: iis-winsvrcore
spec:
containers:
- image: mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016
imagePullPolicy: Always
name: iis-winsvrcore
resources:
requests:
memory: 1G
cpu: 1
ports:
- containerPort: 80
name: http
protocol: TCP
dnsPolicy: ClusterFirst
nodeName: vktest-windows
배포 결과 확인하기
배포 결과 확인하기 (Cont.)
Limitations
• Windows 컨테이너에 관한 제약이 큰 편
• 아직 Windows Server 2016 컨테이너만 지원
• Windows 컨테이너의 크기가 큰 탓에 첫 시동이 늦음 (약 4GB 이미지)
(!!)
• Docker for Windows에서의 버그
• kubectl exec 명령을 실행한 후에 로컬 Master 서버와 연결이 끊어짐
• https://github.com/virtual-kubelet/virtual-kubelet/issues/556
더 찾아보기
• 노드를 사용해서 인프라를 확장하는 것보다 더 빠르게 적시에
인프라를 증설할 수 있는 방법으로 AKS에 ACI를 더하기도 합니
다.
• Virtual Kubelet을 이용한 Burst Traffic 소화
• https://github.com/Azure-Samples/virtual-kubelet-aci-
burst/blob/master/Bursting%20Video.mp4
Thank You Danke
Merci
Obrigado
Tänan

More Related Content

PPTX
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
PDF
Windows Kubernetes Deep Dive
PDF
Windows Kubernetes Bootstrapping and Operations
PDF
코딩이랑 무관합니다만, 2019년 6월 발표 자료
PDF
Kubernetes on Premise
PDF
Kubernetes on Premise Practical Guide
PDF
Prometheus in openstack-helm
PDF
[221] docker orchestration
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
Windows Kubernetes Deep Dive
Windows Kubernetes Bootstrapping and Operations
코딩이랑 무관합니다만, 2019년 6월 발표 자료
Kubernetes on Premise
Kubernetes on Premise Practical Guide
Prometheus in openstack-helm
[221] docker orchestration

What's hot (20)

PDF
Spring cloud on kubernetes
PDF
Why container ?
PDF
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
PPTX
Docker & Kubernetes 기초 - 최용호
PDF
Rancher Simple User Guide
PPTX
Openstack zun,virtual kubelet
PDF
[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례
PPTX
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
PDF
Mesos + Marathon + Docker
PDF
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...
PDF
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
PDF
Devfair kubernetes 101
PDF
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
PPTX
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략
PDF
Kubernetes에서 Windows Application 호스팅하기
PDF
Cloud for Kubernetes : Session1
PDF
[네이버클라우드플랫폼 온라인 교육 시리즈] 네이버클라우드플랫폼 쿠버네티스 소개(정낙수 클라우드 솔루션 아키텍트)
PDF
모두의 쿠버네티스 (Kubernetes for everyone)
PPTX
[넥슨] kubernetes 소개 (2018)
PDF
Kubernetes를 통한 laravel 개발프로세스 개선하기
Spring cloud on kubernetes
Why container ?
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker & Kubernetes 기초 - 최용호
Rancher Simple User Guide
Openstack zun,virtual kubelet
[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
Mesos + Marathon + Docker
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
Devfair kubernetes 101
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략
Kubernetes에서 Windows Application 호스팅하기
Cloud for Kubernetes : Session1
[네이버클라우드플랫폼 온라인 교육 시리즈] 네이버클라우드플랫폼 쿠버네티스 소개(정낙수 클라우드 솔루션 아키텍트)
모두의 쿠버네티스 (Kubernetes for everyone)
[넥슨] kubernetes 소개 (2018)
Kubernetes를 통한 laravel 개발프로세스 개선하기
Ad

Similar to BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발 (20)

PDF
Journey to Windows Kubernetes
PDF
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
PDF
AWS Kubernetes 서비스 자세히 살펴보기 (정영준 & 이창수, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
PDF
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
PPTX
Introduce Google Kubernetes
PDF
Cloud market trends, what is kubernets? (Korean)
PDF
K8s in action02
PPTX
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
PPTX
K8s beginner 2_advanced_ep02_201904221130_post
PDF
kubernetes from beginner to advanced
PDF
kubernetes : From beginner to Advanced
PDF
Kubernetes on GCP
PPTX
쿠버네티스의 이해 #1
PPTX
Docker 로 Linux 없이 Linux 환경에서 개발하기
PDF
Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)
PDF
세션3_데보션테크데이_gitopsinfra_v1.1.pdf
PDF
AWS 기반 Kubernetes 정복하기::정영준:: AWS Summit Seoul 2018
PDF
2017 k8s and OpenStack-Helm
PDF
쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호
PDF
Kubernetes in action
Journey to Windows Kubernetes
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
AWS Kubernetes 서비스 자세히 살펴보기 (정영준 & 이창수, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
쿠버네티스 오픈 소스와 클라우드 매니지드 서비스 접점 소개
Introduce Google Kubernetes
Cloud market trends, what is kubernets? (Korean)
K8s in action02
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
K8s beginner 2_advanced_ep02_201904221130_post
kubernetes from beginner to advanced
kubernetes : From beginner to Advanced
Kubernetes on GCP
쿠버네티스의 이해 #1
Docker 로 Linux 없이 Linux 환경에서 개발하기
Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 애플리케이션 실행환경 통합 관리 (CB-Ladybug)
세션3_데보션테크데이_gitopsinfra_v1.1.pdf
AWS 기반 Kubernetes 정복하기::정영준:: AWS Summit Seoul 2018
2017 k8s and OpenStack-Helm
쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호
Kubernetes in action
Ad

BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발

  • 4. Agenda • Azure Container Instance • Virtual Node & Virtual Kubelet • Integrating with Docker Kubernetes Service
  • 5. Container Instances BatchService Fabric Kubernetes ServiceApp Service
  • 7. Azure Container Instances (ACI) 서버 관리 없이 컨테이너를 쉽게 생성할 수 있습니다. 컨테이너 단위로 초당 청구되는 과금 체계 하이퍼바이저 격리를 통 한 안전한 실행 환경 서버 없이 컨테이너를 실행할 수 있습니다.
  • 8. ACI에 대한 이해 • Kubernetes의 Pod과 개념적 으로 유사함 • 컨테이너 그룹 안에 하나 이상 의 컨테이너 존재 (App + Sidecar)
  • 9. 할당량에 대한 정보 • 구독 당 100개의 컨테이너 그룹 사용 가능 • 컨테이너 그룹 당 60개의 컨테이너, 20개의 볼륨 사용 가능 • IP당 포트는 5개까지 생성 가능 • 컨테이너 로그는 실행 중일 때 4MB, 멈추었을 때 16KB 또는 1000줄까지 보관 가능 • 시간 당 300개까지, 5분 당 100개 컨테이너 생성/삭제 가능
  • 10. Virtual Node & Virtual Kubelet
  • 11. Virtual Node & Virtual Kubelet • Kubernetes는 다수의 Node와 각 Node에서 실행되는 Pod으로 구성된 클러스터 집합 • 원래 Node는 Kubeadm 등의 수단을 이용하여 클러스터 내부의 등록 명부인 ETCD 데이터베이스에 정보를 등록해야 함
  • 12. Virtual Node & Virtual Kubelet (Cont.) • 하지만 실제 Node 대신 Serverless Container 서비스를 Node의 대용품으로 생각해볼 수 있지 않을까 하는 참신한 아이디어가 실현됨 • 그것이 바로 Virtual Node이며 Virtual Kubelet이 그 일을 대행 함 • Virtual Kubelet은 하나의 스펙이라고 생각하면 편리함
  • 14. Virtual Kubelet • Serverless Container를 Kubernetes에 통합하고 함께 사용할 수 있도록 제공 • Azure Container Instance, AWS Fargate, Alibaba Cloud ECI, HashiCorp Nomad 등 여러 Provider 연동을 지원
  • 15. 기존과 무엇이 달라지는가 • App 개발자 (Deployment YAML 파일 작성자) 입장에서는 달라 질 것이 없으며, 클러스터 관리자가 가상 노드를 추가하는 것 • 네트워크 서브넷을 공유해야 한다는 조건이 없다면, 공인 IP를 할당받는 가상의 Pod을 서비스 한도 내에서 제한없이 추가/제 거 가능 • 네트워크 서브넷 공유가 필요한 경우는 조건이 서로 맞아야 함
  • 16. ACI 과금 체계 • 동남아시아 Region 기준 • 1GB/초당 0.0017276원, 1CPU/초당 0.0158076원 • Windows 컨테이너인 경우 1CPU/초당 0.0134958원 추가
  • 18. 오늘 살펴보려는 것 • Virtual Kubelet 표준을 지원하는 Azure ACI Connector를 Docker for Desktop에 설치해서 활용하기 • 이를 통해 AKS 없이 Linux와 Windows Pod을 쉽게 배포하고 테스트할 수 있도록 만들 것입니다.
  • 19. 준비할 것 • Azure Subscription • Azure CLI • Kubernetes CLI • Helm CLI • Docker for Desktop v2.0 이상
  • 20. Step 1 – Docker for Desktop 설정 변경 • Linux 컨테이너 모드에서만 사 용 가능함 • Kubernetes 지원 활성화 체크 후 확인
  • 21. Step 2 – Context 확인 및 선택 • kubectl config get-contexts • kubectl config use-context docker-for-desktop
  • 22. Step 3 - Master Cluster 주소 확인 • kubectl cluster-info • $env:MASTER_URI=“…"
  • 23. Step 4 - Subscription ID 획득 • az account list • $env:AZURE_SUBSCRIPTION_ID=“…"
  • 24. Step 5 - ACI용 Resource Group 생성 • $env:ACI_REGION=“…" • $env:AZURE_RG=“…" • az group create --name $env:AZURE_RG --location $env:ACI_REGION
  • 25. Step 6 - 서비스 사용자 (Service Principal) • az ad sp create-for-rbac --name … -o table • $env:AZURE_TENANT_ID=“…" • $env:AZURE_CLIENT_ID=“…" • $env:AZURE_CLIENT_SECRET=“…"
  • 26. Step 7 - Windows 가상 노드 추가 helm install "https://github.com/virtual-kubelet/virtual- kubelet/raw/master/charts/virtual-kubelet-latest.tgz" --name "vktest- windows" ` --set provider=azure ` --set nodeName=vktest-windows ` --set nodeOsType=Windows ` --set rbac.install=false ` --set providers.azure.targetAKS=false ` --set providers.azure.aciResourceGroup=$env:AZURE_RG ` --set providers.azure.aciRegion=$env:ACI_REGION ` --set providers.azure.tenantId=$env:AZURE_TENANT_ID ` --set providers.azure.subscriptionId=$env:AZURE_SUBSCRIPTION_ID ` --set providers.azure.clientId=$env:AZURE_CLIENT_ID ` --set providers.azure.clientKey=$env:AZURE_CLIENT_SECRET ` --set providers.azure.masterUri=$env:MASTER_URI
  • 27. Step 8 - Linux 가상 노드 추가 helm install "https://github.com/virtual-kubelet/virtual- kubelet/raw/master/charts/virtual-kubelet-latest.tgz" --name "vktest- linux" ` --set provider=azure ` --set nodeName=vktest-linux ` --set nodeOsType=Linux ` --set rbac.install=false ` --set providers.azure.targetAKS=false ` --set providers.azure.aciResourceGroup=$env:AZURE_RG ` --set providers.azure.aciRegion=$env:ACI_REGION ` --set providers.azure.tenantId=$env:AZURE_TENANT_ID ` --set providers.azure.subscriptionId=$env:AZURE_SUBSCRIPTION_ID ` --set providers.azure.clientId=$env:AZURE_CLIENT_ID ` --set providers.azure.clientKey=$env:AZURE_CLIENT_SECRET ` --set providers.azure.masterUri=$env:MASTER_URI
  • 28. Step 9 – 노드 상태 확인 • kubectl get pods --watch --namespace=default • kubectl get nodes
  • 29. 버전 차이는 걱정하지 않아도 됩니다.
  • 30. Pod 예제 배포하기 • https://gist.github.com/rkttu/100a063dd79c5c09c7679838866 5ca25
  • 31. Linux Pod 배포하기 apiVersion: v1 kind: Pod metadata: name: aci-helloworld spec: containers: - image: microsoft/aci-helloworld:latest imagePullPolicy: Always name: aci-helloworld resources: requests: memory: 1G cpu: 1 ports: - containerPort: 80 name: http protocol: TCP dnsPolicy: ClusterFirst nodeName: vktest-linux
  • 32. Windows Pod 배포하기 apiVersion: v1 kind: Pod metadata: name: iis-winsvrcore spec: containers: - image: mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016 imagePullPolicy: Always name: iis-winsvrcore resources: requests: memory: 1G cpu: 1 ports: - containerPort: 80 name: http protocol: TCP dnsPolicy: ClusterFirst nodeName: vktest-windows
  • 35. Limitations • Windows 컨테이너에 관한 제약이 큰 편 • 아직 Windows Server 2016 컨테이너만 지원 • Windows 컨테이너의 크기가 큰 탓에 첫 시동이 늦음 (약 4GB 이미지) (!!) • Docker for Windows에서의 버그 • kubectl exec 명령을 실행한 후에 로컬 Master 서버와 연결이 끊어짐 • https://github.com/virtual-kubelet/virtual-kubelet/issues/556
  • 36. 더 찾아보기 • 노드를 사용해서 인프라를 확장하는 것보다 더 빠르게 적시에 인프라를 증설할 수 있는 방법으로 AKS에 ACI를 더하기도 합니 다. • Virtual Kubelet을 이용한 Burst Traffic 소화 • https://github.com/Azure-Samples/virtual-kubelet-aci- burst/blob/master/Bursting%20Video.mp4