# 12.Controller - Replication & ReplicaSet

μ»¨νŠΈλ‘€λŸ¬λŠ” 적어도 ν•˜λ‚˜ μ΄μƒμ˜ μΏ λ²„λ„€ν‹°μŠ€ λ¦¬μ†ŒμŠ€ μœ ν˜•μ„ μΆ”μ ν•œλ‹€. 이 였브젝트 λŠ” μ˜λ„ν•œ μƒνƒœλ₯Ό ν‘œν˜„ν•˜λŠ” 사양 ν•„λ“œλ₯Ό 가지고 μžˆλ‹€. ν•΄λ‹Ή λ¦¬μ†ŒμŠ€μ˜ 컨트둀러(λ“€)은 ν˜„μž¬ μƒνƒœλ₯Ό μ˜λ„ν•œ μƒνƒœμ— κ°€κΉκ²Œ λ§Œλ“œλŠ” 역할을 ν•œλ‹€.

μ»¨νŠΈλ‘€λŸ¬λŠ” 슀슀둜 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€. 보닀 일반적으둜, μΏ λ²„λ„€ν‹°μŠ€μ—μ„œλŠ” μ»¨νŠΈλ‘€λŸ¬κ°€ API μ„œλ²„ 둜 μœ μš©ν•œ λΆ€μˆ˜μ μΈ νš¨κ³Όκ°€ μžˆλŠ” λ©”μ‹œμ§€λ₯Ό λ°œμ†‘ν•œλ‹€. κ·Έ μ˜ˆμ‹œλŠ” μ•„λž˜μ—μ„œ λ³Ό 수 μžˆλ‹€.

API μ„œλ²„λ₯Ό ν†΅ν•œ μ œμ–΄ 작(Job) μ»¨νŠΈλ‘€λŸ¬λŠ” μΏ λ²„λ„€ν‹°μŠ€ λ‚΄μž₯ 컨트둀러의 μ˜ˆμ‹œμ΄λ‹€. λ‚΄μž₯ μ»¨νŠΈλ‘€λŸ¬λŠ” ν΄λŸ¬μŠ€ν„° API μ„œλ²„μ™€ μƒν˜Έ μž‘μš©ν•˜λ©° μƒνƒœλ₯Ό κ΄€λ¦¬ν•œλ‹€.

μž‘μ€ 단일 νŒŒλ“œ(Pod) λ˜λŠ” μ—¬λŸ¬ νŒŒλ“œλ₯Ό μ‹€ν–‰ν•˜κ³ , μž‘μ—…μ„ μˆ˜ν–‰ν•œ λ‹€μŒ μ€‘μ§€ν•˜λŠ” μΏ λ²„λ„€ν‹°μŠ€ λ¦¬μ†ŒμŠ€ 이닀.

(일단 μŠ€μΌ€μ€„λ˜λ©΄, νŒŒλ“œ μ˜€λΈŒμ νŠΈλŠ” kubelet 의 μ˜λ„ν•œ μƒνƒœ 쀑 일뢀가 λœλ‹€.)

작 μ»¨νŠΈλ‘€λŸ¬κ°€ μƒˆλ‘œμš΄ μž‘μ—…μ„ ν™•μΈν•˜λ©΄, ν΄λŸ¬μŠ€ν„° μ–΄λ”˜κ°€μ—μ„œ λ…Έλ“œ μ§‘ν•©μ˜ kubelet이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ°μ— μ ν•©ν•œ 수의 νŒŒλ“œλ₯Ό μ‹€ν–‰ν•˜κ²Œ ν•œλ‹€. 작 μ»¨νŠΈλ‘€λŸ¬λŠ” μ–΄λ–€ νŒŒλ“œ λ˜λŠ” μ»¨ν…Œμ΄λ„ˆλ₯Ό 슀슀둜 μ‹€ν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€. λŒ€μ‹ , 작 μ»¨νŠΈλ‘€λŸ¬λŠ” API μ„œλ²„μ— νŒŒλ“œλ₯Ό μƒμ„±ν•˜κ±°λ‚˜ μ‚­μ œν•˜λ„λ‘ μ§€μ‹œν•œλ‹€. 컨트둀 ν”Œλ ˆμΈμ˜ λ‹€λ₯Έ μ»΄ν¬λ„ŒνŠΈλŠ” μ‹ κ·œ 정보 (μ˜ˆμ•½ 및 μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ” μƒˆ νŒŒλ“œκ°€ μžˆλ‹€λŠ” 정보)에 λŒ€μ‘ν•˜μ—¬, κ²°κ΅­ ν•΄λ‹Ή μž‘μ—…μ„ μ™„λ£Œμ‹œν‚¨λ‹€.

μƒˆ μž‘μ„ μƒμ„±ν•˜κ³  λ‚˜λ©΄, μ˜λ„ν•œ μƒνƒœλŠ” ν•΄λ‹Ή μž‘μ„ μ™„λ£Œν•˜λŠ” 것이 λœλ‹€. 작 μ»¨νŠΈλ‘€λŸ¬λŠ” ν˜„μž¬ μƒνƒœλ₯Ό μ˜λ„ν•œ μƒνƒœμ— κ°€κΉκ²Œ λ§Œλ“€λ©°, μ‚¬μš©μžκ°€ μ›ν•˜λŠ” μž‘μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ νŒŒλ“œλ₯Ό μƒμ„±ν•΄μ„œ 작이 μ™„λ£Œμ— κ°€κΉŒμ›Œ 지도둝 ν•œλ‹€.

λ˜ν•œ, μ»¨νŠΈλ‘€λŸ¬λŠ” 였브젝트의 섀정을 μ—…λ°μ΄νŠΈ ν•œλ‹€. μ˜ˆμ‹œ: μž‘μ„ μœ„ν•œ μž‘μ—…μ΄ μ’…λ£Œλœ 경우, 작 μ»¨νŠΈλ‘€λŸ¬λŠ” 작 μ˜€λΈŒμ νŠΈκ°€ Finished 둜 ν‘œμ‹œλ˜λ„λ‘ μ—…λ°μ΄νŠΈν•œλ‹€.

(이것은 μ§€κΈˆ λ°© μ˜¨λ„κ°€ μ„€μ •ν•œ μ˜¨λ„μΈ 것을 ν‘œμ‹œν•˜κΈ° μœ„ν•΄ μ‹€λ‚΄ μ˜¨λ„ 쑰절기의 빛을 λ„λŠ” 것과 μ•½κ°„ λΉ„μŠ·ν•˜λ‹€).

직접 μ œμ–΄ μž‘κ³ΌλŠ” λŒ€μ‘°μ μœΌλ‘œ, 일뢀 μ»¨νŠΈλ‘€λŸ¬λŠ” ν΄λŸ¬μŠ€ν„° μ™ΈλΆ€μ˜ 것을 λ³€κ²½ν•΄μ•Ό ν•  ν•„μš”κ°€ μžˆλ‹€.

예λ₯Ό λ“€μ–΄, λ§Œμ•½ 컨트둀 루프λ₯Ό μ‚¬μš©ν•΄μ„œ ν΄λŸ¬μŠ€ν„°μ— μΆ©λΆ„ν•œ λ…Έλ“œλ“€μ΄ μžˆλ„λ‘ λ§Œλ“œλŠ” 경우, ν•΄λ‹Ή μ»¨νŠΈλ‘€λŸ¬λŠ” ν•„μš”ν•  λ•Œ μƒˆ λ…Έλ“œλ₯Ό μ„€μ •ν•  수 μžˆλ„λ‘ ν˜„μž¬ ν΄λŸ¬μŠ€ν„° μ™ΈλΆ€μ˜ 무언가λ₯Ό ν•„μš”λ‘œ ν•œλ‹€.

μ™ΈλΆ€ μƒνƒœμ™€ μƒν˜Έ μž‘μš©ν•˜λŠ” μ»¨νŠΈλ‘€λŸ¬λŠ” API μ„œλ²„μ—μ„œ μ˜λ„ν•œ μƒνƒœλ₯Ό 찾은 λ‹€μŒ, μ™ΈλΆ€ μ‹œμŠ€ν…œκ³Ό 직접 ν†΅μ‹ ν•΄μ„œ ν˜„μž¬ μƒνƒœλ₯Ό 보닀 κ°€κΉκ²Œ λ§Œλ“ λ‹€.

(μ‹€μ œλ‘œ ν΄λŸ¬μŠ€ν„°μ˜ λ…Έλ“œλ₯Ό μˆ˜ν‰μœΌλ‘œ ν™•μž₯ν•˜λŠ” μ»¨νŠΈλ‘€λŸ¬κ°€ μžˆλ‹€. ν΄λŸ¬μŠ€ν„° μ˜€ν† μŠ€μΌ€μΌλ§μ„ λ³Έλ‹€.)

μ›ν•˜λŠ” μƒνƒœμ™€ ν˜„μž¬ μƒνƒœ μΏ λ²„λ„€ν‹°μŠ€λŠ” ν΄λΌμš°λ“œ-λ„€μ΄ν‹°λΈŒ κ΄€μ μ—μ„œ μ‹œμŠ€ν…œμ„ κ΄€μ°°ν•˜λ©°, 지속적인 변화에 λŒ€μ‘ν•  수 μžˆλ‹€.

μž‘μ—…μ΄ λ°œμƒν•¨μ— 따라 μ–΄λ–€ μ‹œμ μ—μ„œλ“  ν΄λŸ¬μŠ€ν„°κ°€ λ³€κ²½ 될 수 있으며 컨트둀 루프가 μžλ™μœΌλ‘œ μ‹€νŒ¨λ₯Ό λ°”λ‘œμž‘λŠ”λ‹€. μ΄λŠ” 잠재적으둜, ν΄λŸ¬μŠ€ν„°κ°€ μ•ˆμ •μ μΈ μƒνƒœμ— λ„λ‹¬ν•˜μ§€ λͺ»ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

ν΄λŸ¬μŠ€ν„°μ˜ μ»¨νŠΈλ‘€λŸ¬κ°€ μ‹€ν–‰ 쀑이고 μœ μš©ν•œ 변경을 μˆ˜ν–‰ν•  수 μžˆλŠ” ν•œ, 전체 μƒνƒœκ°€ μ•ˆμ •μ μΈμ§€ μ•„λ‹Œμ§€λŠ” μ€‘μš”ν•˜μ§€ μ•Šλ‹€.

λ””μžμΈ λ””μžμΈ 원리에 따라, μΏ λ²„λ„€ν‹°μŠ€λŠ” ν΄λŸ¬μŠ€ν„° μƒνƒœμ˜ 각 νŠΉμ • 츑면을 κ΄€λ¦¬ν•˜λŠ” λ§Žμ€ 컨트둀러λ₯Ό μ‚¬μš©ν•œλ‹€. κ°€μž₯ 일반적으둜, νŠΉμ • 컨트둀 루프 (컨트둀러)λŠ” μ˜λ„ν•œ μƒνƒœλ‘œμ„œ ν•œ μ’…λ₯˜μ˜ λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•˜κ³ , μ˜λ„ν•œ μƒνƒœλ‘œ λ§Œλ“€κΈ° μœ„ν•΄ λ‹€λ₯Έ μ’…λ₯˜μ˜ λ¦¬μ†ŒμŠ€λ₯Ό κ΄€λ¦¬ν•œλ‹€.

컨트둀 λ£¨ν”„λ“€λ‘œ μ—°κ²° κ΅¬μ„±λœ ν•˜λ‚˜μ˜ λͺ¨λ†€λ¦¬μ‹(monolithic) 집합보닀, κ°„λ‹¨ν•œ 컨트둀러λ₯Ό μ—¬λŸ¬ 개 μ‚¬μš©ν•˜λŠ” 것이 μœ μš©ν•˜λ‹€. μ»¨νŠΈλ‘€λŸ¬λŠ” μ‹€νŒ¨ν•  수 μžˆμœΌλ―€λ‘œ, μΏ λ²„λ„€ν‹°μŠ€λŠ” 이λ₯Ό ν—ˆμš©ν•˜λ„λ‘ λ””μžμΈλ˜μ—ˆλ‹€.

예λ₯Ό λ“€μ–΄, 작용 μ»¨νŠΈλ‘€λŸ¬λŠ” 작 였브젝트(μƒˆ μž‘μ—…μ„ λ°œκ²¬ν•˜κΈ° μœ„ν•΄)와 νŒŒλ“œ 였브젝트(μž‘μ„ μ‹€ν–‰ν•˜κ³ , μ™„λ£Œλœ μ‹œκΈ°λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄)λ₯Ό μΆ”μ ν•œλ‹€. 이 경우 νŒŒλ“œλŠ” 작 μ»¨νŠΈλ‘€λŸ¬κ°€ μƒμ„±ν•˜λŠ” 반면, μž‘μ€ λ‹€λ₯Έ μ»¨νŠΈλ‘€λŸ¬κ°€ μƒμ„±ν•œλ‹€.

μ°Έκ³ : λ™μΌν•œ μ’…λ₯˜μ˜ 였브젝트λ₯Ό λ§Œλ“€κ±°λ‚˜ μ—…λ°μ΄νŠΈν•˜λŠ” μ—¬λŸ¬ μ»¨νŠΈλ‘€λŸ¬κ°€ μžˆμ„ 수 μžˆλ‹€. 이면에, μΏ λ²„λ„€ν‹°μŠ€ μ»¨νŠΈλ‘€λŸ¬λŠ” 컨트둀 ν•˜κ³  μžˆλŠ” λ¦¬μ†ŒμŠ€μ— μ—°κ²°λœ λ¦¬μ†ŒμŠ€μ—λ§Œ 주의λ₯Ό κΈ°μšΈμΈλ‹€.

예λ₯Ό λ“€μ–΄, λ””ν”Œλ‘œμ΄λ¨ΌνŠΈμ™€ μž‘μ„ 가지고 μžˆλ‹€. 이 두 가지 λͺ¨λ‘ νŒŒλ“œλ₯Ό μƒμ„±ν•œλ‹€. 작 μ»¨νŠΈλ‘€λŸ¬λŠ” λ””ν”Œλ‘œμ΄λ¨ΌνŠΈκ°€ μƒμ„±ν•œ νŒŒλ“œλ₯Ό μ‚­μ œν•˜μ§€ μ•ŠλŠ”λ‹€. μ΄λŠ” μ»¨νŠΈλ‘€λŸ¬κ°€ ν•΄λ‹Ή νŒŒλ“œλ₯Ό κ΅¬λ³„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•  수 μžˆλŠ” 정보(λ ˆμ΄λΈ”)κ°€ 있기 λ•Œλ¬Έμ΄λ‹€.

컨트둀러λ₯Ό μ‹€ν–‰ν•˜λŠ” 방법 μΏ λ²„λ„€ν‹°μŠ€μ—λŠ” kube-controller-manager λ‚΄λΆ€μ—μ„œ μ‹€ν–‰λ˜λŠ” λ‚΄μž₯된 컨트둀러 집합이 μžˆλ‹€. 이 λ‚΄μž₯ μ»¨νŠΈλ‘€λŸ¬λŠ” μ€‘μš”ν•œ 핡심 λ™μž‘μ„ μ œκ³΅ν•œλ‹€.

λ””ν”Œλ‘œμ΄λ¨ΌνŠΈ μ»¨νŠΈλ‘€λŸ¬μ™€ 작 μ»¨νŠΈλ‘€λŸ¬λŠ” μΏ λ²„λ„€ν‹°μŠ€μ˜ 자체(β€œλ‚΄μž₯” 컨트둀러)둜 μ œκ³΅λ˜λŠ” 컨트둀러 μ˜ˆμ‹œμ΄λ‹€. μΏ λ²„λ„€ν‹°μŠ€λ₯Ό μ‚¬μš©ν•˜λ©΄ 볡원λ ₯이 λ›°μ–΄λ‚œ 컨트둀 ν”Œλ ˆμΈμ„ μ‹€ν–‰ν•  수 μžˆμœΌλ―€λ‘œ, μ–΄λ–€ λ‚΄μž₯ μ»¨νŠΈλ‘€λŸ¬κ°€ μ‹€νŒ¨ν•˜λ”λΌλ„ λ‹€λ₯Έ 컨트둀 ν”Œλ ˆμΈμ˜ 일뢀가 μž‘μ—…μ„ μ΄μ–΄μ„œ μˆ˜ν–‰ν•œλ‹€.

컨트둀 ν”Œλ ˆμΈμ˜ μ™ΈλΆ€μ—μ„œ μ‹€ν–‰ν•˜λŠ” 컨트둀러λ₯Ό μ°Ύμ•„μ„œ μΏ λ²„λ„€ν‹°μŠ€λ₯Ό ν™•μž₯ν•  수 μžˆλ‹€. λ˜λŠ”, μ›ν•˜λŠ” 경우 μƒˆ 컨트둀러λ₯Ό 직접 μž‘μ„±ν•  수 μžˆλ‹€. μ†Œμœ ν•˜κ³  μžˆλŠ” 컨트둀러λ₯Ό νŒŒλ“œ μ§‘ν•©μœΌλ‘œμ„œ μ‹€ν–‰ν•˜κ±°λ‚˜, λ˜λŠ” μΏ λ²„λ„€ν‹°μŠ€ μ™ΈλΆ€μ—μ„œ μ‹€ν–‰ν•  수 μžˆλ‹€. κ°€μž₯ μ ν•©ν•œ 것은 νŠΉμ • 컨트둀러의 κΈ°λŠ₯에 따라 달라진닀.

Last Updated: 6/18/2023, 2:13:15 PM