λ‘œμΌ“πŸΎ
article thumbnail
λ°˜μ‘ν˜•

 

 

μš°λ¦¬λŠ” 보톡 EKS 의 μ›Œμ»€ λ…Έλ“œλ‘œ x86 이든, arm64 이든 λ¦¬λˆ…μŠ€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 

특히 EKS ν™˜κ²½μ΄λΌλ©΄ μ•„λ§ˆμ‘΄ λ¦¬λˆ…μŠ€2λ₯Ό μ‚¬μš©ν•˜κ² μ§€μš”.

 

근데 κ°„ν˜Ή μ›Œμ»€ λ…Έλ“œλ‘œ μœˆλ„μš°λ₯Ό ν•„μš”λ‘œ ν•˜λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. 

 

예λ₯Ό λ“€μ–΄ 라이브러리λ₯Ό λ§Œλ“€μ—ˆλŠ”λ°, λ¦¬λˆ…μŠ€ 뿐만 μ•„λ‹ˆλΌ μœˆλ„μš° ν™˜κ²½μ—μ„œλ„ 이 라이브러리λ₯Ό ν•„μš”λ‘œ ν•©λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ 이 라이브러리λ₯Ό μ΄λ―Έμ§€λ‘œ λΉŒλ“œν•˜λ €λ©΄ λ¦¬λˆ…μŠ€κ°€ μ•„λ‹Œ μœˆλ„μš° ν™˜κ²½μ—μ„œ λ§Œλ“€μ–΄μ•Ό ν•˜μ£ .

 

λ‹€ν–‰νžˆ EKS λŠ” μœˆλ„μš°λ₯Ό μ§€μ›ν•΄μ€λ‹ˆλ‹€. λ˜ν•œ Karpenter μ—μ„œλ„ μœˆλ„μš°λ₯Ό 지원해주죠.

 

그럼 μ–΄λ–»κ²Œ EKS ν™˜κ²½μ—μ„œ μœˆλ„μš°λ₯Ό ν™œμ„±ν™” ν•˜λŠ”μ§€, 이후 Karpenter μ—μ„œ μœˆλ„μš°λ₯Ό μ–΄λ–»κ²Œ ν”„λ‘œλΉ„μ €λ‹ ν•˜λŠ”μ§€ ν•œλ²ˆ μ•Œμ•„λ³΄λ„λ‘ ν•˜μ£ .

 

참고둜 μ§„ν–‰ν•œ μΏ λ²„λ„€ν‹°μŠ€ 버전은 1.23 이고, Karpenter λŠ” 0.31 λ²„μ „μž…λ‹ˆλ‹€.

 

그럼 λ ›μΈ λ‘λ”μ½”λ“œ~

 

 

EKS μ„€μ •


μ•„λž˜ 방법은 μ•„λ§ˆμ‘΄ 곡식 λ¬Έμ„œμ— 잘 λ‚˜μ™€μžˆμ§€λ§Œ, ν˜Ήμ‹œλ‚˜ μ €μ²˜λŸΌ λ§‰νžˆλŠ” 뢄듀을 μœ„ν•΄μ„œ~

 

μ•„λž˜ ν‘œμ— λ‚˜μ™€μžˆλŠ” μΏ λ²„λ„€ν‹°μŠ€ 버전은 μ‚¬μš©ν•œλ‹€λ©΄ 무리없이 μœˆλ„μš°λ₯Ό ν™œμ„±ν™” ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ§Œμ•½ ν•΄λ‹Ή ν‘œμ— μ—†λŠ” 버전을 μ‚¬μš©ν•˜κ³  μžˆλ‹€λ©΄, Enable legacy Windows support λ₯Ό 보고 μ§„ν–‰ν•΄μ£Όμ„Έμš”.

사전 쑰건

 

μ €λŠ” 1.23 버전을 μ‚¬μš©ν•˜λ‹ˆ ν•΄λ‹Ή λ¬Έμ„œλ₯Ό 보고 진행이 κ°€λŠ₯ν•˜κ² λ„€μš”.

 

λ‹€μŒμ€ κ³ λ € μ‚¬ν•­μž…λ‹ˆλ‹€.

 

CoreDNS λŠ” λ¦¬λˆ…μŠ€ 기반 μ›Œμ»€ λ…Έλ“œμ— 배포 ν•˜κ³ ~ 블라블라 μ­‰ μ­‰ μ½μ–΄μ€λ‹ˆλ‹€. 빨간색 λ„€λͺ¨ 친 λ§ˆμ§€λ§‰ 쀄은 κ΄€λ ¨ 섀정을 ν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.

 

aws-auth 컨피그맡에 μ•„λž˜ 이미지와 같이 κΆŒν•œμ„ μΆ”κ°€ν•΄μ€μ‹œλ‹€.

$ k edit configmaps -n kube-system aws-auth -o yaml

κΆŒν•œ μΆ”κ°€

ν•΄λ‹Ή μž‘μ—…μ„ μ•ˆν•΄μ€˜λ„, Window 기반의 μ›Œμ»€ λ…Έλ“œκ°€ λŸ°μΉ­μ€ λ©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ, 이후 νŒŒλ“œλ₯Ό λ°°ν¬ν–ˆμ„ λ•Œ ν•΄λ‹Ή νŒŒλ“œκ°€ CoreDNS λ₯Ό 찾지 λͺ»ν•΄μ„œ google.com 와 같은 퍼블릭 도메인 뿐만 μ•„λ‹ˆλΌ,
svc.cluster.local 와 같은 μ„œλΉ„μŠ€ κ΄€λ ¨λœ 도메인도 찾지 λͺ»ν•˜κ²Œ λ©λ‹ˆλ‹€.

κΌ­ λ†“μΉ˜μ§€ 말고 μΆ”κ°€ν•΄μ€μ‹œλ‹€!

 

이제 λ‹€μŒμœΌλ‘œ λ„˜μ–΄κ°€λ³΄μ£ .

EKS Cluster Role μ—κ²Œ ν•΄λ‹Ή 정책을 λΆ€μ—¬ν•˜λΌκ³  ν•˜λŠ”λ°, ν…ŒλΌνΌμœΌλ‘œ EKS λ₯Ό κ΅¬μ„±ν–ˆμ„ 경우 λ‹€ 기본적으둜 ν• λ‹Ήλ˜μ–΄ μžˆμ„ν…Œλ‹ˆ 크게 건듀건 μ—†μŠ΅λ‹ˆλ‹€.

ν…ŒλΌνΌμœΌλ‘œ EKS μƒμ„±ν–ˆμ„ 경우, 좔가적인 μž‘μ—…μ€ μ—†μŒ

μœ„ μ΄λ―Έμ§€μ—μ„œ 빨간색 λ„€λͺ¨λ₯Ό 보면 "eksClusterRole 을 λ„ˆμ˜ ν΄λŸ¬μŠ€ν„°μ— ν• λ‹Ήλœ Role μ΄λ¦„μœΌλ‘œ 바꿔라" 라고 ν•˜λŠ”λ°,

μ €λŠ” 이걸 μ²˜μŒμ— 잘λͺ» ν•΄μ„ν•΄μ„œ, 기쑴에 있던 Role 이름을 eksClusterRole 둜 λ°”κΎΈλΌλŠ” 말둜 μ΄ν•΄ν•˜κ³ ,
μ—„μ²­λ‚œ λ»˜μ§“μ„ ν–ˆμ£ .

 

2λ²ˆμ€ λ§ˆμ°¬κ°€μ§€λ‘œ ν…ŒλΌνΌμœΌλ‘œ μƒμ„±ν–ˆμ„ 경우, 크게 μ‹ κ²½μ“Έ 건 μ—†μŠ΅λ‹ˆλ‹€.

 

μ€‘μš”ν•œ 건 3,4λ²ˆμž…λ‹ˆλ‹€. 

μ€‘μš”ν•˜μ§€λ§Œ μ–΄λ €μš΄ 건 μ—†μŠ΅λ‹ˆλ‹€. κ·ΈλŒ€λ‘œ λ”°λΌν•΄μ€λ‹ˆλ‹€.

 

이둜써 EKS μ—μ„œμ˜ 섀정은 λλ‚¬μŠ΅λ‹ˆλ‹€. 그럼 μ΄μ–΄μ„œ Kapenter λ₯Ό ν†΅ν•΄μ„œ μœˆλ„μš° 기반의 μ›Œμ»€ λ…Έλ“œλ₯Ό 배포해보죠.

 

 

Karpenter μ„€μ •


Karpenter 의 κ°œλ…μ΄λ‚˜ μ‚¬μš© 방법은 μ—¬κΈ°λ₯Ό μ°Έκ³ !

 

Karpenter 버전은 λ°˜λ“œμ‹œ 0.29 이상을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ΄μœ λŠ” Window AMI λ₯Ό 0.29 버전 이후뢀터 지원해주기 λ•Œλ¬Έμ΄μ£ .

0.27 μ΄ν•˜ λ²„μ „μ—μ„œ 0.28 이상 λ²„μ „μœΌλ‘œ μ—…λ°μ΄νŠΈ ν•  λ•Œ λ‹¨μˆœνžˆ 이미지λ₯Ό μ—…λ°μ΄νŠΈ ν•΄μ€€λ‹€κ³  λ°°ν¬λ˜μ§€ μ•Šμ•„μš”.

κ½€λ‚˜ λ§Žμ€ 것듀이 λ°”λ€Œμ—ˆκΈ° λ•Œλ¬Έμ— κΌ­ 곡식 λ¬Έμ„œλ₯Ό 보고 μ§„ν–‰ν•΄μ£Όμ„Έμš”!!!!!

0.28 버전 μ΄μƒμœΌλ‘œ μ—…λ°μ΄νŠΈ ν•  λ•Œ κΌ­ 주의!

 

Karpenter κ°€ μ‚¬μš©ν•˜λŠ” Windows2019, Windows2022 의 μ΄λ―Έμ§€λŠ” λ‹€μŒκ³Ό κ°™μ•„μš”. 

Full 이 μ•„λ‹Œ Core 만 μ‚¬μš©ν•©λ‹ˆλ‹€.

EKS_Optimized 뒀에 μžˆλŠ” 것이 μΏ λ²„λ„€ν‹°μŠ€ 버전

 

μ•„λž˜λŠ” μ˜ˆμ‹œ AWSNodeTemplate μž…λ‹ˆλ‹€. .spec.amiFamiliy 뢀뢄을 λ°”κΏ”μ€λ‹ˆλ‹€.

apiVersion: karpenter.k8s.aws/v1alpha1
kind: AWSNodeTemplate
metadata:
  name: window-aws-node-template
spec:
  amiFamily: Windows2019
  blockDeviceMappings:
    - deviceName: /dev/sda1
      ebs:
        volumeSize: 50Gi
        volumeType: gp2
        encrypted: false
        
  securityGroupSelector:
    ...
    
  instanceProfile: 
    ...
  
  subnetSelector:
    ...
    
  tags:
    ...
.spec.securityGroupSelector λ₯Ό 톡해 μƒμ„±λ˜λŠ” μœˆλ„μš° μ›Œμ»€ λ…Έλ“œμ— λ³΄μ•ˆ 그룹을 할당해쀄 수 μžˆλŠ”λ°, μ΄λ•Œ κΌ­ λ§ˆμŠ€ν„° λ…Έλ“œμ™€ λ‹€λ₯Έ μ›Œμ»€ λ…Έλ“œμ— 톡신이 κ°€λŠ₯ν•  수 μžˆλ„λ‘ μΈλ°”μš΄λ“œ κ·œμΉ™μ„ μ§€μ •ν•΄μ€λ‹ˆλ‹€.

λ§ˆμŠ€ν„° λ…Έλ“œμ™€ 톡신이 κ°€λŠ₯ν•΄μ•Ό ν•˜λŠ” μ΄μœ λŠ” μ›Œμ»€ λ…Έλ“œλ₯Ό λ“±λ‘ν•˜κΈ° μœ„ν•΄μ„œμ΄κ³ ,
λ‹€λ₯Έ μ›Œμ»€ λ…Έλ“œμ™€ 톡신이 κ°€λŠ₯ν•΄μ•Ό ν•˜λŠ” μ΄μœ λŠ” CoreDNS 와 톡신이 κ°€λŠ₯ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

λ§Œμ•½ NetworkPolicy λ₯Ό μ‚¬μš©ν•œλ‹€λ©΄ κ΄€λ ¨ Rule λ˜ν•œ ν—ˆμš©ν•΄μ€λ‹ˆλ‹€.

μ•„λž˜ μ΄λ―Έμ§€λŠ” ν•΄λ‹Ή ν–‰μœ„λ₯Ό ν•˜μ§€ μ•Šμ•˜μ„ 경우 λ°œμƒν•  수 μžˆλŠ” μ—λŸ¬μž…λ‹ˆλ‹€.

google.com 에 접근이 μ•ˆλ¨
νŒŒλ“œ κ°œλ³„ IP 에도 접근이 μ•ˆλ¨
CoreDNS 와 톡신이 μ•ˆλ˜κΈ° λ•Œλ¬Έμ— νŒŒλ“œμ˜ λ„€νŠΈμ›Œν¬κ°€ μ΄λ―Έμ§€μ²˜λŸΌ 정상적일지라도 톡신이 μ•ˆλ¨

 

이둜써 μΉ΄νŽœν„° 뢀뢄도 끝이 λ‚¬μœΌλ‹ˆ, μ‹€μ œλ‘œ μœˆλ„μš° λ…Έλ“œλ₯Ό 띄어보죠!

 

 

μœˆλ„μš° λ…Έλ“œμ— μœˆλ„μš° νŒŒλ“œ ν…ŒμŠ€νŠΈ


μœ„ λ°©λ²•μœΌλ‘œ μœˆλ„μš° 기반의 μ›Œμ»€ λ…Έλ“œλ₯Ό λ„μš°κ³ , νŒŒλ“œλ₯Ό λ°°ν¬ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€!

apiVersion: v1
kind: Pod
metadata:
  name: win-webserver
  labels:
    app: win-webserver
spec:
  containers:
    - name: windowswebserver
      image: mcr.microsoft.com/windows/servercore:ltsc2019
      command:
        - powershell.exe
        - -command
        - "Write-Host 'Hello, World!'; Sleep -s 3600"

 

νŒŒλ“œλ₯Ό λ°°ν¬ν–ˆλ”λ‹ˆ, μ•„λž˜μ™€ 같은 μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.

μžμ„Ένžˆ 읽어보면 νŒŒλ“œμ— 좔가적인 private ip eni 할당을 λͺ»ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

node λ₯Ό μ‚΄νŽ΄λ³΄λ©΄ ν• λ‹Ήκ°€λŠ₯ν•œ IP λŠ” 11개라고 λ‚˜μ˜΅λ‹ˆλ‹€. λ˜ν•œ μ›Œμ»€ λ…Έλ“œμ˜ μƒνƒœλ„ Not Ready κ°€ μ•„λ‹Œ Ready μž…λ‹ˆλ‹€.

 

ν˜Ήμ‹œ aws-vpc-cni κ°€ λ„ˆλ¬΄ ꡬ버전(1.11) μ΄λΌμ„œ κ·ΈλŸ°κ°€ μ‹Άμ–΄μ„œ 1.15 λ²„μ „μœΌλ‘œ μ—…λ°μ΄νŠΈλ₯Ό ν•˜κ³  λ‹€μ‹œ μ‹œλ„ν•΄λ³΄μ£ !

 

μ—¬μ „νžˆ 같은 λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€...

 

그러던 쀑 λͺ¨λ“  window νŒŒλ“œ example 에 ν•œκ°€μ§€ κ³΅ν†΅λœ 것을 λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€!!

λ°”λ‘œ NodeSelector 둜 window λ₯Ό μ§€μ •ν•˜λŠ” κ²ƒμ΄μ˜€μ£ !!!!

apiVersion: v1
kind: Pod
metadata:
  name: win-webserver
  labels:
    app: win-webserver
spec:
  containers:
    - name: windowswebserver
      image: mcr.microsoft.com/windows/servercore:ltsc2019
      command:
        - powershell.exe
        - -command
        - "Write-Host 'Hello, World!'; Sleep -s 3600"

  nodeSelector:
    kubernetes.io/os: windows

 

κ·Έλž¬λ”λ‹ˆ μ•„μ£Ό 배포가 μž˜λ˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€!!

 

 

μ΄λ ‡κ²Œ μ˜€λŠ˜μ€ μœˆλ„μš° μ›Œμ»€ λ…Έλ“œλ₯Ό Karpenter 둜 ν”„λ‘œλΉ„μ €λ‹ν•˜κ³ , μœˆλ„μš° 기반의 νŒŒλ“œλ₯Ό μ‹€ν–‰ν•΄λ΄€μŠ΅λ‹ˆλ‹€.

 

μœˆλ„μš° μ›Œμ»€ λ…Έλ“œλŠ” efs-csi-driver 와 같은 좔가적인 μ• λ“œμ˜¨λ“€μ΄ 지원이 μ•ˆλ˜κΈ° λ•Œλ¬Έμ— λ¦¬λˆ…μŠ€ μ›Œμ»€ λ…Έλ“œμ²˜λŸΌ λ§Žμ€ 것을 ν•  순 μ—†μ§€λ§Œ, κ·Έλž˜λ„ CI/CD μ—λŠ” μœ μš©ν•˜κ²Œ μ“Έ 수 μžˆμ„ κ±° κ°™μŠ΅λ‹ˆλ‹€.

 

그럼 μ˜€λŠ˜μ€ μ—¬κΈ°κΉŒμ§€~

λ°˜μ‘ν˜•
profile on loading

Loading...