SlideShare a Scribd company logo
1 of 29
Download to read offline
Journey to
Windows Kubernetes
Korea Azure User Group
DEVSISTERS
남정현
Agenda
• Case Studies: DEVSISTERS
• Windows Container에 대한 이해
• Windows Kubernetes에 대하여
• HCS, HNS에 대한 이해
• Rancher로 Azure에 Hybrid Cluster 만들기
• 약간의 추가 정보
DEVSISTERS의 사례
리눅스 워크로드와 윈도 워크로드를 하나의 클러스터에서!
Kubernetes의 고가용성 전략을 Windows에서 그대로 사용
Windows의 고성능 I/O Completion Port을 레버리징
기존 VC++ 기반 서버들을 클러스터 환경으로 손쉽게 확장
DEVSISTERS의 사례 (Cont.)
하이브리드 K8S
클러스터 구축
• Windows와 Linux
Pod이 공존하는
Hybrid Cluster
쿠키워즈 개발/QA
환경 PoC 수행
• 게임 서버: 리눅스
• 운영 도구: 윈도
서버 1803
• 클러스터 구축:
KOPS + AWS
두 번의 PoC 수행
• 초기 – Windows
Server 2016 AMI +
Transparent
Network
• 현재 – Windows
Server 1803 AMI +
L2 Bridge +
WINCNI
향후 계획
• 개발/테스트 과정
중에 Windows
컨테이너를 사용할
수 있게 함
• 프로덕션 환경에
이르기까지
Windows
컨테이너로 자동화
Windows Kubernetes
• 일반적인 Kubernetes와 다르지 않음
• Kubernetes의 고가용성 전략을 Windows에서 그대로 사용
• Windows 만의 장점인 고성능 I/O Completion Port 지원
• 기존의 Legacy Application을 클러스터 환경으로 손쉽게 확장
Kubernetes Windows SIG
• https://github.com/kubernetes/community/tree/master/sig-windows
• Windows 버전의 Kubernetes 개발을 직접 진행하는 팀
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 1709
이상 필요 (Azure,
AWS에서 사용 가능)
Kubernetes 1.13
• Windows Server 2019
지원
• 테스팅 인프라 강화
Road to Production
NT Service로 등록 지원
Hyper-V Isolation 컨테이너 지원
Flannel, Calico 등의 네트워크 플러그인 지원
1.10
SMB/CIFS 볼륨 플러그인 지원
Dashboard를 통한 명령어 실행 문제 수정
1.11
E2E 테스트를 통한 품질 보장
불필요한 오류 메시지 제거
1.12
E2E 테스트 보강
Windows Server 1803 지원
Windows Server 2019 지원
1.13
Windows Kubernetes 설치 과정
Windows Server 1803
VM, Windows Server
2019 VM 또는 베어메탈
준비
1
Node를 시작하기 전에
kubelet으로 노드를
먼저 등록하여 Pod CIDR
확보
2
HNS에 새로운 L2 Bridge
HNS Network 생성, Pod
Gateway 어댑터 생성 및
부착
3
Kubelet, Kubeproxy 설
정 후 기동
4
Pod 간 수동 Routing
Table 등록
5
Windows 컨테이너의 버전 선택
동일 버전: Process 또는 Hyper-V
Isolation
호스트 OS 버전이 컨테이너 OS 버
전보다 높은 경우: Hyper-V
Isolation 전용
호스트 OS 버전이 컨테이너 OS 버
전보다 낮은 경우: 실행 불가
Windows 10: 클라이언트 커널 ≠
서버 커널이기 때문에 항상 Hyper-
V Isolation 필요
Insider Preview: 컨테이너 이미지와
호스트 OS 버전이 x.y.z 단위로 일
치해야만 함. Process Isolation은
서버 OS 전용
Host >
Container
V
Win
Server
2016
Win 10
Creators
Update
1703
Win
Server
1709
Win 10
Fall
Creators
Update
1709
Win
Server
1803
Win 10
2018
April
Update
1803
Win
Server
2019
1809
Win 10
Oct.
2018
Update
Win
Server
2016
Process
Hyper-V
Hyper-V Hyper-V Hyper-V Hyper-V Hyper-V Hyper-V Hyper-V
Win
Server
1709
사용
불가
사용
불가
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
1809
사용
불가
사용
불가
사용
불가
사용
불가
사용
불가
사용
불가
Process
Hyper-V
Hyper-V
Windows Kubernetes의 핵심
HCS와 HNS가 핵심
Kubernetes 입장에서는 Docker REST API와 통신
Docker는 HCS와 HNS와 커뮤니케이션 진행
Windows의 경우 추후 ContainerD/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가 직접 Golang으로 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.)
• 읽어보시면 도움되는 글
• https://bit.ly/2JX3oKY
• 특히 Part 2, Part 5, Part 6이 HNS와 K8S Networking의 이해의 기본
• Compartment
• Windows 내부의 VLAN과 유사한 개념
• Kubernetes에서는 Service에 대응
• NBL: Net Buffer List
• WNV 환경 하에서의 패킷으로 이해하면 편리함
Host Network Service (Cont.)
Process Isolation Hyper-V Isolation
네트워킹 구성
Windows Kubernetes의 네트워크 모델
Transparent NAT
WinCNI + L2Bridge
Transparent
가상 NAT 생성
별도의 Forwarder Adapter 생성 후 Route 테이블 관리
컨테이너 내부의 Outbound 연결에 제약이 있음
L2Bridge
Transparent와 같음
WinCNI, Flannel, WinBridge 등에서 기본으로 사용하는 네트워
킹 방식
네트워킹 구성 (Cont.)
• Microsoft SDN Git Repo의 Kubernetes 코드 샘플에 HNS 네트워크 제어 모듈이 들어있음
• HNS 네트워크 제어 모듈을 이용하여 새 L2Bridge HNS 네트워크를 생성
• L2Bridge HNS 네트워크에 현재 Worker Node를 연결하기 위하여 새 HNS Endpoint를 생성
하고 만든 네트워크에 Attach
• CNI 플러그인 설정 파일 수정
• Kubelet, Kubeproxy 시작
• 수동 라우팅 정보 추가
네트워킹 구성 (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”로 끝나는 주소
Demonstration
Rancher로 Azure에 Hybrid 클러스터 만들기
Windows Pod 스케줄링
• 현재 버전의 Docker 컨테이너와 Windows Kubernetes는 리눅스
컨테이너를 지원하지 않습니다.
• 그리고 리눅스 노드에 의도하지 않게 Windows 컨테이너가 배당
될 수 있는데, 이렇게 되면 Pod이나 Deployment가 실패하게 되
므로 Taint가 필요합니다.
• https://gist.github.com/rkttu/8ea0f94d26392d6f0c2090b0de116
5b5
• 또한 Windows Node의 OS 버전과 컨테이너 이미지가 일치하도
록 신경써야 합니다.
Linux Container on Windows (LCOW)
• 아직 개발 중인 기술
• Hyper-V Isolation을 응용하여 부팅 대상을 Windows 커널이 아닌 Linux로 함
• 중첩 가상화를 쓸 수 있는 환경이 필요
• Azure: 3세대 VM 이상
• AWS: i3.baremetal 혹은 유사 인스턴스
• 기타 베어메탈 제공 클라우드 전체
• 이 기술이 제공되면 Windows Node에 대한 Taint를 뗄 수 있음
• Windows 노드가 리눅스 컨테이너를 같이 실행할 수 있으므로 인프라 투자 상 이득이 증대됨
• Docker Community Edition 2.0에서 사용 가능
• (FYI) 2018년 11월에 버전 스키마가 18.xx에서 2.x로 변경됨
Windows 컨테이너 사용 시 주의 사항
• Hairpin/Promiscuous Mode 패킷 처리 이슈
• https://github.com/kubernetes/kubernetes/issues/65163
• https://github.com/kubernetes/kubernetes/issues/66947
• 증상은 매우 다양하지만, 공통적으로 Windows 측 Pod, Node의
네트워킹 스택에 심각한 영향을 끼침
• 이 문제에 대해 Microsoft 측과 6개월 이상 커뮤니케이션을 지속하였고,
Microsoft에서 버그를 수정 중인 것을 확인함
• Windows Server 1803의 경우 11월말 누적 업데이트, Windows Server
2019의 경우 내년 1월 중 누적 업데이트로 일반 공개될 예정
• Production 도입을 검토하신다면 시간이 좀 더 필요함
Windows 컨테이너 사용 시 주의 사항 (Cont.)
• Control Plane 서비스를 제공할 Master Node는 반드시 Linux
• KubeDNS, Flannel 등 일부 핵심 서비스들 또한 Linux Node 필요
• 그 외에는 상황에 따라 Linux Only, Windows Only, Hybrid 구축
• 컨테이너 버전과 호스트 OS 버전과의 상관 관계를 주의 요망
• 며칠 내로 테스트하실 예정이라면 Windows Node의 OS는 1803을 권장
• Azure, AWS, GCP 모두 지금 당장 사용 가능
• LTSC는 Windows Server 2019 추천
• 2016도 사용은 가능하나, 제약이 많고 성능이 떨어짐
• Kubernetes 1.14 버전에서는 2019 및 그 이후 릴리스만 지원함
한국 Azure 사용자 그룹
• 국내에서 가장 많은 Azure 관련 이벤트, 교육을 진행하는 커뮤니티입니다.
• Azure에 대한 궁금증, 겪고 계신 문제들을 공유해주시고 토론에 참여해보세요.
• https://www.fb.com/groups/krazure
마무리
Windows Server 2019가 출시되었지만 약 3개월 이상 여유를 두고
도입을 검토하시는 것이 좋습니다.
Windows 기반의 애플리케이션 개발자들에게 새로운 기회가 될
것입니다.
더 살펴보실 키워드: Nano Server, OneCore API, Docker for
Windows 2.0, Windows Container (Full)
Q&A
•We’re hiring!
•http://www.devsisters.com/jobs/
•Medium: www.rkttu.com
•Facebook: rkttu
•Email: rkttu@rkttu.com
실습 동영상 찾아보기
• Part 1: SSH 키 생성
• https://youtu.be/aO2HvxcjHIw
• Part 2: Azure RBAC 기반 App 생성
• https://youtu.be/HOaKUUGQ3b8
• Part 3: Rancher 서버 배포
• https://youtu.be/rtur5Hu7ZmI
• Part 4: Kubernetes Control Plane (ETCD, API) 배포
• https://youtu.be/a7piR0fO4Lc
• Part 5: Kubernetes Dedicated Linux 노드 배포
• https://youtu.be/n1hh9jV1oE0
• Part 6: Kubernetes Dedicated Windows 노드 배포
• https://youtu.be/wKWSPmqhPCY
• Part 7: 라우팅 테이블 설정
• https://youtu.be/LKitdbbcbtM
• Part 8: kubectl 설정
• https://youtu.be/XnVwe-F6noo

More Related Content

What's hot

[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 1) 커뮤니티 오픈스택 패키징 도입 전략 및 구현사례 발표
[OpenInfra Days Korea 2018] (Track 1) 커뮤니티 오픈스택 패키징 도입 전략 및 구현사례 발표[OpenInfra Days Korea 2018] (Track 1) 커뮤니티 오픈스택 패키징 도입 전략 및 구현사례 발표
[OpenInfra Days Korea 2018] (Track 1) 커뮤니티 오픈스택 패키징 도입 전략 및 구현사례 발표OpenStack Korea Community
 
Openstack zun,virtual kubelet
Openstack zun,virtual kubeletOpenstack zun,virtual kubelet
Openstack zun,virtual kubeletChanyeol yoon
 
OpenStack을 중심으로 한 오픈 소스 & 상용 하이브리드 클라우드
OpenStack을 중심으로 한 오픈 소스 & 상용 하이브리드 클라우드OpenStack을 중심으로 한 오픈 소스 & 상용 하이브리드 클라우드
OpenStack을 중심으로 한 오픈 소스 & 상용 하이브리드 클라우드Ian Choi
 
[OpenStack Days Korea 2016] Track2 - 아리스타 OpenStack 연동 및 CloudVision 솔루션 소개
[OpenStack Days Korea 2016] Track2 - 아리스타 OpenStack 연동 및 CloudVision 솔루션 소개[OpenStack Days Korea 2016] Track2 - 아리스타 OpenStack 연동 및 CloudVision 솔루션 소개
[OpenStack Days Korea 2016] Track2 - 아리스타 OpenStack 연동 및 CloudVision 솔루션 소개OpenStack Korea Community
 
OpenStack을 이용한 Commodity 하드웨어의 클라우드 전환
OpenStack을 이용한 Commodity 하드웨어의 클라우드 전환OpenStack을 이용한 Commodity 하드웨어의 클라우드 전환
OpenStack을 이용한 Commodity 하드웨어의 클라우드 전환mosaicnet
 
해외 사례로 보는 Billing for OpenStack Solution
해외 사례로 보는 Billing for OpenStack Solution해외 사례로 보는 Billing for OpenStack Solution
해외 사례로 보는 Billing for OpenStack SolutionNalee Jang
 
Cloud for Kubernetes : Session1
Cloud for Kubernetes : Session1Cloud for Kubernetes : Session1
Cloud for Kubernetes : Session1WhaTap Labs
 
[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
Kubernetes on PremiseKubernetes on Premise
Kubernetes on PremiseChan Shik Lim
 
2017 k8s and OpenStack-Helm
2017 k8s and OpenStack-Helm2017 k8s and OpenStack-Helm
2017 k8s and OpenStack-HelmSK Telecom
 
Prometheus in openstack-helm
Prometheus in openstack-helmPrometheus in openstack-helm
Prometheus in openstack-helm성일 임
 
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020 AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020 AWSKRUG - AWS한국사용자모임
 
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?OpenStack Korea Community
 
Open stack summit_barcelona_보고서
Open stack summit_barcelona_보고서Open stack summit_barcelona_보고서
Open stack summit_barcelona_보고서Yongyoon Shin
 
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기Ian Choi
 
[SOSCON 2016] 오픈스택을 살펴보는 오픈 소스 컨트리뷰션
[SOSCON 2016] 오픈스택을 살펴보는 오픈 소스 컨트리뷰션[SOSCON 2016] 오픈스택을 살펴보는 오픈 소스 컨트리뷰션
[SOSCON 2016] 오픈스택을 살펴보는 오픈 소스 컨트리뷰션Ian Choi
 
[OpenStack Days Korea 2016] Track2 - 데이터센터에 부는 오픈 소스 하드웨어 바람
[OpenStack Days Korea 2016] Track2 - 데이터센터에 부는 오픈 소스 하드웨어 바람[OpenStack Days Korea 2016] Track2 - 데이터센터에 부는 오픈 소스 하드웨어 바람
[OpenStack Days Korea 2016] Track2 - 데이터센터에 부는 오픈 소스 하드웨어 바람OpenStack Korea Community
 

What's hot (20)

[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 1) 커뮤니티 오픈스택 패키징 도입 전략 및 구현사례 발표
[OpenInfra Days Korea 2018] (Track 1) 커뮤니티 오픈스택 패키징 도입 전략 및 구현사례 발표[OpenInfra Days Korea 2018] (Track 1) 커뮤니티 오픈스택 패키징 도입 전략 및 구현사례 발표
[OpenInfra Days Korea 2018] (Track 1) 커뮤니티 오픈스택 패키징 도입 전략 및 구현사례 발표
 
Openstack zun,virtual kubelet
Openstack zun,virtual kubeletOpenstack zun,virtual kubelet
Openstack zun,virtual kubelet
 
OpenStack을 중심으로 한 오픈 소스 & 상용 하이브리드 클라우드
OpenStack을 중심으로 한 오픈 소스 & 상용 하이브리드 클라우드OpenStack을 중심으로 한 오픈 소스 & 상용 하이브리드 클라우드
OpenStack을 중심으로 한 오픈 소스 & 상용 하이브리드 클라우드
 
[OpenStack Days Korea 2016] Track2 - 아리스타 OpenStack 연동 및 CloudVision 솔루션 소개
[OpenStack Days Korea 2016] Track2 - 아리스타 OpenStack 연동 및 CloudVision 솔루션 소개[OpenStack Days Korea 2016] Track2 - 아리스타 OpenStack 연동 및 CloudVision 솔루션 소개
[OpenStack Days Korea 2016] Track2 - 아리스타 OpenStack 연동 및 CloudVision 솔루션 소개
 
OpenStack을 이용한 Commodity 하드웨어의 클라우드 전환
OpenStack을 이용한 Commodity 하드웨어의 클라우드 전환OpenStack을 이용한 Commodity 하드웨어의 클라우드 전환
OpenStack을 이용한 Commodity 하드웨어의 클라우드 전환
 
해외 사례로 보는 Billing for OpenStack Solution
해외 사례로 보는 Billing for OpenStack Solution해외 사례로 보는 Billing for OpenStack Solution
해외 사례로 보는 Billing for OpenStack Solution
 
20180206 elasticsearch
20180206 elasticsearch20180206 elasticsearch
20180206 elasticsearch
 
Cloud for Kubernetes : Session1
Cloud for Kubernetes : Session1Cloud for Kubernetes : Session1
Cloud for Kubernetes : Session1
 
[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
Kubernetes on PremiseKubernetes on Premise
Kubernetes on Premise
 
2017 k8s and OpenStack-Helm
2017 k8s and OpenStack-Helm2017 k8s and OpenStack-Helm
2017 k8s and OpenStack-Helm
 
Prometheus in openstack-helm
Prometheus in openstack-helmPrometheus in openstack-helm
Prometheus in openstack-helm
 
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020 AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
AWS기반 서버리스 데이터레이크 구축하기 - 김진웅 (SK C&C) :: AWS Community Day 2020
 
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
 
Open stack summit_barcelona_보고서
Open stack summit_barcelona_보고서Open stack summit_barcelona_보고서
Open stack summit_barcelona_보고서
 
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
 
[SOSCON 2016] 오픈스택을 살펴보는 오픈 소스 컨트리뷰션
[SOSCON 2016] 오픈스택을 살펴보는 오픈 소스 컨트리뷰션[SOSCON 2016] 오픈스택을 살펴보는 오픈 소스 컨트리뷰션
[SOSCON 2016] 오픈스택을 살펴보는 오픈 소스 컨트리뷰션
 
[OpenStack Days Korea 2016] Track2 - 데이터센터에 부는 오픈 소스 하드웨어 바람
[OpenStack Days Korea 2016] Track2 - 데이터센터에 부는 오픈 소스 하드웨어 바람[OpenStack Days Korea 2016] Track2 - 데이터센터에 부는 오픈 소스 하드웨어 바람
[OpenStack Days Korea 2016] Track2 - 데이터센터에 부는 오픈 소스 하드웨어 바람
 
Kubernetes
KubernetesKubernetes
Kubernetes
 

Similar to Journey to Windows Kubernetes

Kubernetes에서 Windows Application 호스팅하기
Kubernetes에서 Windows Application 호스팅하기Kubernetes에서 Windows Application 호스팅하기
Kubernetes에서 Windows Application 호스팅하기정현 남
 
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축Jung Hyun Nam
 
Windows Kubernetes Bootstrapping and Operations
Windows Kubernetes Bootstrapping and OperationsWindows Kubernetes Bootstrapping and Operations
Windows Kubernetes Bootstrapping and OperationsJung Hyun Nam
 
Windows Kubernetes Deep Dive
Windows Kubernetes Deep DiveWindows Kubernetes Deep Dive
Windows Kubernetes Deep DiveJung Hyun Nam
 
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - WebinarNAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기Jinuk Kim
 
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 VPC와 ELB/Direct Connect/VPN 알아보기 - 김세준, AWS 솔루션즈 아키텍트
Amazon VPC와 ELB/Direct Connect/VPN 알아보기 - 김세준, AWS 솔루션즈 아키텍트Amazon VPC와 ELB/Direct Connect/VPN 알아보기 - 김세준, AWS 솔루션즈 아키텍트
Amazon VPC와 ELB/Direct Connect/VPN 알아보기 - 김세준, AWS 솔루션즈 아키텍트Amazon Web Services Korea
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8sHyoungjun Kim
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기Hyperledger Korea User Group
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
 
[오픈테크넷서밋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
 
01.WEB SYSTEM BASED ON DOCKER
01.WEB SYSTEM BASED ON DOCKER01.WEB SYSTEM BASED ON DOCKER
01.WEB SYSTEM BASED ON DOCKEROpennaru, inc.
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기iFunFactory Inc.
 
[AWS Builders] AWS 네트워크 서비스 소개 및 사용 방법 - 김기현, AWS 솔루션즈 아키텍트
[AWS Builders] AWS 네트워크 서비스 소개 및 사용 방법 - 김기현, AWS 솔루션즈 아키텍트[AWS Builders] AWS 네트워크 서비스 소개 및 사용 방법 - 김기현, AWS 솔루션즈 아키텍트
[AWS Builders] AWS 네트워크 서비스 소개 및 사용 방법 - 김기현, AWS 솔루션즈 아키텍트Amazon Web Services Korea
 
[TeamStudy-022] Docker
[TeamStudy-022] Docker[TeamStudy-022] Docker
[TeamStudy-022] DockerWonjun Hwang
 

Similar to Journey to Windows Kubernetes (20)

Kubernetes에서 Windows Application 호스팅하기
Kubernetes에서 Windows Application 호스팅하기Kubernetes에서 Windows Application 호스팅하기
Kubernetes에서 Windows Application 호스팅하기
 
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축
 
Windows Kubernetes Bootstrapping and Operations
Windows Kubernetes Bootstrapping and OperationsWindows Kubernetes Bootstrapping and Operations
Windows Kubernetes Bootstrapping and Operations
 
Windows Kubernetes Deep Dive
Windows Kubernetes Deep DiveWindows Kubernetes Deep Dive
Windows Kubernetes Deep Dive
 
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
 
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)
 
20150115 AWS BlackBelt - Amazon VPC (Korea)
20150115 AWS BlackBelt - Amazon VPC (Korea)20150115 AWS BlackBelt - Amazon VPC (Korea)
20150115 AWS BlackBelt - Amazon VPC (Korea)
 
Amazon VPC와 ELB/Direct Connect/VPN 알아보기 - 김세준, AWS 솔루션즈 아키텍트
Amazon VPC와 ELB/Direct Connect/VPN 알아보기 - 김세준, AWS 솔루션즈 아키텍트Amazon VPC와 ELB/Direct Connect/VPN 알아보기 - 김세준, AWS 솔루션즈 아키텍트
Amazon VPC와 ELB/Direct Connect/VPN 알아보기 - 김세준, AWS 솔루션즈 아키텍트
 
Open infradays 2019_msa_k8s
Open infradays 2019_msa_k8sOpen infradays 2019_msa_k8s
Open infradays 2019_msa_k8s
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
[오픈테크넷서밋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
 
01.WEB SYSTEM BASED ON DOCKER
01.WEB SYSTEM BASED ON DOCKER01.WEB SYSTEM BASED ON DOCKER
01.WEB SYSTEM BASED ON DOCKER
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
 
[AWS Builders] AWS 네트워크 서비스 소개 및 사용 방법 - 김기현, AWS 솔루션즈 아키텍트
[AWS Builders] AWS 네트워크 서비스 소개 및 사용 방법 - 김기현, AWS 솔루션즈 아키텍트[AWS Builders] AWS 네트워크 서비스 소개 및 사용 방법 - 김기현, AWS 솔루션즈 아키텍트
[AWS Builders] AWS 네트워크 서비스 소개 및 사용 방법 - 김기현, AWS 솔루션즈 아키텍트
 
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
 
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
 
[TeamStudy-022] Docker
[TeamStudy-022] Docker[TeamStudy-022] Docker
[TeamStudy-022] Docker
 

More from Jung Hyun Nam

[KCD2020] Win32 API로 다루는 Windows Subsystem for Linux
[KCD2020] Win32 API로 다루는 Windows Subsystem for Linux[KCD2020] Win32 API로 다루는 Windows Subsystem for Linux
[KCD2020] Win32 API로 다루는 Windows Subsystem for LinuxJung Hyun Nam
 
[THR20007] WSL v2와 Rancher K3S로 빠르게 로컬 쿠버네티스 클러스터 만들기 / Quickly create a loca...
[THR20007] WSL v2와 Rancher K3S로 빠르게 로컬 쿠버네티스 클러스터 만들기 / Quickly create a loca...[THR20007] WSL v2와 Rancher K3S로 빠르게 로컬 쿠버네티스 클러스터 만들기 / Quickly create a loca...
[THR20007] WSL v2와 Rancher K3S로 빠르게 로컬 쿠버네티스 클러스터 만들기 / Quickly create a loca...Jung Hyun Nam
 
[BRK40017] 기존 IIS/ASP.NET 쇼핑몰 애플리케이션을 Kubernetes로 옮기기 / Move your existing II...
[BRK40017] 기존 IIS/ASP.NET 쇼핑몰 애플리케이션을 Kubernetes로 옮기기 / Move your existing II...[BRK40017] 기존 IIS/ASP.NET 쇼핑몰 애플리케이션을 Kubernetes로 옮기기 / Move your existing II...
[BRK40017] 기존 IIS/ASP.NET 쇼핑몰 애플리케이션을 Kubernetes로 옮기기 / Move your existing II...Jung Hyun Nam
 
[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
 
코딩이랑 무관합니다만, 2019년 6월 발표 자료
코딩이랑 무관합니다만, 2019년 6월 발표 자료코딩이랑 무관합니다만, 2019년 6월 발표 자료
코딩이랑 무관합니다만, 2019년 6월 발표 자료Jung Hyun Nam
 
BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발
BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발
BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발Jung Hyun Nam
 
Korea Community Day 2019 - Kubernetes와​ Serverless의 만남 – Knative​
Korea Community Day 2019 - Kubernetes와​ Serverless의 만남 – Knative​Korea Community Day 2019 - Kubernetes와​ Serverless의 만남 – Knative​
Korea Community Day 2019 - Kubernetes와​ Serverless의 만남 – Knative​Jung Hyun Nam
 

More from Jung Hyun Nam (7)

[KCD2020] Win32 API로 다루는 Windows Subsystem for Linux
[KCD2020] Win32 API로 다루는 Windows Subsystem for Linux[KCD2020] Win32 API로 다루는 Windows Subsystem for Linux
[KCD2020] Win32 API로 다루는 Windows Subsystem for Linux
 
[THR20007] WSL v2와 Rancher K3S로 빠르게 로컬 쿠버네티스 클러스터 만들기 / Quickly create a loca...
[THR20007] WSL v2와 Rancher K3S로 빠르게 로컬 쿠버네티스 클러스터 만들기 / Quickly create a loca...[THR20007] WSL v2와 Rancher K3S로 빠르게 로컬 쿠버네티스 클러스터 만들기 / Quickly create a loca...
[THR20007] WSL v2와 Rancher K3S로 빠르게 로컬 쿠버네티스 클러스터 만들기 / Quickly create a loca...
 
[BRK40017] 기존 IIS/ASP.NET 쇼핑몰 애플리케이션을 Kubernetes로 옮기기 / Move your existing II...
[BRK40017] 기존 IIS/ASP.NET 쇼핑몰 애플리케이션을 Kubernetes로 옮기기 / Move your existing II...[BRK40017] 기존 IIS/ASP.NET 쇼핑몰 애플리케이션을 Kubernetes로 옮기기 / Move your existing II...
[BRK40017] 기존 IIS/ASP.NET 쇼핑몰 애플리케이션을 Kubernetes로 옮기기 / Move your existing II...
 
[BRK30136] Windows 기반 백엔드 개발자를 위한 컨테이너 시작하기 / Introduction to Containers For ...
[BRK30136] Windows 기반 백엔드 개발자를 위한 컨테이너 시작하기 / Introduction to Containers For ...[BRK30136] Windows 기반 백엔드 개발자를 위한 컨테이너 시작하기 / Introduction to Containers For ...
[BRK30136] Windows 기반 백엔드 개발자를 위한 컨테이너 시작하기 / Introduction to Containers For ...
 
코딩이랑 무관합니다만, 2019년 6월 발표 자료
코딩이랑 무관합니다만, 2019년 6월 발표 자료코딩이랑 무관합니다만, 2019년 6월 발표 자료
코딩이랑 무관합니다만, 2019년 6월 발표 자료
 
BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발
BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발
BRK3738 - Azure Container Instance로 시작하는 간편한 서버리스 컨테이너 개발
 
Korea Community Day 2019 - Kubernetes와​ Serverless의 만남 – Knative​
Korea Community Day 2019 - Kubernetes와​ Serverless의 만남 – Knative​Korea Community Day 2019 - Kubernetes와​ Serverless의 만남 – Knative​
Korea Community Day 2019 - Kubernetes와​ Serverless의 만남 – Knative​
 

Journey to Windows Kubernetes

  • 1. Journey to Windows Kubernetes Korea Azure User Group DEVSISTERS 남정현
  • 2. Agenda • Case Studies: DEVSISTERS • Windows Container에 대한 이해 • Windows Kubernetes에 대하여 • HCS, HNS에 대한 이해 • Rancher로 Azure에 Hybrid Cluster 만들기 • 약간의 추가 정보
  • 3. DEVSISTERS의 사례 리눅스 워크로드와 윈도 워크로드를 하나의 클러스터에서! Kubernetes의 고가용성 전략을 Windows에서 그대로 사용 Windows의 고성능 I/O Completion Port을 레버리징 기존 VC++ 기반 서버들을 클러스터 환경으로 손쉽게 확장
  • 4. DEVSISTERS의 사례 (Cont.) 하이브리드 K8S 클러스터 구축 • Windows와 Linux Pod이 공존하는 Hybrid Cluster 쿠키워즈 개발/QA 환경 PoC 수행 • 게임 서버: 리눅스 • 운영 도구: 윈도 서버 1803 • 클러스터 구축: KOPS + AWS 두 번의 PoC 수행 • 초기 – Windows Server 2016 AMI + Transparent Network • 현재 – Windows Server 1803 AMI + L2 Bridge + WINCNI 향후 계획 • 개발/테스트 과정 중에 Windows 컨테이너를 사용할 수 있게 함 • 프로덕션 환경에 이르기까지 Windows 컨테이너로 자동화
  • 5. Windows Kubernetes • 일반적인 Kubernetes와 다르지 않음 • Kubernetes의 고가용성 전략을 Windows에서 그대로 사용 • Windows 만의 장점인 고성능 I/O Completion Port 지원 • 기존의 Legacy Application을 클러스터 환경으로 손쉽게 확장
  • 6. Kubernetes Windows SIG • https://github.com/kubernetes/community/tree/master/sig-windows • Windows 버전의 Kubernetes 개발을 직접 진행하는 팀
  • 7. 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 1709 이상 필요 (Azure, AWS에서 사용 가능) Kubernetes 1.13 • Windows Server 2019 지원 • 테스팅 인프라 강화
  • 8. Road to Production NT Service로 등록 지원 Hyper-V Isolation 컨테이너 지원 Flannel, Calico 등의 네트워크 플러그인 지원 1.10 SMB/CIFS 볼륨 플러그인 지원 Dashboard를 통한 명령어 실행 문제 수정 1.11 E2E 테스트를 통한 품질 보장 불필요한 오류 메시지 제거 1.12 E2E 테스트 보강 Windows Server 1803 지원 Windows Server 2019 지원 1.13
  • 9. Windows Kubernetes 설치 과정 Windows Server 1803 VM, Windows Server 2019 VM 또는 베어메탈 준비 1 Node를 시작하기 전에 kubelet으로 노드를 먼저 등록하여 Pod CIDR 확보 2 HNS에 새로운 L2 Bridge HNS Network 생성, Pod Gateway 어댑터 생성 및 부착 3 Kubelet, Kubeproxy 설 정 후 기동 4 Pod 간 수동 Routing Table 등록 5
  • 10. Windows 컨테이너의 버전 선택 동일 버전: Process 또는 Hyper-V Isolation 호스트 OS 버전이 컨테이너 OS 버 전보다 높은 경우: Hyper-V Isolation 전용 호스트 OS 버전이 컨테이너 OS 버 전보다 낮은 경우: 실행 불가 Windows 10: 클라이언트 커널 ≠ 서버 커널이기 때문에 항상 Hyper- V Isolation 필요 Insider Preview: 컨테이너 이미지와 호스트 OS 버전이 x.y.z 단위로 일 치해야만 함. Process Isolation은 서버 OS 전용 Host > Container V Win Server 2016 Win 10 Creators Update 1703 Win Server 1709 Win 10 Fall Creators Update 1709 Win Server 1803 Win 10 2018 April Update 1803 Win Server 2019 1809 Win 10 Oct. 2018 Update Win Server 2016 Process Hyper-V Hyper-V Hyper-V Hyper-V Hyper-V Hyper-V Hyper-V Hyper-V Win Server 1709 사용 불가 사용 불가 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 1809 사용 불가 사용 불가 사용 불가 사용 불가 사용 불가 사용 불가 Process Hyper-V Hyper-V
  • 11. Windows Kubernetes의 핵심 HCS와 HNS가 핵심 Kubernetes 입장에서는 Docker REST API와 통신 Docker는 HCS와 HNS와 커뮤니케이션 진행 Windows의 경우 추후 ContainerD/CRI (Container Runtime Interface)가 도입될 예정
  • 12. Host Compute Service 커널 수준의 가상화 • 컨테이너 내부의 OS 버전과 호스트 OS 버전이 반드시 일치해야 함 • Windows 10 클라이언트 PC에서 서버 커널은 이 방식으로 호스팅이 불가하며, 오로지 Hyper-V Isolation만 지원 Hyper-V Isolation • 가장 많이 오해를 받는 Windows Docker 확장 기능 • 전체가 격리된 VM은 아니기 때문에 호스트 OS 버전보다 높은 버전의 컨테이너 OS는 실행 불가 • https://bit.ly/2JSTo5A
  • 13. Host Compute Service (Cont.) https://blogs.technet.microsoft.com/virtualization/2017/01/27/introducing-the-host-compute-service-hcs/
  • 14. Host Compute Service (Cont.) • Linux 커널의 일부 컴포넌트에 대응되는 기능을 하나의 컴포넌트로 통합 제공 • Control Group, Namespace • Layer Capabilities: Union File System + Registry • Windows Kubernetes에 공헌할 목적으로 Microsoft가 직접 Golang으로 HCS Shim 제공 • https://github.com/Microsoft/hcsshim • .NET Framework 버전의 HCS 제어 프로그램 소스 코드 제공 • https://github.com/Microsoft/dotnet-computevirtualization
  • 15. Host Network Service • 각종 네트워크 설정 제어 가능 • https://github.com/Microsoft/SDN • /Kubernetes/Windows/HNS.psm1 • VmCompute.dll의 HNSCall 메서드 사용 • REST API 방식으로 호출 (Method + Resource Path + JSON Payload) • HNS를 이용하여 주로 제어하는 부분 • 네트워크: 내부 네트워크 • 엔드포인트: 컨테이너들이 사용하는 가상 어댑터 • 정책: 다른 노드 (리눅스, 윈도)에서 실행되는 Pod의 네트워크 연결 정보
  • 16. Host Network Service (Cont.) • 읽어보시면 도움되는 글 • https://bit.ly/2JX3oKY • 특히 Part 2, Part 5, Part 6이 HNS와 K8S Networking의 이해의 기본 • Compartment • Windows 내부의 VLAN과 유사한 개념 • Kubernetes에서는 Service에 대응 • NBL: Net Buffer List • WNV 환경 하에서의 패킷으로 이해하면 편리함
  • 17. Host Network Service (Cont.) Process Isolation Hyper-V Isolation
  • 18. 네트워킹 구성 Windows Kubernetes의 네트워크 모델 Transparent NAT WinCNI + L2Bridge Transparent 가상 NAT 생성 별도의 Forwarder Adapter 생성 후 Route 테이블 관리 컨테이너 내부의 Outbound 연결에 제약이 있음 L2Bridge Transparent와 같음 WinCNI, Flannel, WinBridge 등에서 기본으로 사용하는 네트워 킹 방식
  • 19. 네트워킹 구성 (Cont.) • Microsoft SDN Git Repo의 Kubernetes 코드 샘플에 HNS 네트워크 제어 모듈이 들어있음 • HNS 네트워크 제어 모듈을 이용하여 새 L2Bridge HNS 네트워크를 생성 • L2Bridge HNS 네트워크에 현재 Worker Node를 연결하기 위하여 새 HNS Endpoint를 생성 하고 만든 네트워크에 Attach • CNI 플러그인 설정 파일 수정 • Kubelet, Kubeproxy 시작 • 수동 라우팅 정보 추가
  • 20. 네트워킹 구성 (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”로 끝나는 주소
  • 22. Windows Pod 스케줄링 • 현재 버전의 Docker 컨테이너와 Windows Kubernetes는 리눅스 컨테이너를 지원하지 않습니다. • 그리고 리눅스 노드에 의도하지 않게 Windows 컨테이너가 배당 될 수 있는데, 이렇게 되면 Pod이나 Deployment가 실패하게 되 므로 Taint가 필요합니다. • https://gist.github.com/rkttu/8ea0f94d26392d6f0c2090b0de116 5b5 • 또한 Windows Node의 OS 버전과 컨테이너 이미지가 일치하도 록 신경써야 합니다.
  • 23. Linux Container on Windows (LCOW) • 아직 개발 중인 기술 • Hyper-V Isolation을 응용하여 부팅 대상을 Windows 커널이 아닌 Linux로 함 • 중첩 가상화를 쓸 수 있는 환경이 필요 • Azure: 3세대 VM 이상 • AWS: i3.baremetal 혹은 유사 인스턴스 • 기타 베어메탈 제공 클라우드 전체 • 이 기술이 제공되면 Windows Node에 대한 Taint를 뗄 수 있음 • Windows 노드가 리눅스 컨테이너를 같이 실행할 수 있으므로 인프라 투자 상 이득이 증대됨 • Docker Community Edition 2.0에서 사용 가능 • (FYI) 2018년 11월에 버전 스키마가 18.xx에서 2.x로 변경됨
  • 24. Windows 컨테이너 사용 시 주의 사항 • Hairpin/Promiscuous Mode 패킷 처리 이슈 • https://github.com/kubernetes/kubernetes/issues/65163 • https://github.com/kubernetes/kubernetes/issues/66947 • 증상은 매우 다양하지만, 공통적으로 Windows 측 Pod, Node의 네트워킹 스택에 심각한 영향을 끼침 • 이 문제에 대해 Microsoft 측과 6개월 이상 커뮤니케이션을 지속하였고, Microsoft에서 버그를 수정 중인 것을 확인함 • Windows Server 1803의 경우 11월말 누적 업데이트, Windows Server 2019의 경우 내년 1월 중 누적 업데이트로 일반 공개될 예정 • Production 도입을 검토하신다면 시간이 좀 더 필요함
  • 25. Windows 컨테이너 사용 시 주의 사항 (Cont.) • Control Plane 서비스를 제공할 Master Node는 반드시 Linux • KubeDNS, Flannel 등 일부 핵심 서비스들 또한 Linux Node 필요 • 그 외에는 상황에 따라 Linux Only, Windows Only, Hybrid 구축 • 컨테이너 버전과 호스트 OS 버전과의 상관 관계를 주의 요망 • 며칠 내로 테스트하실 예정이라면 Windows Node의 OS는 1803을 권장 • Azure, AWS, GCP 모두 지금 당장 사용 가능 • LTSC는 Windows Server 2019 추천 • 2016도 사용은 가능하나, 제약이 많고 성능이 떨어짐 • Kubernetes 1.14 버전에서는 2019 및 그 이후 릴리스만 지원함
  • 26. 한국 Azure 사용자 그룹 • 국내에서 가장 많은 Azure 관련 이벤트, 교육을 진행하는 커뮤니티입니다. • Azure에 대한 궁금증, 겪고 계신 문제들을 공유해주시고 토론에 참여해보세요. • https://www.fb.com/groups/krazure
  • 27. 마무리 Windows Server 2019가 출시되었지만 약 3개월 이상 여유를 두고 도입을 검토하시는 것이 좋습니다. Windows 기반의 애플리케이션 개발자들에게 새로운 기회가 될 것입니다. 더 살펴보실 키워드: Nano Server, OneCore API, Docker for Windows 2.0, Windows Container (Full)
  • 29. 실습 동영상 찾아보기 • Part 1: SSH 키 생성 • https://youtu.be/aO2HvxcjHIw • Part 2: Azure RBAC 기반 App 생성 • https://youtu.be/HOaKUUGQ3b8 • Part 3: Rancher 서버 배포 • https://youtu.be/rtur5Hu7ZmI • Part 4: Kubernetes Control Plane (ETCD, API) 배포 • https://youtu.be/a7piR0fO4Lc • Part 5: Kubernetes Dedicated Linux 노드 배포 • https://youtu.be/n1hh9jV1oE0 • Part 6: Kubernetes Dedicated Windows 노드 배포 • https://youtu.be/wKWSPmqhPCY • Part 7: 라우팅 테이블 설정 • https://youtu.be/LKitdbbcbtM • Part 8: kubectl 설정 • https://youtu.be/XnVwe-F6noo