티스토리 뷰

반응형

K8s: User Groups 공동 워크샵 II-2 (남정현 - Korea Azure User Group)


남정현 - 한국 Azure 사용자 그룹

발표 자료 : https://www.slideshare.net/rkttu/kubernetes-windows-application


DEVSISTERS의 사례

  • 리눅스 워크로드와 윈도 워크로드를 하나의 클러스터에서.
  • Kubernetes의 고가용성 전략을 Windows에서 그대로 사용
  • Windows만의 장점인 고성능 I/O Completion Port 지원
  • 기존의 Legacy Application을 클러스터 환경으로 손쉽게 확장

하이브리드 K8S 클러스터 구축

  • Windows와 Linux Pod이 공존하며 Cross Communication 전개

쿠키워즈 개발/QA 환경

  • 게임 서버 : 리눅스
  • 운영 도구 : 윈도 서버 1803
  • 클러스터 구축 : KOPS + AWS

두 번의 PoC 수행

  • 초기 : Windows Server 2016 AMI + Transparent Network
  • 현재 : Windows Server 1803 AMI + L2 Bridge + WINCNI

Kubernetes에서 Windows Application 호스팅하기

Windows Kubernetes

  • 일반적인 Kubernetes와 다르지 않음
  • Kubernetes의 고가용성 전략을 Windows에서 그대로 사용
  • Windows만의 장점인 고성능 I/O Completion Port 지원
  • 기존의 Legacy Application을 클러스터 환경으로 손쉽게 확장

Kubernetes Windows SIG


Windows Kubernetes History

Kubernetes 1.5

  • Alpha State
  • Transparent Network
  • Windows Server 2016
  • 몇 가지 도드라지는 제약 사항(Outbound 불가)

Kubernetes 1.9

  • Beta State
  • L2 Bridte
  • Windows Container Network Interface
  • Windows Server 1709 이상 필요(Azure, AWS에서 사용 가능)

Road to Production

1.10

  • NT Service로 등록 지원
  • Hyper-V Isolation 컨테이너 지원
  • Flannel, Calico 등의 네트워크 플러그인 지원

1.11

  • SMB/CIFS 볼륨 플러그인 지원
  • Dashboard를 통한 명령어 실행 문제 수정

1.12

  • E2E 테스트를 통한 품질 보장
  • Windows Server 2019와 호환될 것으로 예상

Windows Kubernetes 설치 과정

  1. Windows Server 1803 VM 또는 베어메탈 준비
  2. Node를 시작하기 전에 kubelet으로 노드를 먼저 등록하여 Pod CIDR 확보
  3. HNS에 새로운 L2 Bridge HNS Network 생성, Pod Gateway 어댑터 생성 및 부착
  4. Kubelet, Kubeproxy 설정 후 기동
  5. Pod 간 수동 Routing Table 등록

Windows 컨테이너의 버전 선택

커널 구조의 차이로 도입

  • Process 방식, Hyper-V 방식

Windows 10에서 Windows Container를 실행 시

  • 클라이언트 커널 != 서버 커널
  • Hyper-V Isolation 필요

버전 간 호환성에 대하여


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
  • Linux 커널의 일부 컴포넌트에 대응되는 기능을 하나의 컴포넌트로 통합 제공
    • Control Group, Namespace
    • Layer Capabilities : Union File System + Registry
  • Windows Kubernetes에 공헌할 목적으로 Microsoft가 직접 Go Lang으로 HCS Shim도 제공함
  • .NET Framework 버전의 HCS 제어 프로그램 소스 코드도 제공함

Host Network Service

각종 네트워크 설정 제어 기능

  • https://github.com/Microsoft/SDN
  • /Kubernetes/Windows/HNS.psm1
  • VmCompute.dll의 HNSCall 메서드 사용
  • REST API 방식으로 호출(Method + Resource Path + JSON Payload)

HNS를 이용하여 주로 제어하는 부분

  • 네트워크: 내부 네트워크
  • 엔드포인트: 컨테이너들이 사용하는 가상 어댑터
  • 정책: 다른 노드(리눅스, 윈도)에서 실행되는 Pod의 네트워크 연결 정보

읽어보시면 도움되는 글

Compartment

  • Windows 내부의 VLAN과 유사한 개념
  • Kubernetes에서는 Service에 대응

NBL: Net Buffer List

  • WNV 환경 하에서의 패킷으로 이해하면 편리함

네트워킹 구성

  • Windows Kubernetes의 네트워크 모델은 크게 두 가지입니다.
    • Transparent NAT
    • WinCNI + L2 Bridge
  • Transparent
    • 가상 NAT 생성
    • 별도의 Forwarder Adapter 생성 후 Route 테이블 관리
    • 컨테이너 내부의 Outbound 연결에 제약이 있음
  • L2Bridge
    • Transparent와 같음
    • WinCNI에서 기본으로 사용하는 네트워킹 방식
  • Microsoft SDN Git Repo의 Kubernetes 코드 샘플에 HNS 네트워크 제어 모듈이 들어있음
  • HNS 네트워크 제어 모듈을 이용하여 새 L2Bridge HNS 네트워크를 생성
  • L2Bridge HNS 네트워크에 현재 Worker Node를 연결하기 위하여 새 HNS Endpoint를 생성하고 만든 네트워크에 Attach
  • CNI 플러그인 설정 파일 수정
  • Kunerlet, Kubeproxy 시작
  • 수동 라우팅 정보 추가

Demonstration - 실제 IIS Pod 실행해보기

Windows 컨테이너 사용 시 주의 사항

  • Control Plane 서비스를 제공할 Master Node는 반드시 Linux
  • 그 외에는 상황에 따라 Linux Only, Windows Only, Hybrid 구축
  • 컨테이너 버전과 호스트 OS 버전과의 상관 관계
  • Windows Node의 OS는 1803 권장 (Azure, AWS 모두 사용 가능)
  • LTSB는 Windows Server 2019를 기다려 주세요. (2016도 사용은 가능하나, 제약이 많고 성능이 떨어집니다.)

Linux Container on Windows (LCOW)

  • 아직 개발 중인 기술
  • Hyper-V Isolation을 응용하여 부팅 대상을 Windows 커널이 아닌 Linux로 함
  • 중첩 가상화를 쓸 수 있는 환경이 필요
    • Azure : 3세대 VM 이상
    • AWS : i3.baremetal 혹은 유사 인스턴스
    • 기타 베어메탈 제공 클라우드 전체
  • 이 기술이 제공되면 Windows Node에 대한 Taint를 뗄 수 있음

마무리

  • Windows Server 2019가 출시될 때까지는 아직 많이 개선될 여지가 남아있습니다.
  • WIndows 기반의 애플리케이션 개발자들에게 새로운 기회가 될 수 있습니다.
  • 더 살펴보실 키워드 : Nano Server, OneCore API, .NET Core, Docker for Windows, Windows Container


반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함