πŸ’Ύ μΏ λ²„λ„€ν‹°μŠ€μ˜ κΈ°λ³Έ κ°œλ…μ„ μ •λ¦¬ν•œ λ‚΄μš©μž…λ‹ˆλ‹€.


🎯 μΏ λ²„λ„€ν‹°μŠ€λž€?

μΏ λ²„λ„€ν‹°μŠ€λŠ”Β μ»¨ν…Œμ΄λ„ˆν™”λœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 배포, 관리, ν™•μž₯ν•  λ•Œ μˆ˜λ°˜λ˜λŠ” λ‹€μˆ˜μ˜ μˆ˜λ™ ν”„λ‘œμ„ΈμŠ€λ₯Ό μžλ™ν™”ν•˜λŠ”Β μ˜€ν”ˆμ†ŒμŠ€Β μ»¨ν…Œμ΄λ„ˆ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ ν”Œλž«νΌμž…λ‹ˆλ‹€.

μš©μ–΄ 뜻
μ»¨ν…Œμ΄λ„ˆ 앱이 κ΅¬λ™λ˜λŠ” ν™˜κ²½κΉŒμ§€ κ°μ‹Έμ„œ μ‹€ν–‰ν•  수 μžˆλ„λ‘ ν•˜λŠ” 격리 기술
μ»¨ν…Œμ΄λ„ˆ λŸ°νƒ€μž„ μ»¨ν…Œμ΄λ„ˆλ₯Ό λ‹€λ£¨λŠ” 도ꡬ
도컀 μ»¨ν…Œμ΄λ„ˆλ₯Ό λ‹€λ£¨λŠ” 도ꡬ 쀑 κ°€μž₯ 유λͺ…ν•œ 것
μΏ λ²„λ„€ν‹°μŠ€ μ»¨μ΄λ„ˆ λŸ°νƒ€μž„μ„ 톡해 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ ν•˜λŠ” 도ꡬ
μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ μ—¬λŸ¬ μ„œλ²„μ— 걸친 μ»¨ν…Œμ΄λ„ˆ 및 μ‚¬μš©ν•˜λŠ” ν™˜κ²½ 섀정을 κ΄€λ¦¬ν•˜λŠ” ν–‰μœ„




🎯 μΏ λ²„λ„€ν‹°μŠ€κ°€ ν•  수 μžˆλŠ” 일은?

  • μ„œλΉ„μŠ€ λ””μŠ€μ»€λ²„λ¦¬μ™€ λ‘œλ“œ λ°ΈλŸ°μ‹±: μΏ λ²„λ„€ν‹°μŠ€λŠ” DNS 이름을 μ‚¬μš©ν•˜κ±°λ‚˜ 자체 IP μ£Όμ†Œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ»¨ν…Œμ΄λ„ˆλ₯Ό λ…ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ»¨ν…Œμ΄λ„ˆμ— λŒ€ν•œ νŠΈλž˜ν”½μ΄ 많으면, μΏ λ²„λ„€ν‹°μŠ€λŠ” λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ„ λ‘œλ“œλ°ΈλŸ°μ‹±ν•˜κ³  λ°°ν¬ν•˜μ—¬ 배포가 μ•ˆμ •μ μœΌλ‘œ μ΄λ£¨μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μŠ€ν† λ¦¬μ§€ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜: μΏ λ²„λ„€ν‹°μŠ€λ₯Ό μ‚¬μš©ν•˜λ©΄ 둜컬 μ €μž₯μ†Œ, 곡용 ν΄λΌμš°λ“œ κ³΅κΈ‰μž λ“±κ³Ό 같이 μ›ν•˜λŠ” μ €μž₯μ†Œ μ‹œμŠ€ν…œμ„ μžλ™μœΌλ‘œ νƒ‘μž¬ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μžλ™ν™”λœ 둀아웃과 λ‘€λ°±: μΏ λ²„λ„€ν‹°μŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ 배포된 μ»¨ν…Œμ΄λ„ˆμ˜ μ›ν•˜λŠ” μƒνƒœλ₯Ό μ„œμˆ ν•  수 있으며 ν˜„μž¬ μƒνƒœλ₯Ό μ›ν•˜λŠ” μƒνƒœλ‘œ μ„€μ •ν•œ 속도에 따라 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μΏ λ²„λ„€ν‹°μŠ€λ₯Ό μžλ™ν™”ν•΄μ„œ 배포용 μƒˆ μ»¨ν…Œμ΄λ„ˆλ₯Ό λ§Œλ“€κ³ , κΈ°μ‘΄ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ œκ±°ν•˜κ³ , λͺ¨λ“  λ¦¬μ†ŒμŠ€λ₯Ό μƒˆ μ»¨ν…Œμ΄λ„ˆμ— μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μžλ™ν™”λœ 빈 νŒ¨ν‚Ή(bin packing):Β μ»¨ν…Œμ΄λ„ˆν™”λœ μž‘μ—…μ„ μ‹€ν–‰ν•˜λŠ”λ° μ‚¬μš©ν•  수 μžˆλŠ” μΏ λ²„λ„€ν‹°μŠ€ ν΄λŸ¬μŠ€ν„° λ…Έλ“œλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 각 μ»¨ν…Œμ΄λ„ˆκ°€ ν•„μš”λ‘œ ν•˜λŠ” CPU와 λ©”λͺ¨λ¦¬(RAM)λ₯Ό μΏ λ²„λ„€ν‹°μŠ€μ—κ²Œ μ§€μ‹œν•©λ‹ˆλ‹€. μΏ λ²„λ„€ν‹°μŠ€λŠ” μ»¨ν…Œμ΄λ„ˆλ₯Ό λ…Έλ“œμ— λ§žμΆ”μ–΄μ„œ λ¦¬μ†ŒμŠ€λ₯Ό κ°€μž₯ 잘 μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•΄μ€λ‹ˆλ‹€.
  • μžλ™ν™”λœ 볡ꡬ(self-healing):Β μΏ λ²„λ„€ν‹°μŠ€λŠ” μ‹€νŒ¨ν•œ μ»¨ν…Œμ΄λ„ˆλ₯Ό λ‹€μ‹œ μ‹œμž‘ν•˜κ³ , μ»¨ν…Œμ΄λ„ˆλ₯Ό κ΅μ²΄ν•˜λ©°, β€˜μ‚¬μš©μž μ •μ˜ μƒνƒœ 검사’에 μ‘λ‹΅ν•˜μ§€ μ•ŠλŠ” μ»¨ν…Œμ΄λ„ˆλ₯Ό 죽이고, μ„œλΉ„μŠ€ μ€€λΉ„κ°€ 끝날 λ•ŒκΉŒμ§€ κ·ΈλŸ¬ν•œ 과정을 ν΄λΌμ΄μ–ΈνŠΈμ— 보여주지 μ•ŠμŠ΅λ‹ˆλ‹€.
  • μ‹œν¬λ¦Ώκ³Ό ꡬ성 관리:Β μΏ λ²„λ„€ν‹°μŠ€λ₯Ό μ‚¬μš©ν•˜λ©΄ μ•”ν˜Έ, OAuth 토큰 및 SSH 킀와 같은 μ€‘μš”ν•œ 정보λ₯Ό μ €μž₯ν•˜κ³  관리 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ»¨ν…Œμ΄λ„ˆ 이미지λ₯Ό μž¬κ΅¬μ„±ν•˜μ§€ μ•Šκ³  μŠ€νƒ ꡬ성에 μ‹œν¬λ¦Ώμ„ λ…ΈμΆœν•˜μ§€ μ•Šκ³ λ„ μ‹œν¬λ¦Ώ 및 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ성을 배포 및 μ—…λ°μ΄νŠΈ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.



🎯 μΏ λ²„λ„€ν‹°μŠ€ ꡬ성 μš”μ†Œ

μš©μ–΄ 정리

μš©μ–΄ 정리

  • 컨트둀 ν”Œλ ˆμΈ:Β μΏ λ²„λ„€ν‹°μŠ€ λ…Έλ“œλ₯Ό μ œμ–΄ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μ˜ μ»¬λ ‰μ…˜μž…λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œ λͺ¨λ“  νƒœμŠ€ν¬ 할당이 μ‹œμž‘λ©λ‹ˆλ‹€.
  • λ…Έλ“œ: 컨트둀 ν”Œλ ˆμΈμ—μ„œ ν• λ‹Ήλœ μš”μ²­ νƒœμŠ€ν¬λ₯Ό μˆ˜ν–‰ν•˜λŠ” λ¨Έμ‹ μž…λ‹ˆλ‹€.
  • ν¬λ“œ: 단일 λ…Έλ“œμ— 배포된 ν•˜λ‚˜ μ΄μƒμ˜ μ»¨ν…Œμ΄λ„ˆ κ·Έλ£Ήμž…λ‹ˆλ‹€. ν¬λ“œμ— μžˆλŠ” λͺ¨λ“  μ»¨ν…Œμ΄λ„ˆλŠ” IP μ£Όμ†Œ, IPC, 호슀트 이름, 기타 λ¦¬μ†ŒμŠ€λ₯Ό κ³΅μœ ν•©λ‹ˆλ‹€. ν¬λ“œλŠ” κΈ°λ³Έ μ»¨ν…Œμ΄λ„ˆμ—μ„œ λ„€νŠΈμ›Œν¬μ™€ μŠ€ν† λ¦¬μ§€λ₯Ό μΆ”μƒν™”ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ ν΄λŸ¬μŠ€ν„°μ—μ„œ μ»¨ν…Œμ΄λ„ˆλ₯Ό 더 μ‰½κ²Œ 이동할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 볡제 컨트둀러: 이 μ»¨νŠΈλ‘€λŸ¬λŠ” ν΄λŸ¬μŠ€ν„°μ—μ„œ μ‹€ν–‰λ˜μ–΄μ•Ό ν•˜λŠ” λ™μΌν•œ ν¬λ“œ λ³΅μ‚¬λ³Έμ˜ 개수λ₯Ό μ œμ–΄ν•©λ‹ˆλ‹€.
  • μ„œλΉ„μŠ€:Β ν¬λ“œμ—μ„œ μž‘μ—… μ •μ˜λ₯Ό λΆ„λ¦¬ν•©λ‹ˆλ‹€. μΏ λ²„λ„€ν‹°μŠ€ μ„œλΉ„μŠ€ ν”„λ‘μ‹œλŠ” ν΄λŸ¬μŠ€ν„°μ—μ„œ λ‹€λ₯Έ μœ„μΉ˜λ‘œ μ΄λ™λœ κ²½μš°λ‚˜ ꡐ체된 κ²½μš°μ— 상관없이 μ„œλΉ„μŠ€ μš”μ²­μ„Β μ μ ˆν•œ ν¬λ“œλ‘œ μžλ™ μˆ˜μ‹ ν•©λ‹ˆλ‹€.
  • Kubelet: 이 μ„œλΉ„μŠ€λŠ” λ…Έλ“œμ—μ„œ μ‹€ν–‰λ˜λ©° μ»¨ν…Œμ΄λ„ˆ λ§€λ‹ˆνŽ˜μŠ€νŠΈλ₯Ό 읽고, μ •μ˜λœ μ»¨ν…Œμ΄λ„ˆκ°€ μ‹œμž‘λ˜μ–΄ μ‹€ν–‰ 쀑인지 ν™•μΈν•©λ‹ˆλ‹€.
  • kubectl:Β μΏ λ²„λ„€ν‹°μŠ€μ˜ μ»€λ§¨λ“œ 라인 ꡬ성 νˆ΄μž…λ‹ˆλ‹€.


컨트둀 ν”Œλ ˆμΈ μ»΄ν¬λ„ŒνŠΈ

컨트둀 ν”Œλ ˆμΈ μ»΄ν¬λ„ŒνŠΈλŠ” ν΄λŸ¬μŠ€ν„°μ— κ΄€ν•œ μ „λ°˜μ μΈ κ²°μ •(예λ₯Ό λ“€μ–΄, μŠ€μΌ€μ€„λ§)을 μˆ˜ν–‰ν•˜κ³  ν΄λŸ¬μŠ€ν„° 이벀트(예λ₯Ό λ“€μ–΄, λ””ν”Œλ‘œμ΄λ¨ΌνŠΈμ˜Β replicasΒ ν•„λ“œμ— λŒ€ν•œ μš”κ΅¬ 쑰건이 μΆ©μ‘±λ˜μ§€ μ•Šμ„ 경우 μƒˆλ‘œμš΄Β νŒŒλ“œλ₯Ό κ΅¬λ™μ‹œν‚€λŠ” 것)λ₯Ό κ°μ§€ν•˜κ³  λ°˜μ‘ν•©λ‹ˆλ‹€.

  • kube-apiserver: API μ„œλ²„λŠ” μΏ λ²„λ„€ν‹°μŠ€ APIλ₯Ό λ…ΈμΆœν•˜λŠ” 컨트둀 ν”Œλ ˆμΈμ˜ ν”„λ‘ νŠΈ μ—”λ“œ
  • etcd: λͺ¨λ“  ν΄λŸ¬μŠ€ν„° 데이터(ꡬ성 μš”μ†Œλ“€μ˜ μƒνƒœ κ°’ λ“±)λ₯Ό λ‹΄λŠ” μΏ λ²„λ„€ν‹°μŠ€ λ’·λ‹¨μ˜ μ €μž₯μ†Œλ‘œ μ‚¬μš©λ˜λŠ” μΌκ΄€μ„±Β·κ³ κ°€μš©μ„± ν‚€-κ°’ μ €μž₯μ†Œ
  • Kube-scheduler: λ…Έλ“œκ°€ λ°°μ •λ˜μ§€ μ•Šμ€ μƒˆλ‘œ μƒμ„±λœΒ νŒŒλ“œλ₯Ό κ°μ§€ν•˜κ³ , λ…Έλ“œμ˜ μƒνƒœμ™€ μžμ›, λ ˆμ΄λΈ”, μš”κ΅¬ 쑰건 등을 κ³ λ €ν•΄ νŒŒλ“œλ₯Ό μ–΄λ–€ μ›Œμ»€ λ…Έλ“œμ— 생성할 것인지λ₯Ό κ²°μ •ν•˜κ³  ν• λ‹Ή
  • kube-controller-manager: μΏ λ²„λ„€ν‹°μŠ€ ν΄λŸ¬μŠ€ν„°μ˜ 였브젝트 μƒνƒœλ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.
    • λ…Έλ“œ 컨트둀러: λ…Έλ“œκ°€ λ‹€μš΄λ˜μ—ˆμ„ λ•Œ 톡지와 λŒ€μ‘μ— κ΄€ν•œ μ±…μž„
    • 작 컨트둀러: μΌνšŒμ„± μž‘μ—…μ„ λ‚˜νƒ€λ‚΄λŠ” 작 였브젝트λ₯Ό κ°μ‹œν•œ λ‹€μŒ, ν•΄λ‹Ή μž‘μ—…μ„ μ™„λ£Œν•  λ•ŒκΉŒμ§€ λ™μž‘ν•˜λŠ” νŒŒλ“œλ₯Ό 생성
    • μ—”λ“œν¬μΈνŠΈ 컨트둀러: μ„œλΉ„μŠ€μ™€ νŒŒλ“œλ₯Ό μ—°κ²°
    • μ„œλΉ„μŠ€ μ–΄μΉ΄μš΄νŠΈ & 토큰 컨트둀러: μƒˆλ‘œμš΄ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— λŒ€ν•œ κΈ°λ³Έ 계정과 API μ ‘κ·Ό 토큰을 생성


λ…Έλ“œ μ»΄ν¬λ„ŒνŠΈ

λ…Έλ“œ μ»΄ν¬λ„ŒνŠΈλŠ” λ™μž‘ 쀑인 νŒŒλ“œλ₯Ό μœ μ§€μ‹œν‚€κ³  μΏ λ²„λ„€ν‹°μŠ€ λŸ°νƒ€μž„ ν™˜κ²½μ„ μ œκ³΅ν•˜λ©°, λͺ¨λ“  λ…Έλ“œ μƒμ—μ„œ λ™μž‘ν•©λ‹ˆλ‹€.

  • λ…Έλ“œ: 컨트둀 ν”Œλ ˆμΈμ—μ„œ ν• λ‹Ήλœ μš”μ²­ νƒœμŠ€ν¬λ₯Ό μˆ˜ν–‰ν•˜λŠ” λ¨Έμ‹ μž…λ‹ˆλ‹€. (μ„œλ²„)
  • νŒŒλ“œ(pod): ν•œ 개 μ΄μƒμ˜ μ»¨ν…Œμ΄λ„ˆλ‘œ 이루어진 μ΅œμ†Œ λ‹¨μœ„
  • μ»¨ν…Œμ΄λ„ˆ λŸ°νƒ€μž„(CRI, Container Runtime Interface): νŒŒλ“œλ₯Ό μ΄λ£¨λŠ” μ»¨ν…Œμ΄λ„ˆμ˜ 싀행을 λ‹΄λ‹Ή. ν‘œμ€€ μΈν„°νŽ˜μ΄μŠ€
  • kubelet: νŒŒλ“œμ˜ ꡬ성 λ‚΄μš©(PodSpec)을 λ°›μ•„μ„œ μ»¨ν…Œμ΄λ„ˆ λŸ°νƒ€μž„μœΌλ‘œ μ „λ‹¬ν•˜κ³ , νŒŒλ“œ μ•ˆμ˜ μ»¨ν…Œμ΄λ„ˆλ“€μ΄ μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜λŠ”μ§€ λͺ¨λ‹ˆν„°λ§
  • kube-proxy: ν΄λŸ¬μŠ€ν„°μ˜ κ°Β λ…Έλ“œμ—μ„œ μ‹€ν–‰λ˜λŠ” λ„€νŠΈμ›Œν¬ ν”„λ‘μ‹œλ‘œ, μΏ λ²„λ„€ν‹°μŠ€μ˜Β μ„œλΉ„μŠ€Β κ°œλ…μ˜ κ΅¬ν˜„λΆ€μž…λ‹ˆλ‹€. λ…Έλ“œμ˜ λ„€νŠΈμ›Œν¬ κ·œμΉ™μ„ μœ μ§€ κ΄€λ¦¬ν•΄μ€λ‹ˆλ‹€. 이 λ„€νŠΈμ›Œν¬ κ·œμΉ™μ΄ λ‚΄λΆ€ λ„€νŠΈμ›Œν¬ μ„Έμ…˜μ΄λ‚˜ ν΄λŸ¬μŠ€ν„° λ°”κΉ₯μ—μ„œ νŒŒλ“œλ‘œ λ„€νŠΈμ›Œν¬ 톡신을 ν•  수 μžˆλ„λ‘ ν•΄μ€λ‹ˆλ‹€.
  • CoreDNS: ν΄λΌμš°λ“œ λ„€μ΄ν‹°λΈŒ μ»΄ν“¨νŒ… μž¬λ‹¨μ—μ„œ λ³΄μ¦ν•˜λŠ” ν”„λ‘œμ νŠΈλ‘œ, λΉ λ₯΄κ³  μœ μ—°ν•œ DNS μ„œλ²„. μΏ λ²„ν…Œν‹°μŠ€ ν΄λŸ¬μŠ€ν„°μ—μ„œ 도메인 이름을 μ΄μš©ν•΄ ν†΅μ‹ ν•˜λŠ” 데 μ‚¬μš©ν•©λ‹ˆλ‹€.


νŒŒλ“œμ˜ 생λͺ…μ£ΌκΈ°λ‘œ μΏ λ²„λ„€ν‹°μŠ€ ꡬ성 μš”μ†Œ μ‚΄νŽ΄λ³΄κΈ°

kubernetes components

  1. kubectl을 톡해 API μ„œλ²„μ— νŒŒλ“œ 생성을 μš”μ²­
  2. (μ—…λ°μ΄νŠΈκ°€ μžˆμ„ λ•Œ λ§ˆλ‹€) API μ„œλ²„μ— μ „λ‹¬λœ λ‚΄μš©μ΄ 있으면 API μ„œλ²„λŠ” etcd에 μ „λ‹¬λœ λ‚΄μš©μ„ λͺ¨λ‘ 기둝해 ν΄λŸ¬μŠ€ν„°μ˜ μƒνƒœ 값을 μ΅œμ‹ μœΌλ‘œ μœ μ§€ν•©λ‹ˆλ‹€.
  3. API μ„œλ²„μ— νŒŒλ“œ 생성이 μš”μ²­λœ 것을 컨트둀러 λ§€λ‹ˆμ €κ°€ μΈμ§€ν•˜λ©΄ 컨트둀러 λ§€λ‹ˆμ €λŠ” νŒŒλ“œλ₯Ό μƒμ„±ν•˜κ³ , 이 μƒνƒœλ₯Ό APIμ„œλ²„μ— μ „λ‹¬ν•©λ‹ˆλ‹€. 참고둜 아직 μ–΄λ–€ μ›Œμ»€ λ…Έλ“œμ— νŒŒλ“œλ₯Ό μ μš©ν• μ§€λŠ” κ²°μ •λ˜μ§€ μ•Šμ€ μƒνƒœλ‘œ νŒŒλ“œλ§Œ μƒμ„±λœλ‹€.
  4. API μ„œλ²„μ— νŒŒλ“œκ°€ μƒμ„±λλ‹€λŠ” 정보λ₯Ό μŠ€μΌ€μ€„λŸ¬κ°€ μΈμ§€ν•©λ‹ˆλ‹€. μŠ€μΌ€μ€„λŸ¬λŠ” μƒμ„±λœ νŒŒλ“œλ₯Ό μ–΄λ–€ μ›Œμ»€ λ…Έλ“œμ— μ μš©ν• μ§€ 쑰건을 κ³ λ €ν•΄ κ²°μ •ν•˜κ³  ν•΄λ‹Ή μ›Œμ»€ λ…Έλ“œμ— νŒŒλ“œλ₯Ό λ„μš°λ„λ‘ μš”μ²­ν•©λ‹ˆλ‹€.
  5. APIμ„œλ²„μ— μ „λ‹¬λœ μ •λ³΄λŒ€λ‘œ μ§€μ •ν•œ μ›Œμ»€ λ…Έλ“œμ— νŒŒλ“œκ°€ 속해 μžˆλŠ”μ§€ μŠ€μΌ€μ€„λŸ¬κ°€ kubelet으둜 ν™•μΈν•©λ‹ˆλ‹€.
  6. kubeletμ—μ„œ μ»¨ν…Œμ΄λ„ˆ λŸ°νƒ€μž„μœΌλ‘œ νŒŒλ“œ 생성 μš”μ²­ν•©λ‹ˆλ‹€.
  7. νŒŒλ“œ 생성
  8. νŒŒλ“œ μ‚¬μš© κ°€λŠ₯ν•œ μƒνƒœκ°€ λ©λ‹ˆλ‹€.


μ°Έκ³ 
μΏ λ²„λ„€ν‹°μŠ€λŠ” 선언적인 μ‹œμŠ€ν…œ ꡬ쑰λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. 즉, 각 μš”μ†Œκ°€ μΆ”κ΅¬ν•˜λŠ” μƒνƒœλ₯Ό μ„ μ–Έν•˜λ©΄ ν˜„μž¬ μƒνƒœμ™€ λ§žλŠ”μ§€ μ κ²€ν•˜κ³  그것에 λ§žμΆ”λ €κ³  λ…Έλ ₯ν•˜λŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€.

선언적ꡬ쑰




🎯 였브젝트

μΏ λ²„λ„€ν‹°μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” κ΄€μ μ—μ„œ νŒŒλ“œ, λ””ν”Œλ‘œμ΄λ¨ΌνŠΈ 등은 μŠ€νŽ™(spec)κ³Ό μƒνƒœ(status) λ“±μ˜ 값을 가지고 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 값을 가지고 μžˆλŠ” νŒŒλ“œμ™€ λ””ν”Œλ‘œμ΄λ¨ΌνŠΈ 등을 κ°œλ³„ 속성을 포함해 λΆ€λ₯΄λŠ” λ‹¨μœ„λ₯Ό 였브젝트(Object)라고 ν•©λ‹ˆλ‹€.

μΏ λ²„λ„€ν‹°μŠ€ μ˜€λΈŒμ νŠΈλŠ” ν•˜λ‚˜μ˜ μ˜λ„λ₯Ό 담은 λ ˆμ½”λ“œμž…λ‹ˆλ‹€. 였브젝트λ₯Ό μƒμ„±ν•˜κ²Œ 되면, μΏ λ²„λ„€ν‹°μŠ€ μ‹œμŠ€ν…œμ€ κ·Έ 였브젝트 생성을 보μž₯ν•˜κΈ° μœ„ν•΄ μ§€μ†μ μœΌλ‘œ μž‘λ™ν•  κ²ƒμž…λ‹ˆλ‹€. 였브젝트λ₯Ό μƒμ„±ν•¨μœΌλ‘œμ¨, ν΄λŸ¬μŠ€ν„°μ˜ μ›Œν¬λ‘œλ“œλ₯Ό μ–΄λ–€ ν˜•νƒœλ‘œ 보이고자 ν•˜λŠ”μ§€μ— λŒ€ν•΄ 효과적으둜 μΏ λ²„λ„€ν‹°μŠ€ μ‹œμŠ€ν…œμ— μ „λ‹¬ν•©λ‹ˆλ‹€.

기본 였브젝트

  • νŒŒλ“œ(Pod): μΏ λ²„λ„€ν‹°μŠ€μ— μ‹€ν–‰λ˜λŠ” μ΅œμ†Œ λ‹¨μœ„, 독립적인 곡간과 μ‚¬μš© κ°€λŠ₯ν•œ IPλ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. ν•˜λ‚˜μ˜ νŒŒλ“œλŠ” 1개 μ΄μƒμ˜ μ»¨ν…Œμ΄λ„ˆλ₯Ό κ°–κ³  μžˆμŠ΅λ‹ˆλ‹€.
  • λ„€μž„μŠ€νŽ˜μ΄μŠ€(Namespaces): μΏ λ²„λ„€ν‹°μŠ€ ν΄λŸ¬μŠ€ν„°μ—μ„œ μ‚¬μš©λ˜λŠ” λ¦¬μ†ŒμŠ€λ“€μ„ ꡬ뢄해 κ΄€λ¦¬ν•˜λŠ” κ·Έλ£Ήμž…λ‹ˆλ‹€.
  • λ³Όλ₯¨(Volume): νŒŒλ“œκ°€ 생성될 λ•Œ νŒŒλ“œμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” 디렉터리λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 기본적으둜 νŒŒλ“œλŠ” μ˜μ†λ˜λŠ” κ°œλ…μ΄ μ•„λ‹ˆλΌ μ œκ³΅λ˜λŠ” 디렉토리도 μž„μ‹œλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ νŒŒλ“œκ°€ 사라지더라도 μ €μž₯κ³Ό 보쑴이 κ°€λŠ₯ν•œ 디렉터리λ₯Ό λ³Όλ₯¨ 였브젝트λ₯Ό 톡해 μƒμ„±ν•˜κ³  μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ„œλΉ„μŠ€(Service): νŒŒλ“œλŠ” ν΄λŸ¬μŠ€ν„° λ‚΄μ—μ„œ μœ λ™μ μ΄κΈ° λ•Œλ¬Έμ— 접속 정보가 고정일 수 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ νŒŒλ“œ 접속을 μ•ˆμ •μ μœΌλ‘œ μœ μ§€ν•˜λ„λ‘ μ„œλΉ„μŠ€λ₯Ό 톡해 λ‚΄/μ™ΈλΆ€λ‘œ μ—°κ²°λ©λ‹ˆλ‹€. μƒˆλ‘œμš΄ νŒŒλ“œκ°€ 생성될 λ•Œ λΆ€μ—¬λ˜λŠ” μƒˆλ‘œμš΄ IPλ₯Ό 기쑴에 μ œκ³΅ν•˜λ˜ κΈ°λŠ₯κ³Ό μ—°κ²°ν•΄ μ€λ‹ˆλ‹€.


κΈ°λ³Έ 였브젝트 말고도 μ—¬λŸ¬κ°€μ§€ μ˜€λΈŒμ νŠΈλ“€μ΄ μ‘΄μž¬ν•©λ‹ˆλ‹€.

λ””ν”Œλ‘œμ΄λ¨ΌνŠΈ

κΈ°λ³Έ μ˜€λΈŒμ νŠΈλ§ŒμœΌλ‘œλ„ μΏ λ²„λ„€ν‹°μŠ€λ₯Ό μ‚¬μš©ν•  수 μžˆμ§€λ§Œ 이λ₯Ό μ’€ 더 효율적으둜 μž‘λ™ν•˜λ„λ‘ κΈ°λŠ₯듀을 μ‘°ν•©ν•˜κ³  μΆ”κ°€ν•΄ κ΅¬ν˜„ν•œ 것이 λ””ν”Œλ‘œμ΄λ¨ΌνŠΈ μž…λ‹ˆλ‹€. λ””ν”Œλ‘œμ΄λ¨ΌνŠΈ μ˜€λΈŒμ νŠΈλŠ” νŒŒλ“œμ— 기본을 두고 있으며, λ ˆν”Œλ¦¬μΉ΄μ…‹ 였브젝트λ₯Ό 합쳐 놓은 ν˜•νƒœ μž…λ‹ˆλ‹€.
λ””ν”Œλ‘œμ΄λ¨ΌνŠΈ


λ ˆν”Œλ¦¬μΉ΄μ…‹

λ‹€μˆ˜μ˜ νŒŒλ“œκ°€ ν•„μš”ν•œλ° 이λ₯Ό ν•˜λ‚˜μ”© μƒμ„±ν•œλ‹€λ©΄ 맀우 λΉ„νš¨μœ¨μ μž…λ‹ˆλ‹€. κ·Έλž˜μ„œ μΏ λ²„λ„€ν‹°μŠ€μ—μ„œλŠ” λ‹€μˆ˜μ˜ νŒŒλ“œλ₯Ό λ§Œλ“œλŠ” λ ˆν”Œλ¦¬μΉ΄μ…‹ 였브젝트λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ νŒŒλ“œλ₯Ό 3개 λ§Œλ“€κ² λ‹€κ³  λ ˆν”Œλ¦¬μΉ΄μ…‹μ— μ„ μ–Έν•˜λ©΄ 컨트둀러 λ§€λ‹ˆμ €μ™€ μŠ€μΌ€μ€„λŸ¬κ°€ μ›Œμ»€ λ…Έλ“œμ— νŒŒλ“œ 3개λ₯Ό λ§Œλ“€λ„λ‘ μ„ μ–Έν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ ˆν”Œλ¦¬μΉ΄μ…‹μ€ νŒŒλ“œ 수λ₯Ό 보μž₯ν•˜λŠ” κΈ°λŠ₯만 μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ— 둀링 μ—…λ°μ΄νŠΈ κΈ°λŠ₯ 등이 μΆ”κ°€λœ λ””ν”Œλ‘œμ΄λ¨ΌνŠΈλ₯Ό μ‚¬μš©ν•΄ νŒŒλ“œ 수λ₯Ό κ΄€λ¦¬ν•˜κΈ°λ₯Ό ꢌμž₯ν•©λ‹ˆλ‹€. λ ˆν”Œλ¦¬μΉ΄μ…‹


였브젝트 μŠ€νŽ™

μ—¬λŸ¬κ°€μ§€ 섀정을 μ»€λ§¨λ“œ λͺ…λ ΉμœΌλ‘œλ§ŒμœΌλ‘œ μ‹€ν–‰ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 이런 섀정은 파일둜 μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ΄λ•Œ μž‘μ„±ν•˜λŠ” νŒŒμΌμ„ 였브젝트 μŠ€νŽ™μ΄λΌκ³  ν•©λ‹ˆλ‹€. 였브젝트 μŠ€νŽ™μ€ 일반적으둜 μ•Όλ―ˆ(YAML) λ¬Έλ²•μœΌλ‘œ μž‘μ„±ν•©λ‹ˆλ‹€.

λ‹€μŒμ€ 였브젝트 μŠ€νŽ™μ˜ μ˜ˆμ‹œμž…λ‹ˆλ‹€.

apiVersion: apps/v1
kind: Deployment   # μ’…λ₯˜
metadata:
  name: nginx-deployment     # λ””ν”Œλ‘œμ΄λ¨ΌνŠΈμ˜ 이름
  labels:                    # λ””ν”Œλ‘œμ΄λ¨ΌνŠΈμ˜ λ ˆμ΄λΈ”
    app: nginx
spec:
  replicas: 3       # λ ˆν”Œλ¦¬μΉ΄ 셋을 λͺ‡ 개 생성할지 κ²°μ •
  selector:         # μ…€λ ‰ν„°μ˜ λ ˆμ΄λΈ” 지정
    matchLabels:
      app: nginx
  template:
    metadata:       # ν…œν”Œλ¦Ώμ˜ 메타데이터 지정
      labels:
        app: nginx
    spec:           # ν…œν”Œλ¦Ώμ—μ„œ μ‚¬μš©ν•  μ»¨ν…Œμ΄λ„ˆ 이미지 지정
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80







πŸ™‡πŸ»β€β™‚οΈ μ°Έκ³ μ‚¬μ΄νŠΈ

λŒ“κΈ€λ‚¨κΈ°κΈ°