반응형
Kubernetes Windows node 추가 (Docker)
목표
IIS web server container 와 같이 linux가 아닌 windows OS에서 실행가능한 container가 있음.
해당 container를 실행하기 위해서는 windows worker node가 필요함
이를 test해보기 위해 linux kubernetes cluster에 windows worker node를 추가하는 작업을 진행해봄.
Windows OS Container Runtime tool은 Containerd로 진행함.
Test 환경
on-premise 환경에서 진행.
linux cluster로 Master Node, Linux worker Node로 구성되어있는 상태에서
Windows node를 추가해봄.
linux cluster로 Master Node, Linux worker Node로 구성되어있는 상태에서
Windows node를 추가해봄.
[Master Node server]
OS = CentOS 7
리눅스 커널 버전 : Linux 3.10.0-1062.el7.x86_64
containerd :1.4.10
OS = CentOS 7
리눅스 커널 버전 : Linux 3.10.0-1062.el7.x86_64
containerd :1.4.10
[Linux Worker Node server]
OS = CentOS 7
리눅스 커널 버전 : Linux 3.10.0-1062.el7.x86_64
containerd :1.4.10
OS = CentOS 7
리눅스 커널 버전 : Linux 3.10.0-1062.el7.x86_64
containerd :1.4.10
[Windows Worker Node server]
OS = Windows Server 2019
OS = Windows Server 2019
[kubernetes version]
1.22.2
CNI : flannel
1.22.2
CNI : flannel
1. 기존 Kubernetes cluster CNI상태 확인
현재 기존 kubernetes cluster에 CNI가 flannel로 등록되어 동작하고 있음.
flannel을
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
flannel을
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
이 경로에서 받은 default flannel yaml을 그대로 설치해서 사용하고 있었음.
default로 설정 그대로 사용하게 되면 flannel은 8472Port로 동작함.
하지만 Windows Worker Node를 추가하기 위해서는 8472 Port를 사용하면 안되고
4096 또는 4789 Port로 동작해야함.
관련 설명은 아래 링크에 있음.
https://github.com/flannel-io/flannel/blob/master/Documentation/backends.md#vxlan
하지만 Windows Worker Node를 추가하기 위해서는 8472 Port를 사용하면 안되고
4096 또는 4789 Port로 동작해야함.
관련 설명은 아래 링크에 있음.
https://github.com/flannel-io/flannel/blob/master/Documentation/backends.md#vxlan
해당 문제를 해결하기 위해 flannel Port를 변경해야함.
flannel Port 변경
flannel ConfigMap 파일 확인
[명령어]
kubectl describe cm kube-flannel-cfg -n kube-system
kubectl describe cm kube-flannel-cfg -n kube-system
flannel ConfigMap 변경
[명령어]
kubectl edit cm kube-flannel-cfg -n kube-system
kubectl edit cm kube-flannel-cfg -n kube-system
위와같이 수정 후 저장.
configMap 적용하여 flannel을 재기동 하기위해
모든 node의 flannel을 삭제함.
flannel을 삭제하면 Daemonset에 의해 자동으로 재배포됨.
모든 node의 flannel을 삭제함.
flannel을 삭제하면 Daemonset에 의해 자동으로 재배포됨.
현재는 node가 2개만 존재하기때문에 2개의 flannel pod만 삭제해주면 됨.
flannel pod 재생성됨.
flannel 재생성 후 4789 port를 확인해보면 udp로 열려있는것을 확인가능.
2. Windows Worker Node에 Container Runtime tool 설치
container runtime tool은 Docker로 설치하겠음
Windows의 PowerShell을 Administrator 권한으로 실행시켜서 진행함.
Windows의 PowerShell을 Administrator 권한으로 실행시켜서 진행함.
Windows Docker설치
[1.]
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
설치
상위 명령어 이후 "y" 입력하여 재기동.
설치
상위 명령어 이후 "y" 입력하여 재기동.
[2.]
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
[3.]
Install-Package -Name docker -ProviderName DockerMsftProvider
[4.]
재기동 명령
Restart-Computer -Force
Restart-Computer -Force
[5.]
Get-Package -Name Docker -ProviderName DockerMsftProvider
[6.]
Start-Service Docker
Windows docker 설치 확인
[powershell]
docker version
docker version
2. Windows Worker Node에 Wins, kubelet, kubeadm 설치
[설치 스크립트 download]
curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1
curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1
tool들을 1.22.2 version으로 설치
[tool 설치]
.\PrepareNode.ps1 -KubernetesVersion v1.22.2
.\PrepareNode.ps1 -KubernetesVersion v1.22.2
[결과]
정상 설치
정상 설치
3. join token 확인
Master node에서 node join token을 확인함
[명령어]
kubeadm token create --print-join-command
kubeadm token create --print-join-command
4. Windows Worker Node join
windows worker node 를 추가함.
상위과정에서 확인한 명령으로 join 시도
상위과정에서 확인한 명령으로 join 시도
[명령어]
kubeadm join 10.0.2.15:6443 --token 8k79q1.l61wehbgth9z13te --discovery-token-ca-cert-hash sha256:d5945eac59f190751778dd94d532bfe1cf05b6ce29067dca8b518fa4da7ac4bf
[결과]
정상적으로 join됨.
정상적으로 join됨.
5. 결과 확인
[명령어]
kubectl get node -o wide
정상적으로 windows node가 추가되어있는 것을 확인가능.
kubectl get node -o wide
정상적으로 windows node가 추가되어있는 것을 확인가능.
CNI 정상 배포 확인
flannel CNI container 배포 확인
flannel container가 windows worker node에도 배포가 정상적으로 되어있는지 확인
[명령어]
kubectl get all -n kube-system -o wide
kubectl get all -n kube-system -o wide
[확인결과]
windows worker node에는 배포가 되어있지 않음.
그리고 자세히 보면 kube-proxy도 배포되어있지 않음.
windows worker node에는 배포가 되어있지 않음.
그리고 자세히 보면 kube-proxy도 배포되어있지 않음.
[원인]
기존에 동작하고 있던 flannel과 kube-proxy는 linux용도임.
이에 따라 별도의 windows용 flannel과 kube-proxy를
windows node에 배포해야함.
기존에 동작하고 있던 flannel과 kube-proxy는 linux용도임.
이에 따라 별도의 windows용 flannel과 kube-proxy를
windows node에 배포해야함.
windows kube-proxy 배포
kubernetes version호환을 위해 1.22.2 version으로 설치
curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/kube-proxy.yml | sed 's/VERSION/v1.22.2/g' | kubectl apply -f - |
[결과]
windows flannel 배포
최신 flannel version으로 설치
kubectl apply -f https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml |
[결과]
[참고]
flannel이 정상적으로 설치가 안된다면
네트워크 인터페이스 이름을 확인해야함.
아래와 같이 장치 이름이 "Ethernet"이면 상관 없지만 이와 동일하지 않다면 문제가 발생함.
네트워크 인터페이스 이름을 확인해야함.
아래와 같이 장치 이름이 "Ethernet"이면 상관 없지만 이와 동일하지 않다면 문제가 발생함.
윈도우 노드에서 이더넷이 아닌 다른 인터페이스(예: "Ethernet0 2")를 사용하는 경우,
flannel-host-gw.yml이나 flannel-overlay.yml 파일을 아래와 같이 수정이 필요함
flannel-host-gw.yml이나 flannel-overlay.yml 파일을 아래와 같이 수정이 필요함
wins cli process run --path /k/flannel/setup.exe --args "--mode=overlay --interface=Ethernet" |
그리고, 이에 따라 인터페이스를 지정해야 함.
curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml | sed 's/Ethernet/Ethernet0 2/g' | kubectl apply -f - |
결과
다음과 같이 windows worker node에 kube-proxy와 flannel이 정상적으로 배포되어야 성공
IP대역도 정상인지 확인해야함. 아래 그림과 같아야 정상.
IP대역도 정상인지 확인해야함. 아래 그림과 같아야 정상.
docker ps 명령으로 container확인해보면
kube-proxy와 flannel이 있어야함.
kube-proxy와 flannel이 있어야함.
flannel이 설치 된 후의 network interface 상태
오류 참고1.
[오류 상황]
windows worker node에 kube-proxy와 flannel cni가 정상적으로 배포되고 있지 않음
windows worker node에 kube-proxy와 flannel cni가 정상적으로 배포되고 있지 않음
[오류 메세지]
kubectl describe 명령으로 windows node에 배포된 flannel, kube-proxy pod를 확인해보면 아래와 같은 오류 메세지를 확인가능.
Error: failed to create containerd task: hcsshim::CreateComputeSystem kube-flannel: The directory name is invalid.
kubectl describe 명령으로 windows node에 배포된 flannel, kube-proxy pod를 확인해보면 아래와 같은 오류 메세지를 확인가능.
Error: failed to create containerd task: hcsshim::CreateComputeSystem kube-flannel: The directory name is invalid.
[원인]
해당 오류는 windows update 관련 오류임.
windows worker node 추가할 시
KB4489899 update가 되어있어야 한다고하는데
KB4489899 관련 패키지가 설치되어있지 않아서 발생하는 오류임.
해당 오류는 windows update 관련 오류임.
windows worker node 추가할 시
KB4489899 update가 되어있어야 한다고하는데
KB4489899 관련 패키지가 설치되어있지 않아서 발생하는 오류임.
[해결법]
windows update를 진행함.
예제 환경에서는 아래와 같은 package를 설치하니 오류가 해결됨.
windows update를 진행함.
예제 환경에서는 아래와 같은 package를 설치하니 오류가 해결됨.
IIS container 실행 Test
목표
windows 에서만 실행 가능한 iis container가 windows worker node에서 정상적으로 실행되는지 확인.
IIS container확인
windows server에 해당하는 image를 선정해야함
현재 windows worker node가 2019 server이기 때문에
mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019
현재 windows worker node가 2019 server이기 때문에
mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019
image를 사용함.
IIS deployment, service 배포
[iis deployment 예제]
apiVersion: apps/v1
kind: Deployment
metadata:
name: iis-deployment
labels:
app: iksoon-iis
spec:
replicas: 1
selector:
matchLabels:
app: iksoon-pod-iis
template:
metadata:
labels:
app: iksoon-pod-iis
spec:
containers:
- name: iksoon-iis
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: iksoon-iis-service
labels:
name: service-iis-service
spec:
type: NodePort
ports:
- name: "iksoon-iis-network-setting"
port: 8088
protocol: TCP
targetPort: 80
nodePort: 30002
selector:
app: iksoon-pod-iis
|
pod 배포 상태
IIS image 용량이 4GB가 넘어서 image pull하는데 시간이 오래걸림...
VirtualBox 포트포워딩 설정
외부에서 접근 결과
nodeport 30002로 접근을 시도한 결과로
iis 기본 page 정상 접근됨.
iis 기본 page 정상 접근됨.
linux환경에서는 pod가 배포되면
veth????와 같은 가상 인터페이스가 생성되는데
windows worker node network interface를 확인해보면
아래 그림과 같이 pod가 추가되도 별도의 interface가 생성되지 않고
해당 환경이 유지됨.
veth????와 같은 가상 인터페이스가 생성되는데
windows worker node network interface를 확인해보면
아래 그림과 같이 pod가 추가되도 별도의 interface가 생성되지 않고
해당 환경이 유지됨.
제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!
참고
kubernetes worker node 추가 참고
windows hyper-V
반응형
'Kubernetes > Windows Kubernetes' 카테고리의 다른 글
Kubernetes Windows node 추가 (containerD) (0) | 2024.07.17 |
---|---|
Windows kubernetes (0) | 2021.11.04 |