Kubernetes/Windows Kubernetes
Kubernetes Windows node 추가 (containerD)
이쿠우우
2024. 7. 17. 20:44
반응형
Kubernetes Windows node 추가 (containerD)
목표
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를 추가해봄.
[Master Node server]
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
[Windows Worker Node server]
OS = Windows Server 2019
[kubernetes version]
1.22.2
CNI : flannel
1. 기존 Kubernetes cluster CNI상태 확인
현재 기존 kubernetes cluster에 CNI가 flannel로 등록되어 동작하고 있음.
flannel을
이 경로에서 받은 default flannel yaml을 그대로 설치해서 사용하고 있었음.
default로 설정 그대로 사용하게 되면 flannel은 8472Port로 동작함.
하지만 Windows Worker Node를 추가하기 위해서는 8472 Port를 사용하면 안되고
4096 또는 4789 Port로 동작해야함.
관련 설명은 아래 링크에 있음.
해당 문제를 해결하기 위해 flannel Port를 변경해야함.
flannel Port 변경
flannel ConfigMap 파일 확인
[명령어]
kubectl describe cm kube-flannel-cfg -n kube-system
flannel ConfigMap 변경
[명령어]
kubectl edit cm kube-flannel-cfg -n kube-system
위와같이 수정 후 저장.
configMap 적용하여 flannel을 재기동 하기위해
모든 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은 containerd로 설치하겠음
Windows의 PowerShell을 Administrator 권한으로 실행시켜서 진행함.
Windows Containerd 설치
[containerd 파일 download]
curl.exe -LO https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/Install-Containerd.ps1
[containerd 설치]
.\Install-Containerd.ps1
[결과]
오류 발생.
Windows Containerd 설치 에러 해결법
[에러 log]
WARNING: Windows feature: 'Containers' is not installed.
WARNING: Windows feature: 'Hyper-V' is not installed.
WARNING: Windows feature: 'Hyper-V-PowerShell' is not installed.
[원인]
현재 Windows Server에 Hyper-V가 활성화되어있지 않아서 발생함.
[해결법] - PowerShell에서 실행(Administrator 권한)
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
설치
상위 명령어 이후 "y" 입력하여 재기동.
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Management-PowerShell
설치
[결과]
다시 설치해보면 정상적으로 설치됨.
.\Install-Containerd.ps1
Windows Containerd 설치 확인
[명령어]
ctr 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
tool들을 1.22.2 version으로 설치
[tool 설치]
.\PrepareNode.ps1 -KubernetesVersion v1.22.2 -ContainerRuntime containerD
[결과]
정상 설치
3. join token 확인
Master node에서 node join token을 확인함
[명령어]
kubeadm token create --print-join-command
4. Windows Worker Node join
windows worker node 를 추가함.
상위과정에서 확인한 명령으로 join 시도
[명령어]
kubeadm join 10.0.2.15:6443 --token 8k79q1.l61wehbgth9z13te --discovery-token-ca-cert-hash sha256:d5945eac59f190751778dd94d532bfe1cf05b6ce29067dca8b518fa4da7ac4bf
[결과]
에러 발생하면서 join에 실패함.
[에러 log]
nodeRegistration.criSocket: Invalid value: "//./pipe/containerd-containerd": path is not absolute: //./pipe/containerd-containerd
To see the stack trace of this error execute with --v=5 or higher
[원인]
windows contaienr runtime이 containerd인 경우는
join명령에
--cri-socket "npipe:////./pipe/containerd-containerd"
를 추가해줘야함.
[해결법]
kubeadm join 10.0.2.15:6443 --token 8k79q1.l61wehbgth9z13te --discovery-token-ca-cert-hash sha256:d5945eac59f190751778dd94d532bfe1cf05b6ce29067dca8b518fa4da7ac4bf --cri-socket "npipe:////./pipe/containerd-containerd"
[결과]
5. 결과 확인
[명령어]
kubectl get node -o wide
정상적으로 windows node가 추가되어있는 것을 확인가능.
CNI 정상 배포 확인
flannel CNI container 배포 확인
flannel container가 windows worker node에도 배포가 정상적으로 되어있는지 확인
[명령어]
kubectl get all -n kube-system -o wide
[확인결과]
windows worker node에는 배포가 되어있지 않음.
그리고 자세히 보면 kube-proxy도 배포되어있지 않음.
[원인]
기존에 동작하고 있던 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으로 설치
[결과]
[참고]
flannel이 정상적으로 설치가 안된다면
네트워크 인터페이스 이름을 확인해야함.
아래와 같이 장치 이름이 "Ethernet"이면 상관 없지만 이와 동일하지 않다면 문제가 발생함.
윈도우 노드에서 이더넷이 아닌 다른 인터페이스(예: "Ethernet0 2")를 사용하는 경우,
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 대역이 10.244.?.? 대역이 아니라 172.?.?.? 대역으로 할당되어있는데
해당 부분은 test가 필요해보임.
만약 아래와 같이 배포가 안되고 creating 상태로 있거나 배포에 에러가 발생하면
아래 오류 참고1,2 를 참고해서 해결하면 됨.
반응형