SlideShare uma empresa Scribd logo
1 de 54
Baixar para ler offline
2019 Global Azure Bootcamp Seoul
Windows Kubernetes Deep Dive
DEVSISTERS
Korea Azure User Group
Microsoft Azure MVP
남정현
Global Azure Bootcamp |
스피커 소개
남정현 (jeonghyun.nam@devsisters.com)
• DEVSISTERS DevOps Engineer
• 한국 Azure 사용자 그룹 운영진
• Microsoft MVP (Since 2009)
Global Azure Bootcamp |
Agenda
• Real World Story
• Why We Use Windows Kubernetes
• Windows Container
• Windows Kubernetes
• AKS Engine
• What’s Next
Global Azure Bootcamp |
Real World Story
• 데브시스터즈에서 출시한 게임은 콘
텐츠는 물론, 기술적으로 좋은 레퍼런
스가 되고 있습니다.
• 그러나 기술에 매우 도전적인 자세로
임했던 데브시스터즈 조차도 한 가지
풀기 쉽지 않은 숙제가 있었습니다.
Global Azure Bootcamp |
DEVSISTERS와 Windows Workload
• DEVSISTERS에서는 게임 서버 개발과 테스트 자동화를 위하
여 Kubernetes를 성공적으로 도입했습니다.
• https://www.slideshare.net/seungyongoh3/ndc17-kubernetes
• 하지만 Kubernetes의 Windows OS 지원은 1.5 버전이 되어서
야 겨우 시작되었습니다.
• 2017년 말부터 Kuberntes 클러스터에 Windows Node 지원을
추가하기 위한 R&D를 시작했습니다.
Global Azure Bootcamp |
DEVSISTERS와 Windows Workload (Cont.)
• 2017년 하반기부터 시작된 여정을 2019년 2월에 완료했습니
다.
• https://github.com/kubernetes/kubernetes/issues/65163
• https://github.com/kubernetes/kubernetes/issues/66947
• 위의 이슈들을 해결할 수 있도록 도와주신 모든 분들께 다시
한 번 감사드립니다.
Global Azure Bootcamp |
구축 목표, 과정, 성과
구축 목표
• 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
2019 Global Azure Bootcamp Seoul
Why We Use Windows Kubernetes
컨테이너화를 하는 이유
빠른 개발 좀 더 많은
반복 주기
클라우드
플랫폼 중립성
손쉬운 재현
환경 불변성
일관성
서비스 간의
분리 높은 가용성
대규모 테스
트 지원
확장성
저렴한 비용
효율성
Global Azure Bootcamp |
오케스트레이션의 필요성
• 그러나 컨테이너화 하는 것만으로 일이 끝나지 않습니다.
• 여러 컨테이너 호스트에 효율적으로 컨테이너를 배포하고,
상황에 따라 제어하는 기술이 필요합니다.
• 이것이 컨테이너 오케스트레이션입니다.
• 지금은 Kubernetes가 시장을 장악했습니다.
앱을 빠르고 예측
가능하게 배포
즉시 앱을
스케일 업/다운
중단 없이 새로운
기능 배포
하드웨어 사용을
필수 리소스로만
제한
Kubernetes
Kubernetes
이식 가능
퍼블릭, 프라이빗,
하이브리드,
멀티 클라우드
확장 가능
모듈식, 플러그 가능,
훅 연결 가능, 구성 가능
자가 치유
자동 배정, 자동 재시작,
자동 복제, 자동 스케일링
Global Azure Bootcamp |
Windows에서의 문제
• Kubernetes가 좋긴 하지만 현실적인 문제가 있습니다.
• Windows가 Kubernetes와 호환되지 않는다는 것!
Global Azure Bootcamp |
Windows에서의 문제 (Cont.)
• 그렇다고 해서 Windows 기반 기술을 Linux 기반 기술로 대체
하는 것은 큰 리스크를 동반합니다.
• 제한된 시간과 비용으로 이런 리스크는 감당할 수 없습니다.
• 하지만 이제 그 격차가 줄어들고 있습니다.
• 지금이 바로 여러분의 Windows Server App을 컨테이너화 할
시간입니다.
2019 Global Azure Bootcamp Seoul
Windows Container
Host User Mode
Container
Management
System
Processes
Application
Process(es)
System
Processes
Windows 서버 컨테이너
Global Azure Bootcamp |
Windows 서버 컨테이너 (Cont.)
• OS 수준의 가상화이므로 하이퍼바이저 불필요
• 커널이 컨테이너 내부의 모든 프로세스를 관리
• 기본 이미지로부터 차등분만 이미지로 저장
• VM을 사용하는 것 보다 훨씬 더 조밀한 서비스 제공 가능
• 단, 동일 커널을 사용하여 발생할 수 있는 이슈가 존재
• 이것은 리눅스 기반 컨테이너에서도 동일한 이슈
• Shared Kernel 방식의 컨테이너 실행 가능 개수는 무제한
Global Azure Bootcamp |
컨테이너 이미지
IIS
웹 사이트
기본 이미지 (OS)
프레임워크 이미지
애플리케이션
이미지 콘텐츠
파일과 폴더
License.txt PerfLogs Program Files
Program Files (x86) Users Windows
레지스트리
HKLM HKCU
HKCR HKU
이미지 콘텐츠
파일과 폴더
mysite.html
레지스트리
inetpub
SOFTWARE/
mykey
HKLM
Global Azure Bootcamp |
자동화된 이미지 빌드
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
2019 Global Azure Bootcamp Seoul
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 지원 베타)
Windows Kubernetes 개발 히스토리
Windows Kubernetes 개발 히스토리
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)
Global Azure Bootcamp |
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
Global Azure Bootcamp |
Linux Kubernetes와의 차이점
• HCS, HNS를 지원하는 컨테이너 런타임이 필요
• ContainerD 출시 전까지는 Windows Server용 Docker Enterprise
Edition을 기반으로 함
• Kube-Proxy가 컨테이너가 아닌 별도 바이너리로 Kubelet과
같은 위치에서 실행되어야 함
• Kube-Proxy를 별도의 NT 서비스로 실행해야 하고, Kubelet 시작 후
별도 실행이 필요함
Global Azure Bootcamp |
Windows Kubernetes를 설치하는 방법
• 쉬운 방법: Azure + AKS Engine
• 다른 방법: Rancher 2.x의 Windows 지원 활용
• 어려운 방법: Microsoft SDN Script (with Reverse Engineering) +
Win-Bridge + IPAM + 장인정신
• 만약 Kubernetes의 동작 원리를 체험하고 직접 살펴보기 원
한다면 Kubernetes the Hard Way 시리즈를 찾아보세요.
Global Azure Bootcamp |
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
Global Azure Bootcamp |
Windows
Kubernetes의
핵심
• HCS와 HNS가 핵심
• Kubernetes 입장에서는
Docker REST API와 통신
• Docker는 HCS와 HNS와 커뮤
니케이션 진행
• Windows의 경우 추후 CRI
(Container Runtime Interface)
가 도입될 예정
Global Azure Bootcamp |
Host Compute Service
커널 수준의 가상화
• 컨테이너 내부의 OS 버전과 호스트 OS
버전이 반드시 일치해야 함
• 서버가 Insider 빌드면 컨테이너 이미지도
Insider 빌드이면서 빌드 번호 일치 필수
• Windows 10 클라이언트 PC에서 서버
커널은 이 방식으로 호스팅이 불가하며,
오로지 Hyper-V Isolation만 지원
Hyper-V Isolation
• 이름만 Hyper-V를 차용하고 가상화 기술을
응용했을 뿐 VM이 아님
• 호스트 OS 버전보다 높은 버전의 컨테이너
OS는 실행 불가
• https://bit.ly/2JSTo5A
Global Azure Bootcamp |
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
Global Azure Bootcamp |
Host Network Service
• 각종 네트워크 설정 제어 가능
• https://github.com/Microsoft/SDN
• /Kubernetes/Windows/HNS.psm1
• VmCompute.dll의 HNSCall 메서드 사용
• REST API 방식으로 호출 (Method + Resource Path + JSON Payload)
• HNS를 이용하여 주로 제어하는 부분
• 네트워크: 내부 네트워크
• 엔드포인트: 컨테이너들이 사용하는 가상 어댑터
• 정책: 다른 노드 (리눅스, 윈도)에서 실행되는 Pod의 네트워크 연결 정보
Global Azure Bootcamp |
Host Network Service (Cont.)
• Compartment
• Windows 내부의 VLAN과 유사한 개념
• Kubernetes에서는 Pod에 대응
• Endpoint
• Container가 Kubernetes 내의 다른 Container나 외부와 통신할 수 있
게 하는 수단
• Windows Application 입장에서는 가상의 Network Interface Card로
취급됨
Global Azure Bootcamp |
Pod Endpoint
Pod ==
Compartment
Linux와는 달리 별도의 NT 서비스로 구성 필수
Master에서 할당
Container
Node의 기본 IP 주소
Node의 기본 NIC
Linux Kubernetes의 cbr0과 동일
CIDR 대역의 첫 IP 주소
[중요] Pod IP 대역의 패
킷을 어디로 전달할지
라우팅 테이블을 지정해
야 함
Global Azure Bootcamp |
네트워킹 구성 방법
• Microsoft SDN Git Repo의 Kubernetes 코드 샘플에 HNS 네트워크 제어 모듈이 들
어있음
• HNS 네트워크 제어 모듈을 이용하여 새 L2Bridge HNS 네트워크를 생성
• L2Bridge HNS 네트워크에 현재 Worker Node를 연결하기 위하여 새 HNS
Endpoint를 생성하고 만든 네트워크에 Attach
• CNI 플러그인 설정 파일 수정
• Kubelet, Kubeproxy 시작
• 수동 라우팅 정보 추가
Global Azure Bootcamp |
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”
로 끝나는 주소
2019 Global Azure Bootcamp Seoul
AKS Engine
Global Azure Bootcamp |
AKS Engine
• Microsoft가 제공하는 Azure Kubernetes Service를 실제로 만
들기 위해 사용하는 핵심 도구
• Azure CLI를 이용하여 AKS를 만드는 것과 동일한 기능을 제공
• 과금의 경우 마스터 컨트롤러 비용까지 같이 청구됨
• 다만 실제 AKS 서비스에 도입되기 전의 시나리오를 먼저 테스트
가능
• AKS Engine은 오픈소스
• https://github.com/azure/aks-engine
Global Azure Bootcamp |
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 준비됨
Global Azure Bootcamp |
Hybrid Kubernetes Workload
• https://github.com/Azure/aks-
engine/blob/master/examples/windows/kubernetes-
hybrid.json
• Linux Agent Pool과 Windows Agent Pool을 동시에 구축
2019 Global Azure Bootcamp Seoul
Install AKS Engine
Demo
2019 Global Azure Bootcamp Seoul
Create and Test Hybrid Kubernetes
Cluster with AKS Engine
Demo
Global Azure Bootcamp |
Azure Vote Hybrid Example
• Frontend와 Backend를 동시에 사용하는 Well-formed Example
• 보통은 양쪽 모두 Linux 컨테이너를 사용합니다.
• Hybrid Workload 테스트를 위하여 Backend는 Windows용으로
이식된 Microsoft Open Tech의 Redis Container로 변경해서 테
스트합니다.
2019 Global Azure Bootcamp Seoul
Deploy Hybrid Workload
Demo
Global Azure Bootcamp |
YAML Code
• https://gist.github.com/rkttu/e30542d75b8e48d0cca1eec6eb0c
f86b
• Hybrid Workload에서 중요한 것은 Node Selector를 통한 적절
한 노드 선택.
• Windows 노드에 Linux 컨테이너를 배정하거나, 반대의 상황
이 발생하면 서비스가 시작되지 못함.
2019 Global Azure Bootcamp Seoul
Conclusion
Global Azure Bootcamp |
Limitations
• 호스트 OS는 Windows Server 2019만 지원
• 컨테이너 이미지의 OS도 Windows Server 2019로 통일해야 함
• 네트워크 CNI 플러그인의 선택의 폭이 제한됨
• Kubenet, Flannel 정도가 검증된 선택지
• Calico, Open Virtual Network 등은 아직 개발 중
• 아직은 수동으로 설치해야 함 (Microsoft SDN 스크립트 참고)
• 1.15 버전에서 kubeadm 지원 추가 예정
• 그 외에 검토할 부분들이 있음
• https://kubernetes.io/docs/setup/windows/#limitations
Global Azure Bootcamp |
Future
• 아직 Windows Kubernetes의 개발이 진행 중
• Kubernetes 1.15에서 개선될 예정인 다수의 기능들
• Docker EE에서 ContainerD로의 전환
• Hyper-V 컨테이너 정식 지원 추가
Global Azure Bootcamp |
Wrap Up
• 효율적으로 설치하고 실행하는 방법을 찾으신다면 Azure
AKS Engine을 사용하세요.
• Managed Kubernetes Cluster가 아니라면 Kubernetes 1.11을
제외한 나머지 버전에서 곧바로 테스트해볼 수 있습니다.
• 조만간 Windows Kubernetes 지원이 여러분의 Managed
Kubernetes Cluster에 추가될 것입니다.
• 이제 Windows App을 Cloud Native App으로 Transform해야 할
때입니다.
KoreaAzureUserGroup
fb.com/groups/krazure

Mais conteúdo relacionado

Mais procurados

Spring cloud on kubernetes
Spring cloud on kubernetesSpring cloud on kubernetes
Spring cloud on kubernetesSangSun Park
 
Kubernetes & Istio in Multi-Cloud
Kubernetes & Istio in Multi-Cloud Kubernetes & Istio in Multi-Cloud
Kubernetes & Istio in Multi-Cloud Sangwon Seo
 
클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기iFunFactory Inc.
 
[OpenInfra Days Korea 2018] (Track 1) From OpenStack to cloud native
[OpenInfra Days Korea 2018] (Track 1) From OpenStack to cloud native[OpenInfra Days Korea 2018] (Track 1) From OpenStack to cloud native
[OpenInfra Days Korea 2018] (Track 1) From OpenStack to cloud nativeOpenStack Korea Community
 
Kubernetes on Premise Practical Guide
Kubernetes on Premise Practical GuideKubernetes on Premise Practical Guide
Kubernetes on Premise Practical GuideChan Shik Lim
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8sHyoungjun Kim
 
[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
 
Cloud for Kubernetes : Session1
Cloud for Kubernetes : Session1Cloud for Kubernetes : Session1
Cloud for Kubernetes : Session1WhaTap Labs
 
[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestrationNAVER D2
 
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on KubernetesOpenStack Korea Community
 
[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for Beginner
[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for Beginner[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for Beginner
[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for BeginnerOpenStack Korea Community
 
[OpenInfra Days Korea 2018] (Track 4) - FreeIPA와 함께 SSO 구성
[OpenInfra Days Korea 2018] (Track 4) - FreeIPA와 함께 SSO 구성[OpenInfra Days Korea 2018] (Track 4) - FreeIPA와 함께 SSO 구성
[OpenInfra Days Korea 2018] (Track 4) - FreeIPA와 함께 SSO 구성OpenStack Korea Community
 
EKS workshop 살펴보기
EKS workshop 살펴보기EKS workshop 살펴보기
EKS workshop 살펴보기Jinwoong Kim
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호용호 최
 
GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축철구 김
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container DayAmazon Web Services Korea
 
JBoss EAP on Azure Workshop
JBoss EAP on Azure Workshop JBoss EAP on Azure Workshop
JBoss EAP on Azure Workshop rockplace
 
Kubernetes에서 Windows Application 호스팅하기
Kubernetes에서 Windows Application 호스팅하기Kubernetes에서 Windows Application 호스팅하기
Kubernetes에서 Windows Application 호스팅하기정현 남
 
셸 스크립트를 이용한 클라우드 시스템 운영
셸 스크립트를 이용한 클라우드 시스템 운영셸 스크립트를 이용한 클라우드 시스템 운영
셸 스크립트를 이용한 클라우드 시스템 운영Nalee Jang
 

Mais procurados (20)

Spring cloud on kubernetes
Spring cloud on kubernetesSpring cloud on kubernetes
Spring cloud on kubernetes
 
Kubernetes & Istio in Multi-Cloud
Kubernetes & Istio in Multi-Cloud Kubernetes & Istio in Multi-Cloud
Kubernetes & Istio in Multi-Cloud
 
클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기
 
[OpenInfra Days Korea 2018] (Track 1) From OpenStack to cloud native
[OpenInfra Days Korea 2018] (Track 1) From OpenStack to cloud native[OpenInfra Days Korea 2018] (Track 1) From OpenStack to cloud native
[OpenInfra Days Korea 2018] (Track 1) From OpenStack to cloud native
 
Kubernetes on Premise Practical Guide
Kubernetes on Premise Practical GuideKubernetes on Premise Practical Guide
Kubernetes on Premise Practical Guide
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8s
 
[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 ...
 
Cloud for Kubernetes : Session1
Cloud for Kubernetes : Session1Cloud for Kubernetes : Session1
Cloud for Kubernetes : Session1
 
[221] docker orchestration
[221] docker orchestration[221] docker orchestration
[221] docker orchestration
 
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
[OpenInfra Days Korea 2018] Day 2 - E5: GPU on Kubernetes
 
[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for Beginner
[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for Beginner[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for Beginner
[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for Beginner
 
[OpenInfra Days Korea 2018] (Track 4) - FreeIPA와 함께 SSO 구성
[OpenInfra Days Korea 2018] (Track 4) - FreeIPA와 함께 SSO 구성[OpenInfra Days Korea 2018] (Track 4) - FreeIPA와 함께 SSO 구성
[OpenInfra Days Korea 2018] (Track 4) - FreeIPA와 함께 SSO 구성
 
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
 
EKS workshop 살펴보기
EKS workshop 살펴보기EKS workshop 살펴보기
EKS workshop 살펴보기
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호
 
GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
 
JBoss EAP on Azure Workshop
JBoss EAP on Azure Workshop JBoss EAP on Azure Workshop
JBoss EAP on Azure Workshop
 
Kubernetes에서 Windows Application 호스팅하기
Kubernetes에서 Windows Application 호스팅하기Kubernetes에서 Windows Application 호스팅하기
Kubernetes에서 Windows Application 호스팅하기
 
셸 스크립트를 이용한 클라우드 시스템 운영
셸 스크립트를 이용한 클라우드 시스템 운영셸 스크립트를 이용한 클라우드 시스템 운영
셸 스크립트를 이용한 클라우드 시스템 운영
 

Semelhante a Windows Kubernetes Deep Dive

세션3_데보션테크데이_gitopsinfra_v1.1.pdf
세션3_데보션테크데이_gitopsinfra_v1.1.pdf세션3_데보션테크데이_gitopsinfra_v1.1.pdf
세션3_데보션테크데이_gitopsinfra_v1.1.pdfJaesuk Ahn
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
Journey to Windows Kubernetes
Journey to Windows KubernetesJourney to Windows Kubernetes
Journey to Windows KubernetesJung Hyun Nam
 
[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
 
[오픈테크넷서밋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
 
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
 
Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현Jinwoong Kim
 
명령 프롬프트, Azure CLI 2.0은 과연 코딩일까?
명령 프롬프트, Azure CLI 2.0은 과연 코딩일까?명령 프롬프트, Azure CLI 2.0은 과연 코딩일까?
명령 프롬프트, Azure CLI 2.0은 과연 코딩일까?Ian Choi
 
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
 
사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...
사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...
사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...Amazon Web Services Korea
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트Chanwoong Kim
 
Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS) Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS) VMware Tanzu Korea
 
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례NAVER LABS
 
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)Amazon Web Services Korea
 
DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)완철 김
 
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기Amazon Web Services Korea
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AIJoongi Kim
 
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
 
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기Hyperledger Korea User Group
 

Semelhante a Windows Kubernetes Deep Dive (20)

세션3_데보션테크데이_gitopsinfra_v1.1.pdf
세션3_데보션테크데이_gitopsinfra_v1.1.pdf세션3_데보션테크데이_gitopsinfra_v1.1.pdf
세션3_데보션테크데이_gitopsinfra_v1.1.pdf
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
Journey to Windows Kubernetes
Journey to Windows KubernetesJourney to Windows Kubernetes
Journey to Windows 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
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker 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
 
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...
 
Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현
 
명령 프롬프트, Azure CLI 2.0은 과연 코딩일까?
명령 프롬프트, Azure CLI 2.0은 과연 코딩일까?명령 프롬프트, Azure CLI 2.0은 과연 코딩일까?
명령 프롬프트, Azure CLI 2.0은 과연 코딩일까?
 
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)
 
사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...
사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...
사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS) Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS)
 
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
 
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)
10월 웨비나 - AWS에서 MS Windows 운영, 관리 및 개발 손쉽게 하기 (박철수 솔루션즈 아키텍트)
 
DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)
 
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AI
 
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
 
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
 

Windows Kubernetes Deep Dive

  • 1. 2019 Global Azure Bootcamp Seoul Windows Kubernetes Deep Dive DEVSISTERS Korea Azure User Group Microsoft Azure MVP 남정현
  • 2. Global Azure Bootcamp | 스피커 소개 남정현 (jeonghyun.nam@devsisters.com) • DEVSISTERS DevOps Engineer • 한국 Azure 사용자 그룹 운영진 • Microsoft MVP (Since 2009)
  • 3. Global Azure Bootcamp | Agenda • Real World Story • Why We Use Windows Kubernetes • Windows Container • Windows Kubernetes • AKS Engine • What’s Next
  • 4. Global Azure Bootcamp | Real World Story • 데브시스터즈에서 출시한 게임은 콘 텐츠는 물론, 기술적으로 좋은 레퍼런 스가 되고 있습니다. • 그러나 기술에 매우 도전적인 자세로 임했던 데브시스터즈 조차도 한 가지 풀기 쉽지 않은 숙제가 있었습니다.
  • 5. Global Azure Bootcamp | DEVSISTERS와 Windows Workload • DEVSISTERS에서는 게임 서버 개발과 테스트 자동화를 위하 여 Kubernetes를 성공적으로 도입했습니다. • https://www.slideshare.net/seungyongoh3/ndc17-kubernetes • 하지만 Kubernetes의 Windows OS 지원은 1.5 버전이 되어서 야 겨우 시작되었습니다. • 2017년 말부터 Kuberntes 클러스터에 Windows Node 지원을 추가하기 위한 R&D를 시작했습니다.
  • 6. Global Azure Bootcamp | DEVSISTERS와 Windows Workload (Cont.) • 2017년 하반기부터 시작된 여정을 2019년 2월에 완료했습니 다. • https://github.com/kubernetes/kubernetes/issues/65163 • https://github.com/kubernetes/kubernetes/issues/66947 • 위의 이슈들을 해결할 수 있도록 도와주신 모든 분들께 다시 한 번 감사드립니다.
  • 7. Global Azure Bootcamp | 구축 목표, 과정, 성과 구축 목표 • Windows와 Linux Pod 동시 사용 • 동일 서브넷에서 서로 다른 노드 OS 구동 구축 과정 및 성과 • 2018년 여름에 한시적으로 하이브리드 클러스터 운영 • 그 과정에서 발견된 2개의 이슈를 Windows SIG 팀과 협업하여 해결 • 구축 및 운영 노하우 획득 구축 결과 • KOPS 클러스터에 Windows 노드 추가 • Windows Server 2019 대상 • MS SDN 스크립트로부터 설치 자동화를 위한 자체 Tool 개발
  • 8. KOPS Cluster + Windows Node Example • IIS Pod • NGINX Ingress Controller • Kubernetes 1.10.3 Cluster
  • 9. 2019 Global Azure Bootcamp Seoul Why We Use Windows Kubernetes
  • 10. 컨테이너화를 하는 이유 빠른 개발 좀 더 많은 반복 주기 클라우드 플랫폼 중립성 손쉬운 재현 환경 불변성 일관성 서비스 간의 분리 높은 가용성 대규모 테스 트 지원 확장성 저렴한 비용 효율성
  • 11. Global Azure Bootcamp | 오케스트레이션의 필요성 • 그러나 컨테이너화 하는 것만으로 일이 끝나지 않습니다. • 여러 컨테이너 호스트에 효율적으로 컨테이너를 배포하고, 상황에 따라 제어하는 기술이 필요합니다. • 이것이 컨테이너 오케스트레이션입니다. • 지금은 Kubernetes가 시장을 장악했습니다.
  • 12. 앱을 빠르고 예측 가능하게 배포 즉시 앱을 스케일 업/다운 중단 없이 새로운 기능 배포 하드웨어 사용을 필수 리소스로만 제한 Kubernetes
  • 13. Kubernetes 이식 가능 퍼블릭, 프라이빗, 하이브리드, 멀티 클라우드 확장 가능 모듈식, 플러그 가능, 훅 연결 가능, 구성 가능 자가 치유 자동 배정, 자동 재시작, 자동 복제, 자동 스케일링
  • 14. Global Azure Bootcamp | Windows에서의 문제 • Kubernetes가 좋긴 하지만 현실적인 문제가 있습니다. • Windows가 Kubernetes와 호환되지 않는다는 것!
  • 15. Global Azure Bootcamp | Windows에서의 문제 (Cont.) • 그렇다고 해서 Windows 기반 기술을 Linux 기반 기술로 대체 하는 것은 큰 리스크를 동반합니다. • 제한된 시간과 비용으로 이런 리스크는 감당할 수 없습니다. • 하지만 이제 그 격차가 줄어들고 있습니다. • 지금이 바로 여러분의 Windows Server App을 컨테이너화 할 시간입니다.
  • 16. 2019 Global Azure Bootcamp Seoul Windows Container
  • 18. Global Azure Bootcamp | Windows 서버 컨테이너 (Cont.) • OS 수준의 가상화이므로 하이퍼바이저 불필요 • 커널이 컨테이너 내부의 모든 프로세스를 관리 • 기본 이미지로부터 차등분만 이미지로 저장 • VM을 사용하는 것 보다 훨씬 더 조밀한 서비스 제공 가능 • 단, 동일 커널을 사용하여 발생할 수 있는 이슈가 존재 • 이것은 리눅스 기반 컨테이너에서도 동일한 이슈 • Shared Kernel 방식의 컨테이너 실행 가능 개수는 무제한
  • 19. Global Azure Bootcamp | 컨테이너 이미지 IIS 웹 사이트 기본 이미지 (OS) 프레임워크 이미지 애플리케이션 이미지 콘텐츠 파일과 폴더 License.txt PerfLogs Program Files Program Files (x86) Users Windows 레지스트리 HKLM HKCU HKCR HKU 이미지 콘텐츠 파일과 폴더 mysite.html 레지스트리 inetpub SOFTWARE/ mykey HKLM
  • 20. Global Azure Bootcamp | 자동화된 이미지 빌드 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
  • 21. 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
  • 22. 2019 Global Azure Bootcamp Seoul Windows Kubernetes
  • 23. 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 지원 베타) Windows Kubernetes 개발 히스토리
  • 24. Windows Kubernetes 개발 히스토리 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)
  • 25. Global Azure Bootcamp | 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
  • 26. Global Azure Bootcamp | Linux Kubernetes와의 차이점 • HCS, HNS를 지원하는 컨테이너 런타임이 필요 • ContainerD 출시 전까지는 Windows Server용 Docker Enterprise Edition을 기반으로 함 • Kube-Proxy가 컨테이너가 아닌 별도 바이너리로 Kubelet과 같은 위치에서 실행되어야 함 • Kube-Proxy를 별도의 NT 서비스로 실행해야 하고, Kubelet 시작 후 별도 실행이 필요함
  • 27. Global Azure Bootcamp | Windows Kubernetes를 설치하는 방법 • 쉬운 방법: Azure + AKS Engine • 다른 방법: Rancher 2.x의 Windows 지원 활용 • 어려운 방법: Microsoft SDN Script (with Reverse Engineering) + Win-Bridge + IPAM + 장인정신 • 만약 Kubernetes의 동작 원리를 체험하고 직접 살펴보기 원 한다면 Kubernetes the Hard Way 시리즈를 찾아보세요.
  • 28. Global Azure Bootcamp | 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
  • 29. Global Azure Bootcamp | Windows Kubernetes의 핵심 • HCS와 HNS가 핵심 • Kubernetes 입장에서는 Docker REST API와 통신 • Docker는 HCS와 HNS와 커뮤 니케이션 진행 • Windows의 경우 추후 CRI (Container Runtime Interface) 가 도입될 예정
  • 30. Global Azure Bootcamp | Host Compute Service 커널 수준의 가상화 • 컨테이너 내부의 OS 버전과 호스트 OS 버전이 반드시 일치해야 함 • 서버가 Insider 빌드면 컨테이너 이미지도 Insider 빌드이면서 빌드 번호 일치 필수 • Windows 10 클라이언트 PC에서 서버 커널은 이 방식으로 호스팅이 불가하며, 오로지 Hyper-V Isolation만 지원 Hyper-V Isolation • 이름만 Hyper-V를 차용하고 가상화 기술을 응용했을 뿐 VM이 아님 • 호스트 OS 버전보다 높은 버전의 컨테이너 OS는 실행 불가 • https://bit.ly/2JSTo5A
  • 31. Global Azure Bootcamp | 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
  • 32. Global Azure Bootcamp | Host Network Service • 각종 네트워크 설정 제어 가능 • https://github.com/Microsoft/SDN • /Kubernetes/Windows/HNS.psm1 • VmCompute.dll의 HNSCall 메서드 사용 • REST API 방식으로 호출 (Method + Resource Path + JSON Payload) • HNS를 이용하여 주로 제어하는 부분 • 네트워크: 내부 네트워크 • 엔드포인트: 컨테이너들이 사용하는 가상 어댑터 • 정책: 다른 노드 (리눅스, 윈도)에서 실행되는 Pod의 네트워크 연결 정보
  • 33. Global Azure Bootcamp | Host Network Service (Cont.) • Compartment • Windows 내부의 VLAN과 유사한 개념 • Kubernetes에서는 Pod에 대응 • Endpoint • Container가 Kubernetes 내의 다른 Container나 외부와 통신할 수 있 게 하는 수단 • Windows Application 입장에서는 가상의 Network Interface Card로 취급됨
  • 34.
  • 35. Global Azure Bootcamp | Pod Endpoint Pod == Compartment Linux와는 달리 별도의 NT 서비스로 구성 필수 Master에서 할당 Container Node의 기본 IP 주소 Node의 기본 NIC Linux Kubernetes의 cbr0과 동일 CIDR 대역의 첫 IP 주소 [중요] Pod IP 대역의 패 킷을 어디로 전달할지 라우팅 테이블을 지정해 야 함
  • 36. Global Azure Bootcamp | 네트워킹 구성 방법 • Microsoft SDN Git Repo의 Kubernetes 코드 샘플에 HNS 네트워크 제어 모듈이 들 어있음 • HNS 네트워크 제어 모듈을 이용하여 새 L2Bridge HNS 네트워크를 생성 • L2Bridge HNS 네트워크에 현재 Worker Node를 연결하기 위하여 새 HNS Endpoint를 생성하고 만든 네트워크에 Attach • CNI 플러그인 설정 파일 수정 • Kubelet, Kubeproxy 시작 • 수동 라우팅 정보 추가
  • 37. Global Azure Bootcamp | 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” 로 끝나는 주소
  • 38. 2019 Global Azure Bootcamp Seoul AKS Engine
  • 39. Global Azure Bootcamp | AKS Engine • Microsoft가 제공하는 Azure Kubernetes Service를 실제로 만 들기 위해 사용하는 핵심 도구 • Azure CLI를 이용하여 AKS를 만드는 것과 동일한 기능을 제공 • 과금의 경우 마스터 컨트롤러 비용까지 같이 청구됨 • 다만 실제 AKS 서비스에 도입되기 전의 시나리오를 먼저 테스트 가능 • AKS Engine은 오픈소스 • https://github.com/azure/aks-engine
  • 40. Global Azure Bootcamp | 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 준비됨
  • 41. Global Azure Bootcamp | Hybrid Kubernetes Workload • https://github.com/Azure/aks- engine/blob/master/examples/windows/kubernetes- hybrid.json • Linux Agent Pool과 Windows Agent Pool을 동시에 구축
  • 42. 2019 Global Azure Bootcamp Seoul Install AKS Engine Demo
  • 43.
  • 44. 2019 Global Azure Bootcamp Seoul Create and Test Hybrid Kubernetes Cluster with AKS Engine Demo
  • 45.
  • 46. Global Azure Bootcamp | Azure Vote Hybrid Example • Frontend와 Backend를 동시에 사용하는 Well-formed Example • 보통은 양쪽 모두 Linux 컨테이너를 사용합니다. • Hybrid Workload 테스트를 위하여 Backend는 Windows용으로 이식된 Microsoft Open Tech의 Redis Container로 변경해서 테 스트합니다.
  • 47. 2019 Global Azure Bootcamp Seoul Deploy Hybrid Workload Demo
  • 48.
  • 49. Global Azure Bootcamp | YAML Code • https://gist.github.com/rkttu/e30542d75b8e48d0cca1eec6eb0c f86b • Hybrid Workload에서 중요한 것은 Node Selector를 통한 적절 한 노드 선택. • Windows 노드에 Linux 컨테이너를 배정하거나, 반대의 상황 이 발생하면 서비스가 시작되지 못함.
  • 50. 2019 Global Azure Bootcamp Seoul Conclusion
  • 51. Global Azure Bootcamp | Limitations • 호스트 OS는 Windows Server 2019만 지원 • 컨테이너 이미지의 OS도 Windows Server 2019로 통일해야 함 • 네트워크 CNI 플러그인의 선택의 폭이 제한됨 • Kubenet, Flannel 정도가 검증된 선택지 • Calico, Open Virtual Network 등은 아직 개발 중 • 아직은 수동으로 설치해야 함 (Microsoft SDN 스크립트 참고) • 1.15 버전에서 kubeadm 지원 추가 예정 • 그 외에 검토할 부분들이 있음 • https://kubernetes.io/docs/setup/windows/#limitations
  • 52. Global Azure Bootcamp | Future • 아직 Windows Kubernetes의 개발이 진행 중 • Kubernetes 1.15에서 개선될 예정인 다수의 기능들 • Docker EE에서 ContainerD로의 전환 • Hyper-V 컨테이너 정식 지원 추가
  • 53. Global Azure Bootcamp | Wrap Up • 효율적으로 설치하고 실행하는 방법을 찾으신다면 Azure AKS Engine을 사용하세요. • Managed Kubernetes Cluster가 아니라면 Kubernetes 1.11을 제외한 나머지 버전에서 곧바로 테스트해볼 수 있습니다. • 조만간 Windows Kubernetes 지원이 여러분의 Managed Kubernetes Cluster에 추가될 것입니다. • 이제 Windows App을 Cloud Native App으로 Transform해야 할 때입니다.