Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Guide for Running Windows Containers in Kubernetes
์ฟ ๋ฒ๋คํฐ์ค์์ ์๋์ฐ ์ปจํ ์ด๋ ์ค์ผ์ค๋ง์ ์ํ ๊ฐ์ด๋
๋ง์ ์กฐ์ง์์ ์คํํ๋ ์๋น์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋น ๋ถ๋ถ์ด ์๋์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๊ตฌ์ฑ๋๋ค. ์ด ๊ฐ์ด๋๋ ์ฟ ๋ฒ๋คํฐ์ค์์ ์๋์ฐ ์ปจํ ์ด๋๋ฅผ ๊ตฌ์ฑํ๊ณ ๋ฐฐํฌํ๋ ๋จ๊ณ๋ฅผ ์๋ดํ๋ค.
๋ชฉํ
- ์๋์ฐ ๋ ธ๋์์ ์๋์ฐ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ์์ ๋ํ๋ก์ด๋จผํธ๋ฅผ ๊ตฌ์ฑํ๋ค.
- ์ฟ ๋ฒ๋คํฐ์ค์ ์๋์ฐ ๊ด๋ จ ๊ธฐ๋ฅ์ ๊ฐ์กฐํ๋ค.
์์ํ๊ธฐ ์ ์
- ์ปจํธ๋กค ํ๋ ์ธ๊ณผ ์๋์ฐ ์๋ฒ๋ก ์ด์๋๋ ์์ปค ๋ ธ๋๋ฅผ ํฌํจํ๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ๋ค.
- ์ฟ ๋ฒ๋คํฐ์ค์์ ์๋น์ค์ ์ํฌ๋ก๋๋ฅผ ์์ฑํ๊ณ ๋ฐฐํฌํ๋ ๊ฒ์ ๋ฆฌ๋ ์ค๋ ์๋์ฐ ์ปจํ ์ด๋ ๋ชจ๋ ๋น์ทํ ๋ฐฉ์์ด๋ผ๋ ๊ฒ์ด ์ค์ํ๋ค. kubectl ์ปค๋งจ๋๋ก ํด๋ฌ์คํฐ์ ์ ์ํ๋ ๊ฒ์ ๋์ผํ๋ค. ์๋ ๋จ์์ ์์๋ฅผ ํตํด ์๋์ฐ ์ปจํ ์ด๋์ ์ข ๋ ๋นจ๋ฆฌ ์น์ํด์ง ์ ์๋ค.
์์ํ๊ธฐ: ์๋์ฐ ์ปจํ ์ด๋ ๋ฐฐํฌํ๊ธฐ
์๋ ์์ YAML ํ์ผ์ ์๋์ฐ ์ปจํ ์ด๋ ์์์ ์คํ๋๋ ๊ฐ๋จํ ์น์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ค.
์๋ ๋ด์ฉ์ผ๋ก ์ฑ์ด ์๋น์ค ์คํ์ win-webserver.yaml
์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์์ฑํ๋ค.
apiVersion: v1
kind: Service
metadata:
name: win-webserver
labels:
app: win-webserver
spec:
ports:
# ์ด ์๋น์ค๊ฐ ์๋น์ค๋ฅผ ์ ๊ณตํ ํฌํธ
- port: 80
targetPort: 80
selector:
app: win-webserver
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: win-webserver
name: win-webserver
spec:
replicas: 2
selector:
matchLabels:
app: win-webserver
template:
metadata:
labels:
app: win-webserver
name: win-webserver
spec:
containers:
- name: windowswebserver
image: mcr.microsoft.com/windows/servercore:ltsc2019
command:
- powershell.exe
- -command
- "<#code used from https://gist.github.com/19WAS85/5424431#> ; $$listener = New-Object System.Net.HttpListener ; $$listener.Prefixes.Add('http://*:80/') ; $$listener.Start() ; $$callerCounts = @{} ; Write-Host('Listening at http://*:80/') ; while ($$listener.IsListening) { ;$$context = $$listener.GetContext() ;$$requestUrl = $$context.Request.Url ;$$clientIP = $$context.Request.RemoteEndPoint.Address ;$$response = $$context.Response ;Write-Host '' ;Write-Host('> {0}' -f $$requestUrl) ; ;$$count = 1 ;$$k=$$callerCounts.Get_Item($$clientIP) ;if ($$k -ne $$null) { $$count += $$k } ;$$callerCounts.Set_Item($$clientIP, $$count) ;$$ip=(Get-NetAdapter | Get-NetIpAddress); $$header='<html><body><H1>Windows Container Web Server</H1>' ;$$callerCountsString='' ;$$callerCounts.Keys | % { $$callerCountsString+='<p>IP {0} callerCount {1} ' -f $$ip[1].IPAddress,$$callerCounts.Item($$_) } ;$$footer='</body></html>' ;$$content='{0}{1}{2}' -f $$header,$$callerCountsString,$$footer ;Write-Output $$content ;$$buffer = [System.Text.Encoding]::UTF8.GetBytes($$content) ;$$response.ContentLength64 = $$buffer.Length ;$$response.OutputStream.Write($$buffer, 0, $$buffer.Length) ;$$response.Close() ;$$responseStatus = $$response.StatusCode ;Write-Host('< {0}' -f $$responseStatus) } ; "
nodeSelector:
kubernetes.io/os: windows
์ฐธ๊ณ :
ํฌํธ ๋งคํ๋ ์ง์ํ์ง๋ง, ์ด ์์์์๋ ๊ฐ๊ฒฐ์ฑ์ ์ํด ์ปจํ ์ด๋ ํฌํธ 80์ ์๋น์ค๋ก ์ง์ ๋ ธ์ถํ๋ค.๋ชจ๋ ๋ ธ๋๊ฐ ๊ฑด๊ฐํ์ง ํ์ธํ๋ค.
kubectl get nodes
์๋น์ค๋ฅผ ๋ฐฐํฌํ๊ณ ํ๋ ๊ฐฑ์ ์ ์ง์ผ๋ณด์.
kubectl apply -f win-webserver.yaml kubectl get pods -o wide -w
์ด ์๋น์ค๊ฐ ์ ํํ ๋ฐฐํฌ๋๋ฉด ๋ชจ๋ ํ๋๋ Ready๋ก ํ๊ธฐ๋๋ค. ์ง์ผ๋ณด๊ธฐ๋ฅผ ์ค๋จํ๋ ค๋ฉด, Ctrl+C ๋ฅผ ๋๋ฅด์.
์ด ๋ํ๋ก์ด๋จผํธ๊ฐ ์ฑ๊ณต์ ์ธ์ง ํ์ธํ๋ค. ๋ค์์ ๊ฒํ ํ์.
- ๋ฆฌ๋
์ค ์ปจํธ๋กค ํ๋ ์ธ ๋
ธ๋์์ ๋์ด๋ ๋ ํ๋๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๋ ค๋ฉด,
kubectl get pods
๋ฅผ ์ฌ์ฉํ๋ค. - ๋คํธ์ํฌ๋ฅผ ํตํ ๋
ธ๋์์ ํ๋๋ก์ ํต์ ์ด ๋๋์ง ํ์ธํ๋ ค๋ฉด, ๋ฆฌ๋
์ค ์ปจํธ๋กค ํ๋ ์ธ ๋
ธ๋์์
curl
์ ํ๋ IP ์ฃผ์์ 80 ํฌํธ๋ก ์คํํ์ฌ ์น ์๋ฒ ์๋ต์ ํ์ธํ๋ค. - ํ๋ ๊ฐ ํต์ ์ด ๋๋์ง ํ์ธํ๋ ค๋ฉด,
docker exec
๋kubectl exec
๋ฅผ ์ด์ฉํด ํ๋ ๊ฐ์ ํ(ping)ํ๋ค(์๋์ฐ ๋ ธ๋๊ฐ 2๋ ์ด์์ด๋ผ๋ฉด, ์๋ก ๋ค๋ฅธ ๋ ธ๋์ ์๋ ํ๋ ๊ฐ ํต์ ๋ ํ์ธํ ์ ์๋ค). - ์๋น์ค์์ ํ๋๋ก์ ํต์ ์ด ๋๋์ง ํ์ธํ๋ ค๋ฉด, ๋ฆฌ๋
์ค ์ปจํธ๋กค ํ๋ ์ธ ๋
ธ๋์ ๋
๋ฆฝ ํ๋์์
curl
์ ๊ฐ์ ์๋น์ค IP ์ฃผ์(kubectl get services
๋ก ๋ณผ ์ ์๋)๋ก ์คํํ๋ค. - ์๋น์ค ๊ฒ์(discovery)์ด ๋๋์ง ํ์ธํ๋ ค๋ฉด, ์ฟ ๋ฒ๋คํฐ์ค ๊ธฐ๋ณธ DNS ์ ๋ฏธ์ฌ์ ์๋น์ค ์ด๋ฆ์ผ๋ก
curl
์ ์คํํ๋ค. - ์ธ๋ฐ์ด๋ ์ฐ๊ฒฐ์ด ๋๋์ง ํ์ธํ๋ ค๋ฉด, ํด๋ฌ์คํฐ ์ธ๋ถ ์ฅ๋น๋ ๋ฆฌ๋
์ค ์ปจํธ๋กค ํ๋ ์ธ ๋
ธ๋์์ NodePort๋ก
curl
์ ์คํํ๋ค. - ์์๋ฐ์ด๋ ์ฐ๊ฒฐ์ด ๋๋์ง ํ์ธํ๋ ค๋ฉด,
kubectl exec
๋ฅผ ์ด์ฉํด์ ํ๋์์ ์ธ๋ถ IP ์ฃผ์๋กcurl
์ ์คํํ๋ค.
- ๋ฆฌ๋
์ค ์ปจํธ๋กค ํ๋ ์ธ ๋
ธ๋์์ ๋์ด๋ ๋ ํ๋๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๋ ค๋ฉด,
์ฐธ๊ณ :
์๋์ฐ ์ปจํ ์ด๋ ํธ์คํธ๋ ํ์ฌ ์๋์ฐ ๋คํธ์ํน ์คํ์ ํ๋ซํผ ์ ํ์ผ๋ก ์ธํด, ๊ทธ ์์์ ์ค์ผ์ค๋งํ๋ ์๋น์ค์ IP ์ฃผ์๋ก ์ ๊ทผํ ์ ์๋ค. ์๋์ฐ ํ๋๋ง ์๋น์ค IP ์ฃผ์๋ก ์ ๊ทผํ ์ ์๋ค.๊ฐ์์ฑ
์ํฌ๋ก๋์์ ๋ก๊ทธ ์บก์ณํ๊ธฐ
๋ก๊ทธ๋ ๊ฐ์์ฑ์ ์ค์ํ ์์์ด๋ค. ๋ก๊ทธ๋ ์ฌ์ฉ์๊ฐ ์ํฌ๋ก๋์ ์ด์์ธก๋ฉด์
ํ์
ํ ์ ์๋๋ก ํ๋ฉฐ ๋ฌธ์ ํด๊ฒฐ์ ํต์ฌ ์์์ด๋ค.
์๋์ฐ ์ปจํ
์ด๋, ๊ทธ๋ฆฌ๊ณ ์๋์ฐ ์ปจํ
์ด๋ ๋ด์ ์ํฌ๋ก๋๋ ๋ฆฌ๋
์ค ์ปจํ
์ด๋์๋ ๋ค๋ฅด๊ฒ ๋์ํ๊ธฐ ๋๋ฌธ์,
์ฌ์ฉ์๊ฐ ๋ก๊ทธ๋ฅผ ์์งํ๊ธฐ ์ด๋ ค์ ๊ณ ์ด๋ก ์ธํด ์ด์ ๊ฐ์์ฑ์ด ์ ํ๋์ด ์๋ค.
์๋ฅผ ๋ค์ด ์๋์ฐ ์ํฌ๋ก๋๋ ์ผ๋ฐ์ ์ผ๋ก ETW(Event Tracing for Windows)์ ๋ก๊ทธ์ธํ๊ฑฐ๋
์ ํ๋ฆฌ์ผ์ด์
์ด๋ฒคํธ ๋ก๊ทธ์ ํญ๋ชฉ์ ํธ์ํ๋๋ก ๊ตฌ์ฑํ๋ค.
Microsoft์ ์คํ ์์ค ๋๊ตฌ์ธ LogMonitor๋
์๋์ฐ ์ปจํ
์ด๋ ์์ ๊ตฌ์ฑ๋ ๋ก๊ทธ ์์ค๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ์ด๋ค.
LogMonitor๋ ์ด๋ฒคํธ ๋ก๊ทธ, ETW ๊ณต๊ธ์ ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์ ์ ์ ์ ํ๋ฆฌ์ผ์ด์
๋ก๊ทธ ๋ชจ๋ํฐ๋ง์ ์ง์ํ๊ณ
kubectl logs <pod>
์ ์ํ ์ฌ์ฉ์ ์ํด STDOUT์ผ๋ก ํ์ดํํ๋ค.
LogMonitor GitHub ํ์ด์ง์ ์ง์นจ์ ๋ฐ๋ผ ๋ชจ๋ ์ปจํ ์ด๋ ๋ฐ์ด๋๋ฆฌ์ ์ค์ ํ์ผ์ ๋ณต์ฌํ๊ณ , LogMonitor๊ฐ ๋ก๊ทธ๋ฅผ STDOUT์ผ๋ก ํธ์ํ ์ ์๋๋ก ํ์ํ ์ํธ๋ฆฌํฌ์ธํธ๋ฅผ ์ถ๊ฐํ๋ค.
์ปจํ ์ด๋ ์ฌ์ฉ์ ๊ตฌ์ฑํ๊ธฐ
์ค์ ๊ฐ๋ฅํ ์ปจํ ์ด๋ username ์ฌ์ฉํ๊ธฐ
์๋์ฐ ์ปจํ ์ด๋๋ ์ด๋ฏธ์ง ๊ธฐ๋ณธ๊ฐ๊ณผ๋ ๋ค๋ฅธ username์ผ๋ก ์ํธ๋ฆฌํฌ์ธํธ์ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋๋ก ์ค์ ํ ์ ์๋ค. ์ฌ๊ธฐ์์ ์ด์ ๋ํด ์ถ๊ฐ์ ์ผ๋ก ๋ฐฐ์ธ ์ ์๋ค.
๊ทธ๋ฃน ๋งค๋์ง๋ ์๋น์ค ์ด์นด์ดํธ๋ฅผ ์ด์ฉํ์ฌ ์ํฌ๋ก๋ ์ ์ ๊ด๋ฆฌํ๊ธฐ
์๋์ฐ ์ปจํ ์ด๋ ์ํฌ๋ก๋๋ ๊ทธ๋ฃน ๋งค๋์ง๋ ์๋น์ค ์ด์นด์ดํธ(GMSA, Group Managed Service Account)๋ฅผ ์ด์ฉํ์ฌ ๊ตฌ์ฑํ ์ ์๋ค. ๊ทธ๋ฃน ๋งค๋์ง๋ ์๋น์ค ์ด์นด์ดํธ๋ ์กํฐ๋ธ ๋๋ ํฐ๋ฆฌ ์ด์นด์ดํธ์ ํน์ ํ ์ข ๋ฅ๋ก ์๋ ์ํธ ๊ด๋ฆฌ ๊ธฐ๋ฅ, ๋จ์ํ๋ ์๋น์ค ์ฃผ์ฒด ์ด๋ฆ(SPN, simplified service principal name), ์ฌ๋ฌ ์๋ฒ์ ๋ค๋ฅธ ๊ด๋ฆฌ์์๊ฒ ๊ด๋ฆฌ๋ฅผ ์์ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. GMSA๋ก ๊ตฌ์ฑํ ์ปจํ ์ด๋๋ GMSA๋ก ๊ตฌ์ฑ๋ ์ ์์ ๋ค๊ณ ์๋ ๋์ ์ธ๋ถ ์กํฐ๋ธ ๋๋ ํฐ๋ฆฌ ๋๋ฉ์ธ ๋ฆฌ์์ค๋ฅผ ์ ๊ทผํ ์ ์๋ค. ์๋์ฐ ์ปจํ ์ด๋๋ฅผ ์ํ GMSA๋ฅผ ์ด์ฉํ๊ณ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ฌ๊ธฐ์์ ์์๋ณด์.
ํ ์ธํธ(Taint)์ ํจ๋ฌ๋ ์ด์ (Toleration)
์ฌ์ฉ์๋ ๋ฆฌ๋ ์ค์ ์๋์ฐ ์ํฌ๋ก๋๋ฅผ (๋์ผํ OS๋ฅผ ์คํํ๋) ์ ์ ํ ๋ ธ๋์ ์ค์ผ์ค๋ง๋๋๋ก ํ๊ธฐ ์ํด ํ ์ธํธ์ ๋ ธ๋์ ๋ ํฐ(nodeSelector)์ ์กฐํฉ์ ์ด์ฉํด์ผ ํ๋ค. ์๋๋ ๊ถ์ฅ๋๋ ๋ฐฉ์์ ๊ฐ์์ธ๋ฐ, ์ด๊ฒ์ ์ฃผ์ ๋ชฉํ ์ค์ ํ๋๋ ์ด ๋ฐฉ์์ด ๊ธฐ์กด ๋ฆฌ๋ ์ค ์ํฌ๋ก๋์ ํธํ๋์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
1.25๋ถํฐ, ํ๋์ ์ปจํ
์ด๋๊ฐ ์ด๋ค ์ด์์ฒด์ ์ฉ์ธ์ง๋ฅผ ํ๋์ .spec.os.name
์ ์ค์ ํ ์ ์๋ค(๊ทธ๋ฆฌ๊ณ ์ค์ ํด์ผ ํ๋ค).
๋ฆฌ๋
์ค ์ปจํ
์ด๋๋ฅผ ์คํํ๋ ํ๋์๋ .spec.os.name
์ linux
๋ก ์ค์ ํ๋ค.
์๋์ฐ ์ปจํ
์ด๋๋ฅผ ์คํํ๋ ํ๋์๋ .spec.os.name
์
windows
๋ก ์ค์ ํ๋ค.
์ฐธ๊ณ :
1.25๋ถํฐ,IdentifyPodOS
๊ธฐ๋ฅ์ GA ๋จ๊ณ์ด๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์๋ค.์ค์ผ์ค๋ฌ๋ ํ๋๋ฅผ ๋
ธ๋์ ํ ๋นํ ๋
.spec.os.name
ํ๋์ ๊ฐ์ ์ฌ์ฉํ์ง ์๋๋ค.
์ปจํธ๋กค ํ๋ ์ธ์ด ํ๋๋ฅผ ์ ์ ํ ์ด์ ์ฒด์ ๊ฐ ์คํ๋๊ณ ์๋ ๋
ธ๋์ ๋ฐฐ์นํ๋๋ก ํ๋ ค๋ฉด,
ํ๋๋ฅผ ๋
ธ๋์ ํ ๋นํ๋
์ผ๋ฐ์ ์ธ ์ฟ ๋ฒ๋คํฐ์ค ๋ฉ์นด๋์ฆ์ ์ฌ์ฉํด์ผ ํ๋ค.
.spec.os.name
ํ๋๋ ์๋์ฐ ํ๋์ ์ค์ผ์ค๋ง์๋ ์ํฅ์ ๋ฏธ์น์ง ์๊ธฐ ๋๋ฌธ์,
์๋์ฐ ํ๋๊ฐ ์ ์ ํ ์๋์ฐ ๋
ธ๋์ ํ ๋น๋๋๋ก ํ๋ ค๋ฉด
ํ
์ธํธ, ํจ๋ฌ๋ ์ด์
๋ฐ ๋
ธ๋ ์
๋ ํฐ๊ฐ ์ฌ์ ํ ํ์ํ๋ค.
ํน์ OS ์ํฌ๋ก๋๋ฅผ ์ ์ ํ ์ปจํ ์ด๋ ํธ์คํธ์์ ์ฒ๋ฆฌํ๋๋ก ๋ณด์ฅํ๊ธฐ
์ฌ์ฉ์๋ ํ ์ธํธ์ ํจ๋ฌ๋ ์ด์ ์ ์ด์ฉํ์ฌ ์๋์ฐ ์ปจํ ์ด๋๊ฐ ์ ์ ํ ํธ์คํธ์์ ์ค์ผ์ค๋ง๋๊ธฐ๋ฅผ ๋ณด์ฅํ ์ ์๋ค. ์ค๋๋ ๋ชจ๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ ธ๋๋ ๋ค์ ๊ธฐ๋ณธ ๋ ์ด๋ธ์ ๊ฐ์ง๊ณ ์๋ค.
- kubernetes.io/os = [windows|linux]
- kubernetes.io/arch = [amd64|arm64|...]
ํ๋ ์ฌ์์ ๋
ธ๋ ์
๋ ํฐ๋ฅผ "kubernetes.io/os": windows
์ ๊ฐ์ด ์ง์ ํ์ง ์์๋ค๋ฉด,
๊ทธ ํ๋๋ ๋ฆฌ๋
์ค๋ ์๋์ฐ, ์๋ฌด ํธ์คํธ์๋ ์ค์ผ์ค๋ง๋ ์ ์๋ค.
์๋์ฐ ์ปจํ
์ด๋๋ ์๋์ฐ์์๋ง ์ด์๋ ์ ์๊ณ ๋ฆฌ๋
์ค ์ปจํ
์ด๋๋ ๋ฆฌ๋
์ค์์๋ง ์ด์๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ค.
๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋
ธ๋ ์
๋ ํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ ๋ง์ ๊ฒฝ์ฐ ์ฌ์ฉ์๋ ์ด๋ฏธ ์กด์ฌํ๋ ๋๋์ ๋ฆฌ๋ ์ค ์ปจํ ์ด๋์ฉ ๋ํ๋ก์ด๋จผํธ๋ฅผ ๊ฐ์ง๊ณ ์์ ๋ฟ๋ง ์๋๋ผ, ํฌ๋ฆ(Helm) ์ฐจํธ ์ปค๋ฎค๋ํฐ ๊ฐ์ ์์ฉ ๊ตฌ์ฑ์ ์์ฝ์์คํ ์ด๋, ์คํผ๋ ์ดํฐ(Operator) ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ํ๋ ์์ฑ ์ฌ๋ก๊ฐ ์์์ ์๊ณ ์๋ค. ์ด๋ฐ ์ํฉ์์๋ ๋ ธ๋ ์ ๋ ํฐ๋ฅผ ์ถ๊ฐํ๋ ๊ตฌ์ฑ ๋ณ๊ฒฝ์ ๋ง์ค์ผ ์ ์๋ค. ์ด์ ๋ํ ๋์์ ํ ์ธํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. Kubelet์ ๋ฑ๋กํ๋ ๋์ ํ ์ธํธ๋ฅผ ์ค์ ํ ์ ์๊ธฐ ๋๋ฌธ์, ์๋์ฐ์์๋ง ์ด์ํ ๋์ ์๋์ผ๋ก ํ ์ธํธ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ฝ๋ค.
์๋ฅผ ๋ค๋ฉด, --register-with-taints='os=windows:NoSchedule'
๋ชจ๋ ์๋์ฐ ๋ ธ๋์ ํ ์ธํธ๋ฅผ ์ถ๊ฐํ์ฌ ์๋ฌด ๊ฒ๋ ๊ฑฐ๊ธฐ์ ์ค์ผ์ค๋งํ์ง ์๊ฒ ๋ ๊ฒ์ด๋ค(์กด์ฌํ๋ ๋ฆฌ๋ ์ค ํ๋๋ฅผ ํฌํจํ์ฌ). ์๋์ฐ ํ๋๊ฐ ์๋์ฐ ๋ ธ๋์ ์ค์ผ์ค๋ง๋๋๋ก ํ๋ ค๋ฉด, ์๋์ฐ ๋ ธ๋๊ฐ ์ ํ๋๋๋ก ํ๊ธฐ ์ํ ๋ ธ๋ ์ ๋ ํฐ ๋ฐ ์ ํฉํ๊ฒ ์ผ์นํ๋ ํจ๋ฌ๋ ์ด์ ์ด ๋ชจ๋ ํ์ํ๋ค.
nodeSelector:
kubernetes.io/os: windows
node.kubernetes.io/windows-build: '10.0.17763'
tolerations:
- key: "os"
operator: "Equal"
value: "windows"
effect: "NoSchedule"
๋์ผ ํด๋ฌ์คํฐ์์ ์ฌ๋ฌ ์๋์ฐ ๋ฒ์ ์ ์กฐ์ํ๋ ๋ฐฉ๋ฒ
ํ๋์์ ์ฌ์ฉํ๋ ์๋์ฐ ์๋ฒ ๋ฒ์ ์ ๋ ธ๋์ ์๋์ฐ ์๋ฒ ๋ฒ์ ๊ณผ ์ผ์นํด์ผ ํ๋ค. ๋ง์ฝ ๋์ผํ ํด๋ฌ์คํฐ์์ ์ฌ๋ฌ ์๋์ฐ ์๋ฒ ๋ฒ์ ์ ์ฌ์ฉํ๋ ค๋ฉด, ์ถ๊ฐ๋ก ๋ ธ๋ ๋ ์ด๋ธ๊ณผ nodeSelectors๋ฅผ ์ค์ ํด์ผ ํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค 1.17์ ์ด๊ฒ์ ๋จ์ํํ๊ธฐ ์ํด ์๋ก์ด ๋ ์ด๋ธ์ธ node.kubernetes.io/windows-build
๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํ๋ค.
๋ง์ฝ ์ด์ ๋ฒ์ ์ ์คํ ์ค์ธ ๊ฒฝ์ฐ, ์ด ๋ ์ด๋ธ์ ์๋์ฐ ๋
ธ๋์ ์๋์ผ๋ก ์ถ๊ฐํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
์ด ๋ ์ด๋ธ์ ํธํ์ฑ์ ์ํด ์ผ์น์์ผ์ผ ํ๋ ์๋์ฐ ๋ฉ์ด์ , ๋ง์ด๋ ๋ฐ ๋น๋ ๋ฒํธ๋ฅผ ๋ํ๋ธ๋ค. ๊ฐ ์๋์ฐ ์๋ฒ ๋ฒ์ ์ ๋ํด ํ์ฌ ์ฌ์ฉํ๊ณ ์๋ ๋น๋ ๋ฒํธ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ ํ ์ด๋ฆ | ๋น๋ ๋ฒํธ |
---|---|
Windows Server 2019 | 10.0.17763 |
Windows Server, ๋ฒ์ 20H2 | 10.0.19042 |
Windows Server 2022 | 10.0.20348 |
RuntimeClass๋ก ๋จ์ํ
๋ฐํ์ํด๋์ค(RuntimeClass)๋ฅผ ์ฌ์ฉํด์ ํ
์ธํธ(taint)์ ํจ๋ฌ๋ ์ด์
(toleration)์ ์ฌ์ฉํ๋ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํ ํ ์ ์๋ค.
ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ ์ด ํ
์ธํธ์ ํจ๋ฌ๋ ์ด์
์ ์บก์ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ RuntimeClass
์ค๋ธ์ ํธ๋ฅผ ์์ฑํ ์ ์๋ค.
- ์ด ํ์ผ์
runtimeClasses.yml
๋ก ์ ์ฅํ๋ค. ์ฌ๊ธฐ์๋ ์๋์ฐ OS, ์ํคํ ์ฒ ๋ฐ ๋ฒ์ ์ ์ ํฉํnodeSelector
๊ฐ ํฌํจ๋์ด ์๋ค.
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
name: windows-2019
handler: 'docker'
scheduling:
nodeSelector:
kubernetes.io/os: 'windows'
kubernetes.io/arch: 'amd64'
node.kubernetes.io/windows-build: '10.0.17763'
tolerations:
- effect: NoSchedule
key: os
operator: Equal
value: "windows"
- ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ก
kubectl create -f runtimeClasses.yml
๋ฅผ ์คํํด์ ์ฌ์ฉํ๋ค. - ํ๋ ์ฌ์์ ์ ํฉํ
runtimeClassName: windows-2019
๋ฅผ ์ถ๊ฐํ๋ค.
์์:
apiVersion: apps/v1
kind: Deployment
metadata:
name: iis-2019
labels:
app: iis-2019
spec:
replicas: 1
template:
metadata:
name: iis-2019
labels:
app: iis-2019
spec:
runtimeClassName: windows-2019
containers:
- name: iis
image: mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019
resources:
limits:
cpu: 1
memory: 800Mi
requests:
cpu: .1
memory: 300Mi
ports:
- containerPort: 80
selector:
matchLabels:
app: iis-2019
---
apiVersion: v1
kind: Service
metadata:
name: iis
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 80
selector:
app: iis-2019