SlideShare une entreprise Scribd logo
1  sur  56
DEVSISTERS
스피커 소개
남정현 (jeonghyun.nam@devsisters.com)
• DEVSISTERS DevOps Engineer
• 한국 Azure 사용자 그룹 운영진
• Microsoft MVP (Since 2009)
Agenda
• Real World Story
• Why We Use Windows Kubernetes
• Windows Container
• Windows Kubernetes
• AKS Engine
• What’s Next
Real World
Story
• 데브시스터즈에서 출시한 게임은 콘
텐츠는 물론, 기술적으로 좋은 레퍼
런스가 되고 있습니다.
• 그러나 기술에 매우 도전적인 자세로
임했던 데브시스터즈 조차도 한 가지
풀기 쉽지 않은 숙제가 있었습니다.
DEVSISTERS와 Windows Workload
• DEVSISTERS에서는 게임 서버 개발과 테스트 자동화를 위하여
Kubernetes를 성공적으로 도입했습니다.
• https://www.slideshare.net/seungyongoh3/ndc17-kubernetes
• 하지만 Kubernetes의 Windows OS 지원은 1.5 버전이 되어서야 겨
우 시작되었습니다.
• 2017년 말부터 Kuberntes 클러스터에 Windows Node 지원을 추가
하기 위한 R&D를 시작했습니다.
DEVSISTERS와 Windows Workload
(Cont.)
• 2017년 하반기부터 시작된 여정을 2019년 2월에야 끝맺었습니
다.
• https://github.com/kubernetes/kubernetes/issues/65163
• https://github.com/kubernetes/kubernetes/issues/66947
• 위의 이슈들을 해결할 수 있도록 도와주신 모든 분들께 다시 한
번 감사드립니다.
구축 목표, 과정, 성과
구축 목표
• Windows와 Linux Pod
동시 사용
• 동일 서브넷에서 서로
다른 노드 OS 구동
구축 과정 및 성과
• 2018년 여름에
한시적으로 하이브리드
클러스터 운영
• 그 과정에서 발견된
2개의 이슈를 Windows
SIG 팀과 협업하여 해결
• 구축 및 운영 노하우
획득
구축 결과
• KOPS 클러스터에
Windows 노드 추가
• Windows Server 2019
대상
• MS SDN 스크립트로부
터 설치 자동화를 위한
자체 Tool 개발
KOPS Cluster + Windows
Node Example
• IIS Pod
• NGINX Ingress Controller
• Kubernetes 1.10.3 Cluster
Why We Use Windows
Kubernetes
컨테이너화를 하는 이유
빠른 개발 좀 더 많은
반복 주기
클라우드
플랫폼 중립성
손쉬운 재현
환경 불변성
일관성
서비스 간의
분리 높은 가용성
대규모
테스트 지원
확장성
저렴한 비용
효율성
오케스트레이션의 필요성
• 그러나 컨테이너화 하는 것만으로 일이 끝나지 않습니다.
• 여러 컨테이너 호스트에 효율적으로 컨테이너를 배포하고, 상황
에 따라 제어하는 기술이 필요합니다.
• 이것이 컨테이너 오케스트레이션입니다.
• 지금은 Kubernetes가 시장을 장악했습니다.
앱을 빠르고 예측
가능하게 배포
즉시 앱을
스케일 업/다운
중단 없이 새로운
기능 배포
하드웨어 사용을
필수 리소스로만
제한
Kubernetes
Kubernetes
이식 가능
퍼블릭, 프라이빗,
하이브리드,
멀티 클라우드
확장 가능
모듈식, 플러그 가능,
훅 연결 가능, 구성 가능
자가 치유
자동 배정, 자동 재시작,
자동 복제, 자동 스케일링
Windows에서의 문제
• Kubernetes가 좋긴 하지만 현실적인 문제가 있습니다.
• Windows가 Kubernetes와 호환되지 않는다는 것!
Windows에서의 문제 (Cont.)
• 그렇다고 해서 Windows 기반 기술을 Linux 기반 기술로 대체하
는 것은 큰 리스크를 동반합니다.
• 제한된 시간과 비용으로 이런 리스크는 감당할 수 없습니다.
• 하지만 이제 그 격차가 줄어들고 있습니다.
• 지금이 바로 여러분의 Windows Server App을 컨테이너화 할
시간입니다.
Windows Container
Host User Mode
Container
Management
System
Processes
Application
Process(es)
System
Processes
Windows 서버 컨테이너
Windows 서버 컨테이너 (Cont.)
• OS 수준의 가상화이므로 하이퍼바이저 불필요
• 커널이 컨테이너 내부의 모든 프로세스를 관리
• 기본 이미지로부터 차등분만 이미지로 저장
• VM을 사용하는 것 보다 훨씬 더 조밀한 서비스 제공 가능
• 단, 동일 커널을 사용하여 발생할 수 있는 이슈가 존재
• 이것은 리눅스 기반 컨테이너에서도 동일한 이슈
• Shared Kernel 방식의 컨테이너 실행 가능 개수는 무제한
컨테이너 이미지
IIS
웹 사이트
기본 이미지 (OS)
프레임워크 이미지
애플리케이션
이미지 콘텐츠
파일과 폴더
License.txt PerfLogs Program Files
Program Files (x86) Users Windows
레지스트리
HKLM HKCU
HKCR HKU
이미지 콘텐츠
파일과 폴더
mysite.html
레지스트리
inetpub
SOFTWARE/
mykey
HKLM
자동화된 이미지 빌드
Docker Build 명령과 Dockerfile
자동화된 이미지 빌드 방법
“docker build” 명령으로 실행
단계별 명령 수행 결과가 캐시됨
Docker Hub에 연동됨
Dockerfile 예제
IIS
FROM mcr.microsoft.com/windows/servercore
RUN powershell -Command Add-WindowsFeature Web-Server
웹 사이트
FROM mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019
ADD mysite.htm inetpubmysite.htm
Windows 컨테이너의 버전 선택
• 커널 구조의 차이로 도입
• Process 방식, Hyper-V 방식
• Windows 10에서 Windows
Container를 실행 시
• 클라이언트 커널 ≠ 서버 커널
• Hyper-V Isolation 필요
• 버전 간 호환성에 대하여
• https://bit.ly/2JSTo5A
Host >
Container
V
Win
Server
2016
Win 10
Creators
Update
1703
Win
Server
1803
Win 10
Fall
Creators
Update
1803
Win
Server
2019
Win 10
2018
April
Update
1809
Win
Server
2016
Process
Hyper-V
Hyper-V Hyper-V Hyper-V Hyper-V Hyper-V
Win
Server
1803
사용
불가
사용
불가
Process
Hyper-V
Hyper-V Hyper-V Hyper-V
Win
Server
2019
사용
불가
사용
불가
사용
불가
사용
불가
Process
Hyper-V
Hyper-V
Windows Container
Dockerfile 살펴보기
Demo
https://www.youtube.com/watch?v=BzNBIYRW8GQ
Windows Kubernetes
2016
4월: SIG-Windows 창설
- Apprenda, CloudBase,
TicketMaster, Docker, 화웨이
10월: Windows Server 2016
출시
12월: Kubernetes 1.5 출시
(Windows 지원 알파)
2017
Windows Server 버전 1709
출시
- 팟 내부에 여러 컨테이너
- WinCNI 및 kube-proxy
- OpenVirtualSwitch
2017
업계에서의 지원 확대
- Docker Enterprise Edition
- Red Hat OpenShift
- Tigera & Project Calico
Kubernetes 1.9 출시
(Windows 지원 베타)
2018
Windows Server 버전 1803
출시
- 개선된 스토리지, 호환성
- 베타 – iSCSI & SMB
스토리지
- 알파 – Hyper-V Pod
Kubernetes 1.10 출시
(Windows 지원 베타)
2018
런칭을 위한 준비
- 리소스 거버넌스 & 메트릭
- 테스트 강화
- 버그 수정
Kubernetes 1.11 ~ 1.13 출시
(Windows 지원 베타)
2019
Windows Server 2019 출시
- 플랫폼 완비, LTSC
상용 제품 프리뷰 예정
- AKS, Docker, 화웨이, 레드햇
Kubernetes 1.14 출시
(Windows 지원 GA)
Windows Kubernetes History
Kubernetes 1.5
• Alpha State
• Transparent
Network
• Windows Server
2016
• Outbound 불가
Kubernetes 1.9
• Beta State
• L2 Bridge
• Windows Container
Network Interface
• Windows Server
1803
Kubernetes 1.14
• General Available
• Production Grade
• Windows Server
2019
Caturnetes – Kubernetes 1.14
Windows Kubernetes is now available!
• https://cloudblogs.microsoft.com/opensource/2019/03/25/win
dows-server-containers-now-supported-kubernetes/
• https://kubernetes.io/docs/setup/windows/intro-windows-in-
kubernetes/
Windows Kubernetes를 설치하는 방법
• 쉬운 방법: Azure + AKS Engine
• 다른 방법: Rancher 2.x의 Windows 지원 활용
• 어려운 방법: Microsoft SDN Script (with Reverse Engineering)
+ Win-Bridge + IPAM + 장인정신
Bootstrapping Windows Kubernetes
Windows Server 1803
VM 또는 베어메탈 준비
1
Node를 시작하기 전에
kubelet으로 노드를
먼저 등록하여 Pod
CIDR 확보
2
HNS에 새로운 L2
Bridge HNS Network
생성, Pod Gateway
어댑터 생성 및 부착
3
Kubelet, Kubeproxy 설
정 후 기동
4
Pod 간 수동 Routing
Table 등록
5
Windows
Kubernetes의
핵심
• HCS와 HNS가 핵심
• Kubernetes 입장에서는 Docker
REST API와 통신
• Docker는 HCS와 HNS와 커뮤니
케이션 진행
• Windows의 경우 추후 CRI
(Container Runtime Interface)가
도입될 예정
Host Compute Service
커널 수준의 가상화
• 컨테이너 내부의 OS 버전과 호스트
OS 버전이 반드시 일치해야 함
• Windows 10 클라이언트 PC에서
서버 커널은 이 방식으로 호스팅이
불가하며, 오로지 Hyper-V
Isolation만 지원
Hyper-V Isolation
• 가장 많이 오해를 받는 Windows
Docker 확장 기능
• 전체가 격리된 VM은 아니기
때문에 호스트 OS 버전보다 높은
버전의 컨테이너 OS는 실행 불가
• https://bit.ly/2JSTo5A
Host Compute Service (Cont.)
https://blogs.technet.microsoft.com/virtualization/2017/01/27/introducing-the-host-compute-service-hcs/
Host Compute Service (Cont.)
• Linux 커널의 일부 컴포넌트에 대응되는 기능을 하나의 컴포넌트로 통합 제공
• Control Group, Namespace
• Layer Capabilities: Union File System + Registry
• Windows Kubernetes에 공헌할 목적으로 Microsoft가 직접 Go Lang으로 HCS Shim도 제
공함
• https://github.com/Microsoft/hcsshim
• .NET Framework 버전의 HCS 제어 프로그램 소스 코드도 제공함
• https://github.com/Microsoft/dotnet-computevirtualization
Host Network Service
• 각종 네트워크 설정 제어 가능
• https://github.com/Microsoft/SDN
• /Kubernetes/Windows/HNS.psm1
• VmCompute.dll의 HNSCall 메서드 사용
• REST API 방식으로 호출 (Method + Resource Path + JSON Payload)
• HNS를 이용하여 주로 제어하는 부분
• 네트워크: 내부 네트워크
• 엔드포인트: 컨테이너들이 사용하는 가상 어댑터
• 정책: 다른 노드 (리눅스, 윈도)에서 실행되는 Pod의 네트워크 연결 정보
Host Network Service (Cont.)
• Compartment
• Windows 내부의 VLAN과 유사한 개념
• Kubernetes에서는 Pod에 대응
• Endpoint
• Container가 Kubernetes 내의 다른 Container나 외부와 통신할 수 있게 하는 수단
• Windows Application 입장에서는 가상의 Network Interface Card로 취급됨
Host Network Service (Cont.)
Process Isolation Hyper-V Isolation
네트워킹 구성
네트워킹 구성 (Cont.)
• Microsoft SDN Git Repo의 Kubernetes 코드 샘플에 HNS 네트워크 제어 모듈이 들어있음
• HNS 네트워크 제어 모듈을 이용하여 새 L2Bridge HNS 네트워크를 생성
• L2Bridge HNS 네트워크에 현재 Worker Node를 연결하기 위하여 새 HNS Endpoint를 생성하
고 만든 네트워크에 Attach
• CNI 플러그인 설정 파일 수정
• Kubelet, Kubeproxy 시작
• 수동 라우팅 정보 추가
WinBridge Configuration (Cont.)
{
"cniVersion": "0.2.0",
"name": "<NetworkMode>",
"type": "wincni.exe", "master": "Ethernet", "capabilities": { "portMappings": true },
"ipam": {
"environment": "azure", "subnet":"<PODCIDR>", "routes": [{ "GW":"<PODGW>" }]
},
"dns" : {
"Nameservers" : [ "<KubeDNSServiceIP>" ], "Search": [ "svc.cluster.local" ]
},
"AdditionalArgs" : [{
"Name" : "EndpointPolicy", "Value" : { "Type" : "OutBoundNAT", "ExceptionList": [ "<ClusterCIDR>", "<ServerCIDR>",
"<MgmtSubnet>" ] }
},{
"Name" : "EndpointPolicy", "Value" : { "Type" : "ROUTE", "DestinationPrefix": "<ServerCIDR>", "NeedEncap" : true }
},{
"Name" : "EndpointPolicy", "Value" : { "Type" : "ROUTE", "DestinationPrefix": "<MgmtIP>/32", "NeedEncap" : true }
}
]
}
HNS 네트워크의 형식 (L2Bridge)
Kubelet에 지정하는 –pod-cidr 스위치의
CIDR 값
kube-controller-manager의 –cluster-cidr
스위치에 지정하는 CIDR 값
현재 Node 컴퓨터의 IP 주소
현재 Node 컴퓨터에 할당된 IP 주소
대역 (Subnet Mask를 CIDR로 변환)
Kubelet에 지정하는 –cluster-dns
스위치의 CIDR 값
kube-api-server의 --service-
cluster-ip-range 스위치에
지정하는 CIDR 값
HNS 네트워크 생성 시 지정한
“.2”로 끝나는 주소
AKS Engine
간편하게 Kubernetes를
배포하고 관리
안심하고 응용프로그램
확장 및 실행
Kubernetes 실행
환경에 대한 확실한
보안
컨테이너화된
애플리케이션의 개발
가속화
오픈 소스 도구 및
API로 원하는 방식으로
작업
몇 번의 클릭만으로
CI/CD 설정
AKS Engine
• Microsoft가 제공하는 Azure Kubernetes Service를 실제로 만들기 위
해 사용하는 핵심 도구
• Azure CLI를 이용하여 AKS를 만드는 것과 동일한 기능을 제공
• 과금의 경우 마스터 컨트롤러 비용까지 같이 청구됨
• 다만 실제 AKS 서비스에 도입되기 전의 시나리오를 먼저 테스트 가능
• AKS Engine은 오픈소스
• https://github.com/azure/aks-engine
AKS Engine의 동작 방식
API Model Template
AKS Engine용
Template을 GitHub
에서 다운로드
Fill Out Params
Template의
Placeholder를 실제
값으로 교체
ARM Template
AKS Engine이 ARM
Template을 생성
Deploy
Azure CLI를 이용하
여 ARM Template
을 배포
Kubernetes
Cluster
새로운 Kubernetes
Cluster 준비됨
Hybrid Kubernetes Workload
• https://github.com/Azure/aks-
engine/blob/master/examples/windows/kubernetes-
hybrid.json
• Linux Agent Pool과 Windows Agent Pool을 동시에 구축
Install AKS Engine
Demo
https://www.youtube.com/watch?v=_sV5QNP1GDE
Create and Test Hybrid
Kubernetes Cluster with AKS
Engine
Demo
https://www.youtube.com/watch?v=8CMjgxccSOM
Azure Vote Hybrid Example
• Frontend와 Backend를 동시에 사용하는 Well-formed Example
• 보통은 양쪽 모두 Linux 컨테이너를 사용합니다.
• Hybrid Workload 테스트를 위하여 Backend는 Windows용으로
이식된 Microsoft Open Tech의 Redis Container로 변경해서 테
스트합니다.
Deploy Hybrid Workload
Demo
https://www.youtube.com/watch?v=7C3ur6ll8RQ
YAML Code
• https://gist.github.com/rkttu/e30542d75b8e48d0cca1eec6eb0c
f86b
• Hybrid Workload에서 중요한 것은 Node Selector를 통한 적절
한 노드 선택.
• Windows 노드에 Linux 컨테이너를 배정하거나, 반대의 상황이
발생하면 서비스가 시작되지 못함.
Conclusion
Limitations
• 호스트 OS는 Windows Server 2019만 지원
• 컨테이너 이미지의 OS도 Windows Server 2019로 통일해야 함
• 네트워크 CNI 플러그인의 선택의 폭이 제한됨
• Kubenet, Flannel 정도가 검증된 선택지
• Calico, Open Virtual Network 등은 아직 개발 중
• 아직은 수동으로 설치해야 함 (Microsoft SDN 스크립트 참고)
• 1.15 버전에서 kubeadm 지원 추가 예정
Future
• 아직 Windows Kubernetes의 개발이 모두 완료되지 않았습니다.
• Kubernetes 1.15에서 개선될 예정인 다수의 기능들
• Docker EE에서 ContainerD로의 전환
• Hyper-V 컨테이너 정식 지원 추가
Wrap Up
• 효율적으로 설치하고 실행하는 방법을 찾으신다면 Azure AKS Engine을
사용하세요.
• Managed Kubernetes Cluster가 아니라면 Kubernetes 1.11을 제외한 나머
지 버전에서 곧바로 테스트해볼 수 있습니다.
• 조만간 Windows Kubernetes 지원이 여러분의 Managed Kubernetes
Cluster에 추가될 것입니다.
• 이제 Windows App을 Cloud Native App으로 Transform해야 할 때입니다.
Thank You
고맙습니다
謝謝
Danke
Merci
Obrigado
ありがとう
Tänan

Contenu connexe

Tendances

Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례NAVER LABS
 
Spring cloud on kubernetes
Spring cloud on kubernetesSpring cloud on kubernetes
Spring cloud on kubernetesSangSun Park
 
[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestrationNAVER D2
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호용호 최
 
[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례
[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례
[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례OpenStack Korea Community
 
Rancher Simple User Guide
Rancher Simple User GuideRancher Simple User Guide
Rancher Simple User GuideSANG WON PARK
 
Mesos + Marathon + Docker
Mesos + Marathon + DockerMesos + Marathon + Docker
Mesos + Marathon + Dockerbighouse
 
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...OpenStack Korea Community
 
Openstack zun,virtual kubelet
Openstack zun,virtual kubeletOpenstack zun,virtual kubelet
Openstack zun,virtual kubeletChanyeol yoon
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기iFunFactory Inc.
 
Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Changyeop Kim
 
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - WebinarNAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축철구 김
 
Devfair kubernetes 101
Devfair kubernetes 101Devfair kubernetes 101
Devfair kubernetes 101Daegwon Kim
 
Kubernetes에서 Windows Application 호스팅하기
Kubernetes에서 Windows Application 호스팅하기Kubernetes에서 Windows Application 호스팅하기
Kubernetes에서 Windows Application 호스팅하기정현 남
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8sHyoungjun Kim
 
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략Kris Jeong
 
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container DayAmazon Web Services Korea
 

Tendances (20)

Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
 
Spring cloud on kubernetes
Spring cloud on kubernetesSpring cloud on kubernetes
Spring cloud on kubernetes
 
[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestration
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호
 
[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례
[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례
[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례
 
Rancher Simple User Guide
Rancher Simple User GuideRancher Simple User Guide
Rancher Simple User Guide
 
Mesos + Marathon + Docker
Mesos + Marathon + DockerMesos + Marathon + Docker
Mesos + Marathon + Docker
 
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...
 
Openstack zun,virtual kubelet
Openstack zun,virtual kubeletOpenstack zun,virtual kubelet
Openstack zun,virtual kubelet
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기
 
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
 
Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기
 
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
 
GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축
 
Devfair kubernetes 101
Devfair kubernetes 101Devfair kubernetes 101
Devfair kubernetes 101
 
Kubernetes에서 Windows Application 호스팅하기
Kubernetes에서 Windows Application 호스팅하기Kubernetes에서 Windows Application 호스팅하기
Kubernetes에서 Windows Application 호스팅하기
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8s
 
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략
 
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
 

Similaire à BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축

Journey to Windows Kubernetes
Journey to Windows KubernetesJourney to Windows Kubernetes
Journey to Windows KubernetesJung Hyun Nam
 
[오픈테크넷서밋2022] 국내 PaaS(Kubernetes) Best Practice 및 DevOps 환경 구축 사례.pdf
[오픈테크넷서밋2022] 국내 PaaS(Kubernetes) Best Practice 및 DevOps 환경 구축 사례.pdf[오픈테크넷서밋2022] 국내 PaaS(Kubernetes) Best Practice 및 DevOps 환경 구축 사례.pdf
[오픈테크넷서밋2022] 국내 PaaS(Kubernetes) Best Practice 및 DevOps 환경 구축 사례.pdfOpen Source Consulting
 
Cloud market trends, what is kubernets? (Korean)
Cloud market trends, what is kubernets? (Korean)Cloud market trends, what is kubernets? (Korean)
Cloud market trends, what is kubernets? (Korean)DonghwanKim85
 
Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...
Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...
Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...Amazon Web Services Korea
 
01.WEB SYSTEM BASED ON DOCKER
01.WEB SYSTEM BASED ON DOCKER01.WEB SYSTEM BASED ON DOCKER
01.WEB SYSTEM BASED ON DOCKEROpennaru, inc.
 
AWS 관리형 서비스를 활용하여 Kubernetes 를 위한 Devops 환경 구축하기 - 김광영, AWS솔루션즈 아키텍트:: AWS S...
AWS 관리형 서비스를 활용하여 Kubernetes 를 위한 Devops 환경 구축하기 - 김광영, AWS솔루션즈 아키텍트::  AWS S...AWS 관리형 서비스를 활용하여 Kubernetes 를 위한 Devops 환경 구축하기 - 김광영, AWS솔루션즈 아키텍트::  AWS S...
AWS 관리형 서비스를 활용하여 Kubernetes 를 위한 Devops 환경 구축하기 - 김광영, AWS솔루션즈 아키텍트:: AWS S...Amazon Web Services Korea
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetesNAVER D2
 
사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...
사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...
사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...Amazon Web Services Korea
 
Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS) Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS) VMware Tanzu Korea
 
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기Hyperledger Korea User Group
 
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)Amazon Web Services Korea
 
세션3_데보션테크데이_gitopsinfra_v1.1.pdf
세션3_데보션테크데이_gitopsinfra_v1.1.pdf세션3_데보션테크데이_gitopsinfra_v1.1.pdf
세션3_데보션테크데이_gitopsinfra_v1.1.pdfJaesuk Ahn
 
[BRK30136] Windows 기반 백엔드 개발자를 위한 컨테이너 시작하기 / Introduction to Containers For ...
[BRK30136] Windows 기반 백엔드 개발자를 위한 컨테이너 시작하기 / Introduction to Containers For ...[BRK30136] Windows 기반 백엔드 개발자를 위한 컨테이너 시작하기 / Introduction to Containers For ...
[BRK30136] Windows 기반 백엔드 개발자를 위한 컨테이너 시작하기 / Introduction to Containers For ...Jung Hyun Nam
 
애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축rockplace
 
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017Amazon Web Services Korea
 
AWS Partner ConneXions Online – New Year Edition - AWS re:Invent 2020 Tech Re...
AWS Partner ConneXions Online – New Year Edition - AWS re:Invent 2020 Tech Re...AWS Partner ConneXions Online – New Year Edition - AWS re:Invent 2020 Tech Re...
AWS Partner ConneXions Online – New Year Edition - AWS re:Invent 2020 Tech Re...Amazon Web Services Korea
 
DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)완철 김
 
Toward kubernetes native data center
Toward kubernetes native data centerToward kubernetes native data center
Toward kubernetes native data center어형 이
 
Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023
Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023
Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023Ian Choi
 
명령 프롬프트, Azure CLI 2.0은 과연 코딩일까?
명령 프롬프트, Azure CLI 2.0은 과연 코딩일까?명령 프롬프트, Azure CLI 2.0은 과연 코딩일까?
명령 프롬프트, Azure CLI 2.0은 과연 코딩일까?Ian Choi
 

Similaire à BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축 (20)

Journey to Windows Kubernetes
Journey to Windows KubernetesJourney to Windows Kubernetes
Journey to Windows Kubernetes
 
[오픈테크넷서밋2022] 국내 PaaS(Kubernetes) Best Practice 및 DevOps 환경 구축 사례.pdf
[오픈테크넷서밋2022] 국내 PaaS(Kubernetes) Best Practice 및 DevOps 환경 구축 사례.pdf[오픈테크넷서밋2022] 국내 PaaS(Kubernetes) Best Practice 및 DevOps 환경 구축 사례.pdf
[오픈테크넷서밋2022] 국내 PaaS(Kubernetes) Best Practice 및 DevOps 환경 구축 사례.pdf
 
Cloud market trends, what is kubernets? (Korean)
Cloud market trends, what is kubernets? (Korean)Cloud market trends, what is kubernets? (Korean)
Cloud market trends, what is kubernets? (Korean)
 
Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...
Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...
Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...
 
01.WEB SYSTEM BASED ON DOCKER
01.WEB SYSTEM BASED ON DOCKER01.WEB SYSTEM BASED ON DOCKER
01.WEB SYSTEM BASED ON DOCKER
 
AWS 관리형 서비스를 활용하여 Kubernetes 를 위한 Devops 환경 구축하기 - 김광영, AWS솔루션즈 아키텍트:: AWS S...
AWS 관리형 서비스를 활용하여 Kubernetes 를 위한 Devops 환경 구축하기 - 김광영, AWS솔루션즈 아키텍트::  AWS S...AWS 관리형 서비스를 활용하여 Kubernetes 를 위한 Devops 환경 구축하기 - 김광영, AWS솔루션즈 아키텍트::  AWS S...
AWS 관리형 서비스를 활용하여 Kubernetes 를 위한 Devops 환경 구축하기 - 김광영, AWS솔루션즈 아키텍트:: AWS S...
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
 
사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...
사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...
사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...
 
Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS) Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS)
 
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
 
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)
 
세션3_데보션테크데이_gitopsinfra_v1.1.pdf
세션3_데보션테크데이_gitopsinfra_v1.1.pdf세션3_데보션테크데이_gitopsinfra_v1.1.pdf
세션3_데보션테크데이_gitopsinfra_v1.1.pdf
 
[BRK30136] Windows 기반 백엔드 개발자를 위한 컨테이너 시작하기 / Introduction to Containers For ...
[BRK30136] Windows 기반 백엔드 개발자를 위한 컨테이너 시작하기 / Introduction to Containers For ...[BRK30136] Windows 기반 백엔드 개발자를 위한 컨테이너 시작하기 / Introduction to Containers For ...
[BRK30136] Windows 기반 백엔드 개발자를 위한 컨테이너 시작하기 / Introduction to Containers For ...
 
애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축
 
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
 
AWS Partner ConneXions Online – New Year Edition - AWS re:Invent 2020 Tech Re...
AWS Partner ConneXions Online – New Year Edition - AWS re:Invent 2020 Tech Re...AWS Partner ConneXions Online – New Year Edition - AWS re:Invent 2020 Tech Re...
AWS Partner ConneXions Online – New Year Edition - AWS re:Invent 2020 Tech Re...
 
DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)
 
Toward kubernetes native data center
Toward kubernetes native data centerToward kubernetes native data center
Toward kubernetes native data center
 
Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023
Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023
Ship it! ⛴️ AKS에 스프링 앱 배포하기 at Microsoft x GitHub Roadshow 2023
 
명령 프롬프트, Azure CLI 2.0은 과연 코딩일까?
명령 프롬프트, Azure CLI 2.0은 과연 코딩일까?명령 프롬프트, Azure CLI 2.0은 과연 코딩일까?
명령 프롬프트, Azure CLI 2.0은 과연 코딩일까?
 

BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축

  • 1.
  • 3. 스피커 소개 남정현 (jeonghyun.nam@devsisters.com) • DEVSISTERS DevOps Engineer • 한국 Azure 사용자 그룹 운영진 • Microsoft MVP (Since 2009)
  • 4. Agenda • Real World Story • Why We Use Windows Kubernetes • Windows Container • Windows Kubernetes • AKS Engine • What’s Next
  • 5. Real World Story • 데브시스터즈에서 출시한 게임은 콘 텐츠는 물론, 기술적으로 좋은 레퍼 런스가 되고 있습니다. • 그러나 기술에 매우 도전적인 자세로 임했던 데브시스터즈 조차도 한 가지 풀기 쉽지 않은 숙제가 있었습니다.
  • 6. DEVSISTERS와 Windows Workload • DEVSISTERS에서는 게임 서버 개발과 테스트 자동화를 위하여 Kubernetes를 성공적으로 도입했습니다. • https://www.slideshare.net/seungyongoh3/ndc17-kubernetes • 하지만 Kubernetes의 Windows OS 지원은 1.5 버전이 되어서야 겨 우 시작되었습니다. • 2017년 말부터 Kuberntes 클러스터에 Windows Node 지원을 추가 하기 위한 R&D를 시작했습니다.
  • 7. DEVSISTERS와 Windows Workload (Cont.) • 2017년 하반기부터 시작된 여정을 2019년 2월에야 끝맺었습니 다. • https://github.com/kubernetes/kubernetes/issues/65163 • https://github.com/kubernetes/kubernetes/issues/66947 • 위의 이슈들을 해결할 수 있도록 도와주신 모든 분들께 다시 한 번 감사드립니다.
  • 8. 구축 목표, 과정, 성과 구축 목표 • Windows와 Linux Pod 동시 사용 • 동일 서브넷에서 서로 다른 노드 OS 구동 구축 과정 및 성과 • 2018년 여름에 한시적으로 하이브리드 클러스터 운영 • 그 과정에서 발견된 2개의 이슈를 Windows SIG 팀과 협업하여 해결 • 구축 및 운영 노하우 획득 구축 결과 • KOPS 클러스터에 Windows 노드 추가 • Windows Server 2019 대상 • MS SDN 스크립트로부 터 설치 자동화를 위한 자체 Tool 개발
  • 9. KOPS Cluster + Windows Node Example • IIS Pod • NGINX Ingress Controller • Kubernetes 1.10.3 Cluster
  • 10. Why We Use Windows Kubernetes
  • 11. 컨테이너화를 하는 이유 빠른 개발 좀 더 많은 반복 주기 클라우드 플랫폼 중립성 손쉬운 재현 환경 불변성 일관성 서비스 간의 분리 높은 가용성 대규모 테스트 지원 확장성 저렴한 비용 효율성
  • 12. 오케스트레이션의 필요성 • 그러나 컨테이너화 하는 것만으로 일이 끝나지 않습니다. • 여러 컨테이너 호스트에 효율적으로 컨테이너를 배포하고, 상황 에 따라 제어하는 기술이 필요합니다. • 이것이 컨테이너 오케스트레이션입니다. • 지금은 Kubernetes가 시장을 장악했습니다.
  • 13. 앱을 빠르고 예측 가능하게 배포 즉시 앱을 스케일 업/다운 중단 없이 새로운 기능 배포 하드웨어 사용을 필수 리소스로만 제한 Kubernetes
  • 14. Kubernetes 이식 가능 퍼블릭, 프라이빗, 하이브리드, 멀티 클라우드 확장 가능 모듈식, 플러그 가능, 훅 연결 가능, 구성 가능 자가 치유 자동 배정, 자동 재시작, 자동 복제, 자동 스케일링
  • 15. Windows에서의 문제 • Kubernetes가 좋긴 하지만 현실적인 문제가 있습니다. • Windows가 Kubernetes와 호환되지 않는다는 것!
  • 16. Windows에서의 문제 (Cont.) • 그렇다고 해서 Windows 기반 기술을 Linux 기반 기술로 대체하 는 것은 큰 리스크를 동반합니다. • 제한된 시간과 비용으로 이런 리스크는 감당할 수 없습니다. • 하지만 이제 그 격차가 줄어들고 있습니다. • 지금이 바로 여러분의 Windows Server App을 컨테이너화 할 시간입니다.
  • 19. Windows 서버 컨테이너 (Cont.) • OS 수준의 가상화이므로 하이퍼바이저 불필요 • 커널이 컨테이너 내부의 모든 프로세스를 관리 • 기본 이미지로부터 차등분만 이미지로 저장 • VM을 사용하는 것 보다 훨씬 더 조밀한 서비스 제공 가능 • 단, 동일 커널을 사용하여 발생할 수 있는 이슈가 존재 • 이것은 리눅스 기반 컨테이너에서도 동일한 이슈 • Shared Kernel 방식의 컨테이너 실행 가능 개수는 무제한
  • 20. 컨테이너 이미지 IIS 웹 사이트 기본 이미지 (OS) 프레임워크 이미지 애플리케이션 이미지 콘텐츠 파일과 폴더 License.txt PerfLogs Program Files Program Files (x86) Users Windows 레지스트리 HKLM HKCU HKCR HKU 이미지 콘텐츠 파일과 폴더 mysite.html 레지스트리 inetpub SOFTWARE/ mykey HKLM
  • 21. 자동화된 이미지 빌드 Docker Build 명령과 Dockerfile 자동화된 이미지 빌드 방법 “docker build” 명령으로 실행 단계별 명령 수행 결과가 캐시됨 Docker Hub에 연동됨 Dockerfile 예제 IIS FROM mcr.microsoft.com/windows/servercore RUN powershell -Command Add-WindowsFeature Web-Server 웹 사이트 FROM mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019 ADD mysite.htm inetpubmysite.htm
  • 22. Windows 컨테이너의 버전 선택 • 커널 구조의 차이로 도입 • Process 방식, Hyper-V 방식 • Windows 10에서 Windows Container를 실행 시 • 클라이언트 커널 ≠ 서버 커널 • Hyper-V Isolation 필요 • 버전 간 호환성에 대하여 • https://bit.ly/2JSTo5A Host > Container V Win Server 2016 Win 10 Creators Update 1703 Win Server 1803 Win 10 Fall Creators Update 1803 Win Server 2019 Win 10 2018 April Update 1809 Win Server 2016 Process Hyper-V Hyper-V Hyper-V Hyper-V Hyper-V Hyper-V Win Server 1803 사용 불가 사용 불가 Process Hyper-V Hyper-V Hyper-V Hyper-V Win Server 2019 사용 불가 사용 불가 사용 불가 사용 불가 Process Hyper-V Hyper-V
  • 25. 2016 4월: SIG-Windows 창설 - Apprenda, CloudBase, TicketMaster, Docker, 화웨이 10월: Windows Server 2016 출시 12월: Kubernetes 1.5 출시 (Windows 지원 알파) 2017 Windows Server 버전 1709 출시 - 팟 내부에 여러 컨테이너 - WinCNI 및 kube-proxy - OpenVirtualSwitch 2017 업계에서의 지원 확대 - Docker Enterprise Edition - Red Hat OpenShift - Tigera & Project Calico Kubernetes 1.9 출시 (Windows 지원 베타)
  • 26. 2018 Windows Server 버전 1803 출시 - 개선된 스토리지, 호환성 - 베타 – iSCSI & SMB 스토리지 - 알파 – Hyper-V Pod Kubernetes 1.10 출시 (Windows 지원 베타) 2018 런칭을 위한 준비 - 리소스 거버넌스 & 메트릭 - 테스트 강화 - 버그 수정 Kubernetes 1.11 ~ 1.13 출시 (Windows 지원 베타) 2019 Windows Server 2019 출시 - 플랫폼 완비, LTSC 상용 제품 프리뷰 예정 - AKS, Docker, 화웨이, 레드햇 Kubernetes 1.14 출시 (Windows 지원 GA)
  • 27. Windows Kubernetes History Kubernetes 1.5 • Alpha State • Transparent Network • Windows Server 2016 • Outbound 불가 Kubernetes 1.9 • Beta State • L2 Bridge • Windows Container Network Interface • Windows Server 1803 Kubernetes 1.14 • General Available • Production Grade • Windows Server 2019
  • 29. Windows Kubernetes is now available! • https://cloudblogs.microsoft.com/opensource/2019/03/25/win dows-server-containers-now-supported-kubernetes/ • https://kubernetes.io/docs/setup/windows/intro-windows-in- kubernetes/
  • 30. Windows Kubernetes를 설치하는 방법 • 쉬운 방법: Azure + AKS Engine • 다른 방법: Rancher 2.x의 Windows 지원 활용 • 어려운 방법: Microsoft SDN Script (with Reverse Engineering) + Win-Bridge + IPAM + 장인정신
  • 31. Bootstrapping Windows Kubernetes Windows Server 1803 VM 또는 베어메탈 준비 1 Node를 시작하기 전에 kubelet으로 노드를 먼저 등록하여 Pod CIDR 확보 2 HNS에 새로운 L2 Bridge HNS Network 생성, Pod Gateway 어댑터 생성 및 부착 3 Kubelet, Kubeproxy 설 정 후 기동 4 Pod 간 수동 Routing Table 등록 5
  • 32. Windows Kubernetes의 핵심 • HCS와 HNS가 핵심 • Kubernetes 입장에서는 Docker REST API와 통신 • Docker는 HCS와 HNS와 커뮤니 케이션 진행 • Windows의 경우 추후 CRI (Container Runtime Interface)가 도입될 예정
  • 33. Host Compute Service 커널 수준의 가상화 • 컨테이너 내부의 OS 버전과 호스트 OS 버전이 반드시 일치해야 함 • Windows 10 클라이언트 PC에서 서버 커널은 이 방식으로 호스팅이 불가하며, 오로지 Hyper-V Isolation만 지원 Hyper-V Isolation • 가장 많이 오해를 받는 Windows Docker 확장 기능 • 전체가 격리된 VM은 아니기 때문에 호스트 OS 버전보다 높은 버전의 컨테이너 OS는 실행 불가 • https://bit.ly/2JSTo5A
  • 34. Host Compute Service (Cont.) https://blogs.technet.microsoft.com/virtualization/2017/01/27/introducing-the-host-compute-service-hcs/
  • 35. Host Compute Service (Cont.) • Linux 커널의 일부 컴포넌트에 대응되는 기능을 하나의 컴포넌트로 통합 제공 • Control Group, Namespace • Layer Capabilities: Union File System + Registry • Windows Kubernetes에 공헌할 목적으로 Microsoft가 직접 Go Lang으로 HCS Shim도 제 공함 • https://github.com/Microsoft/hcsshim • .NET Framework 버전의 HCS 제어 프로그램 소스 코드도 제공함 • https://github.com/Microsoft/dotnet-computevirtualization
  • 36. Host Network Service • 각종 네트워크 설정 제어 가능 • https://github.com/Microsoft/SDN • /Kubernetes/Windows/HNS.psm1 • VmCompute.dll의 HNSCall 메서드 사용 • REST API 방식으로 호출 (Method + Resource Path + JSON Payload) • HNS를 이용하여 주로 제어하는 부분 • 네트워크: 내부 네트워크 • 엔드포인트: 컨테이너들이 사용하는 가상 어댑터 • 정책: 다른 노드 (리눅스, 윈도)에서 실행되는 Pod의 네트워크 연결 정보
  • 37. Host Network Service (Cont.) • Compartment • Windows 내부의 VLAN과 유사한 개념 • Kubernetes에서는 Pod에 대응 • Endpoint • Container가 Kubernetes 내의 다른 Container나 외부와 통신할 수 있게 하는 수단 • Windows Application 입장에서는 가상의 Network Interface Card로 취급됨
  • 38. Host Network Service (Cont.) Process Isolation Hyper-V Isolation
  • 40. 네트워킹 구성 (Cont.) • Microsoft SDN Git Repo의 Kubernetes 코드 샘플에 HNS 네트워크 제어 모듈이 들어있음 • HNS 네트워크 제어 모듈을 이용하여 새 L2Bridge HNS 네트워크를 생성 • L2Bridge HNS 네트워크에 현재 Worker Node를 연결하기 위하여 새 HNS Endpoint를 생성하 고 만든 네트워크에 Attach • CNI 플러그인 설정 파일 수정 • Kubelet, Kubeproxy 시작 • 수동 라우팅 정보 추가
  • 41. WinBridge Configuration (Cont.) { "cniVersion": "0.2.0", "name": "<NetworkMode>", "type": "wincni.exe", "master": "Ethernet", "capabilities": { "portMappings": true }, "ipam": { "environment": "azure", "subnet":"<PODCIDR>", "routes": [{ "GW":"<PODGW>" }] }, "dns" : { "Nameservers" : [ "<KubeDNSServiceIP>" ], "Search": [ "svc.cluster.local" ] }, "AdditionalArgs" : [{ "Name" : "EndpointPolicy", "Value" : { "Type" : "OutBoundNAT", "ExceptionList": [ "<ClusterCIDR>", "<ServerCIDR>", "<MgmtSubnet>" ] } },{ "Name" : "EndpointPolicy", "Value" : { "Type" : "ROUTE", "DestinationPrefix": "<ServerCIDR>", "NeedEncap" : true } },{ "Name" : "EndpointPolicy", "Value" : { "Type" : "ROUTE", "DestinationPrefix": "<MgmtIP>/32", "NeedEncap" : true } } ] } HNS 네트워크의 형식 (L2Bridge) Kubelet에 지정하는 –pod-cidr 스위치의 CIDR 값 kube-controller-manager의 –cluster-cidr 스위치에 지정하는 CIDR 값 현재 Node 컴퓨터의 IP 주소 현재 Node 컴퓨터에 할당된 IP 주소 대역 (Subnet Mask를 CIDR로 변환) Kubelet에 지정하는 –cluster-dns 스위치의 CIDR 값 kube-api-server의 --service- cluster-ip-range 스위치에 지정하는 CIDR 값 HNS 네트워크 생성 시 지정한 “.2”로 끝나는 주소
  • 43. 간편하게 Kubernetes를 배포하고 관리 안심하고 응용프로그램 확장 및 실행 Kubernetes 실행 환경에 대한 확실한 보안 컨테이너화된 애플리케이션의 개발 가속화 오픈 소스 도구 및 API로 원하는 방식으로 작업 몇 번의 클릭만으로 CI/CD 설정
  • 44. AKS Engine • Microsoft가 제공하는 Azure Kubernetes Service를 실제로 만들기 위 해 사용하는 핵심 도구 • Azure CLI를 이용하여 AKS를 만드는 것과 동일한 기능을 제공 • 과금의 경우 마스터 컨트롤러 비용까지 같이 청구됨 • 다만 실제 AKS 서비스에 도입되기 전의 시나리오를 먼저 테스트 가능 • AKS Engine은 오픈소스 • https://github.com/azure/aks-engine
  • 45. AKS Engine의 동작 방식 API Model Template AKS Engine용 Template을 GitHub 에서 다운로드 Fill Out Params Template의 Placeholder를 실제 값으로 교체 ARM Template AKS Engine이 ARM Template을 생성 Deploy Azure CLI를 이용하 여 ARM Template 을 배포 Kubernetes Cluster 새로운 Kubernetes Cluster 준비됨
  • 46. Hybrid Kubernetes Workload • https://github.com/Azure/aks- engine/blob/master/examples/windows/kubernetes- hybrid.json • Linux Agent Pool과 Windows Agent Pool을 동시에 구축
  • 48. Create and Test Hybrid Kubernetes Cluster with AKS Engine Demo https://www.youtube.com/watch?v=8CMjgxccSOM
  • 49. Azure Vote Hybrid Example • Frontend와 Backend를 동시에 사용하는 Well-formed Example • 보통은 양쪽 모두 Linux 컨테이너를 사용합니다. • Hybrid Workload 테스트를 위하여 Backend는 Windows용으로 이식된 Microsoft Open Tech의 Redis Container로 변경해서 테 스트합니다.
  • 51. YAML Code • https://gist.github.com/rkttu/e30542d75b8e48d0cca1eec6eb0c f86b • Hybrid Workload에서 중요한 것은 Node Selector를 통한 적절 한 노드 선택. • Windows 노드에 Linux 컨테이너를 배정하거나, 반대의 상황이 발생하면 서비스가 시작되지 못함.
  • 53. Limitations • 호스트 OS는 Windows Server 2019만 지원 • 컨테이너 이미지의 OS도 Windows Server 2019로 통일해야 함 • 네트워크 CNI 플러그인의 선택의 폭이 제한됨 • Kubenet, Flannel 정도가 검증된 선택지 • Calico, Open Virtual Network 등은 아직 개발 중 • 아직은 수동으로 설치해야 함 (Microsoft SDN 스크립트 참고) • 1.15 버전에서 kubeadm 지원 추가 예정
  • 54. Future • 아직 Windows Kubernetes의 개발이 모두 완료되지 않았습니다. • Kubernetes 1.15에서 개선될 예정인 다수의 기능들 • Docker EE에서 ContainerD로의 전환 • Hyper-V 컨테이너 정식 지원 추가
  • 55. Wrap Up • 효율적으로 설치하고 실행하는 방법을 찾으신다면 Azure AKS Engine을 사용하세요. • Managed Kubernetes Cluster가 아니라면 Kubernetes 1.11을 제외한 나머 지 버전에서 곧바로 테스트해볼 수 있습니다. • 조만간 Windows Kubernetes 지원이 여러분의 Managed Kubernetes Cluster에 추가될 것입니다. • 이제 Windows App을 Cloud Native App으로 Transform해야 할 때입니다.