KEMBAR78
BRK3713 - Microsoft Azure에서 Windows와 Linux를 동시에 사용하는 하이브리드 Kubernetes 클러스터 구축 | PPTX
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

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

  • 2.
  • 3.
    스피커 소개 남정현 (jeonghyun.nam@devsisters.com) •DEVSISTERS DevOps Engineer • 한국 Azure 사용자 그룹 운영진 • Microsoft MVP (Since 2009)
  • 4.
    Agenda • Real WorldStory • 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 UseWindows Kubernetes
  • 11.
    컨테이너화를 하는 이유 빠른개발 좀 더 많은 반복 주기 클라우드 플랫폼 중립성 손쉬운 재현 환경 불변성 일관성 서비스 간의 분리 높은 가용성 대규모 테스트 지원 확장성 저렴한 비용 효율성
  • 12.
    오케스트레이션의 필요성 • 그러나컨테이너화 하는 것만으로 일이 끝나지 않습니다. • 여러 컨테이너 호스트에 효율적으로 컨테이너를 배포하고, 상황 에 따라 제어하는 기술이 필요합니다. • 이것이 컨테이너 오케스트레이션입니다. • 지금은 Kubernetes가 시장을 장악했습니다.
  • 13.
    앱을 빠르고 예측 가능하게배포 즉시 앱을 스케일 업/다운 중단 없이 새로운 기능 배포 하드웨어 사용을 필수 리소스로만 제한 Kubernetes
  • 14.
    Kubernetes 이식 가능 퍼블릭, 프라이빗, 하이브리드, 멀티클라우드 확장 가능 모듈식, 플러그 가능, 훅 연결 가능, 구성 가능 자가 치유 자동 배정, 자동 재시작, 자동 복제, 자동 스케일링
  • 15.
    Windows에서의 문제 • Kubernetes가좋긴 하지만 현실적인 문제가 있습니다. • Windows가 Kubernetes와 호환되지 않는다는 것!
  • 16.
    Windows에서의 문제 (Cont.) •그렇다고 해서 Windows 기반 기술을 Linux 기반 기술로 대체하 는 것은 큰 리스크를 동반합니다. • 제한된 시간과 비용으로 이런 리스크는 감당할 수 없습니다. • 하지만 이제 그 격차가 줄어들고 있습니다. • 지금이 바로 여러분의 Windows Server App을 컨테이너화 할 시간입니다.
  • 17.
  • 18.
  • 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.
    자동화된 이미지 빌드 DockerBuild 명령과 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
  • 23.
  • 24.
  • 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 Kubernetes1.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
  • 28.
  • 29.
    Windows Kubernetes isnow 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 WindowsServer 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
  • 39.
  • 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”로 끝나는 주소
  • 42.
  • 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을 동시에 구축
  • 47.
  • 48.
    Create and TestHybrid Kubernetes Cluster with AKS Engine Demo https://www.youtube.com/watch?v=8CMjgxccSOM
  • 49.
    Azure Vote HybridExample • Frontend와 Backend를 동시에 사용하는 Well-formed Example • 보통은 양쪽 모두 Linux 컨테이너를 사용합니다. • Hybrid Workload 테스트를 위하여 Backend는 Windows용으로 이식된 Microsoft Open Tech의 Redis Container로 변경해서 테 스트합니다.
  • 50.
  • 51.
    YAML Code • https://gist.github.com/rkttu/e30542d75b8e48d0cca1eec6eb0c f86b •Hybrid Workload에서 중요한 것은 Node Selector를 통한 적절 한 노드 선택. • Windows 노드에 Linux 컨테이너를 배정하거나, 반대의 상황이 발생하면 서비스가 시작되지 못함.
  • 52.
  • 53.
    Limitations • 호스트 OS는Windows Server 2019만 지원 • 컨테이너 이미지의 OS도 Windows Server 2019로 통일해야 함 • 네트워크 CNI 플러그인의 선택의 폭이 제한됨 • Kubenet, Flannel 정도가 검증된 선택지 • Calico, Open Virtual Network 등은 아직 개발 중 • 아직은 수동으로 설치해야 함 (Microsoft SDN 스크립트 참고) • 1.15 버전에서 kubeadm 지원 추가 예정
  • 54.
    Future • 아직 WindowsKubernetes의 개발이 모두 완료되지 않았습니다. • 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해야 할 때입니다.
  • 56.