# 12.Controller - Replication & ReplicaSet
컨νΈλ‘€λ¬λ μ μ΄λ νλ μ΄μμ μΏ λ²λ€ν°μ€ 리μμ€ μ νμ μΆμ νλ€. μ΄ μ€λΈμ νΈ λ μλν μνλ₯Ό νννλ μ¬μ νλλ₯Ό κ°μ§κ³ μλ€. ν΄λΉ 리μμ€μ 컨νΈλ‘€λ¬(λ€)μ νμ¬ μνλ₯Ό μλν μνμ κ°κΉκ² λ§λλ μν μ νλ€.
컨νΈλ‘€λ¬λ μ€μ€λ‘ μμ μ μνν μ μλ€. λ³΄λ€ μΌλ°μ μΌλ‘, μΏ λ²λ€ν°μ€μμλ 컨νΈλ‘€λ¬κ° API μλ² λ‘ μ μ©ν λΆμμ μΈ ν¨κ³Όκ° μλ λ©μμ§λ₯Ό λ°μ‘νλ€. κ·Έ μμλ μλμμ λ³Ό μ μλ€.
API μλ²λ₯Ό ν΅ν μ μ΄ μ‘(Job) 컨νΈλ‘€λ¬λ μΏ λ²λ€ν°μ€ λ΄μ₯ 컨νΈλ‘€λ¬μ μμμ΄λ€. λ΄μ₯ 컨νΈλ‘€λ¬λ ν΄λ¬μ€ν° API μλ²μ μνΈ μμ©νλ©° μνλ₯Ό κ΄λ¦¬νλ€.
μ‘μ λ¨μΌ νλ(Pod) λλ μ¬λ¬ νλλ₯Ό μ€ννκ³ , μμ μ μνν λ€μ μ€μ§νλ μΏ λ²λ€ν°μ€ 리μμ€ μ΄λ€.
(μΌλ¨ μ€μΌμ€λλ©΄, νλ μ€λΈμ νΈλ kubelet μ μλν μν μ€ μΌλΆκ° λλ€.)
μ‘ μ»¨νΈλ‘€λ¬κ° μλ‘μ΄ μμ μ νμΈνλ©΄, ν΄λ¬μ€ν° μ΄λκ°μμ λ Έλ μ§ν©μ kubeletμ΄ μμ μ μννκΈ°μ μ ν©ν μμ νλλ₯Ό μ€ννκ² νλ€. μ‘ μ»¨νΈλ‘€λ¬λ μ΄λ€ νλ λλ 컨ν μ΄λλ₯Ό μ€μ€λ‘ μ€ννμ§ μλλ€. λμ , μ‘ μ»¨νΈλ‘€λ¬λ API μλ²μ νλλ₯Ό μμ±νκ±°λ μμ νλλ‘ μ§μνλ€. 컨νΈλ‘€ νλ μΈμ λ€λ₯Έ μ»΄ν¬λνΈλ μ κ· μ 보 (μμ½ λ° μ€νν΄μΌ νλ μ νλκ° μλ€λ μ 보)μ λμνμ¬, κ²°κ΅ ν΄λΉ μμ μ μλ£μν¨λ€.
μ μ‘μ μμ±νκ³ λλ©΄, μλν μνλ ν΄λΉ μ‘μ μλ£νλ κ²μ΄ λλ€. μ‘ μ»¨νΈλ‘€λ¬λ νμ¬ μνλ₯Ό μλν μνμ κ°κΉκ² λ§λ€λ©°, μ¬μ©μκ° μνλ μ‘μ μννκΈ° μν΄ νλλ₯Ό μμ±ν΄μ μ‘μ΄ μλ£μ κ°κΉμ μ§λλ‘ νλ€.
λν, 컨νΈλ‘€λ¬λ μ€λΈμ νΈμ μ€μ μ μ λ°μ΄νΈ νλ€. μμ: μ‘μ μν μμ μ΄ μ’ λ£λ κ²½μ°, μ‘ μ»¨νΈλ‘€λ¬λ μ‘ μ€λΈμ νΈκ° Finished λ‘ νμλλλ‘ μ λ°μ΄νΈνλ€.
(μ΄κ²μ μ§κΈ λ°© μ¨λκ° μ€μ ν μ¨λμΈ κ²μ νμνκΈ° μν΄ μ€λ΄ μ¨λ μ‘°μ κΈ°μ λΉμ λλ κ²κ³Ό μ½κ° λΉμ·νλ€).
μ§μ μ μ΄ μ‘κ³Όλ λμ‘°μ μΌλ‘, μΌλΆ 컨νΈλ‘€λ¬λ ν΄λ¬μ€ν° μΈλΆμ κ²μ λ³κ²½ν΄μΌ ν νμκ° μλ€.
μλ₯Ό λ€μ΄, λ§μ½ 컨νΈλ‘€ 루νλ₯Ό μ¬μ©ν΄μ ν΄λ¬μ€ν°μ μΆ©λΆν λ Έλλ€μ΄ μλλ‘ λ§λλ κ²½μ°, ν΄λΉ 컨νΈλ‘€λ¬λ νμν λ μ λ Έλλ₯Ό μ€μ ν μ μλλ‘ νμ¬ ν΄λ¬μ€ν° μΈλΆμ 무μΈκ°λ₯Ό νμλ‘ νλ€.
μΈλΆ μνμ μνΈ μμ©νλ 컨νΈλ‘€λ¬λ API μλ²μμ μλν μνλ₯Ό μ°Ύμ λ€μ, μΈλΆ μμ€ν κ³Ό μ§μ ν΅μ ν΄μ νμ¬ μνλ₯Ό λ³΄λ€ κ°κΉκ² λ§λ λ€.
(μ€μ λ‘ ν΄λ¬μ€ν°μ λ Έλλ₯Ό μνμΌλ‘ νμ₯νλ 컨νΈλ‘€λ¬κ° μλ€. ν΄λ¬μ€ν° μ€ν μ€μΌμΌλ§μ λ³Έλ€.)
μνλ μνμ νμ¬ μν μΏ λ²λ€ν°μ€λ ν΄λΌμ°λ-λ€μ΄ν°λΈ κ΄μ μμ μμ€ν μ κ΄μ°°νλ©°, μ§μμ μΈ λ³νμ λμν μ μλ€.
μμ μ΄ λ°μν¨μ λ°λΌ μ΄λ€ μμ μμλ ν΄λ¬μ€ν°κ° λ³κ²½ λ μ μμΌλ©° 컨νΈλ‘€ 루νκ° μλμΌλ‘ μ€ν¨λ₯Ό λ°λ‘μ‘λλ€. μ΄λ μ μ¬μ μΌλ‘, ν΄λ¬μ€ν°κ° μμ μ μΈ μνμ λλ¬νμ§ λͺ»νλ κ²μ μλ―Ένλ€.
ν΄λ¬μ€ν°μ 컨νΈλ‘€λ¬κ° μ€ν μ€μ΄κ³ μ μ©ν λ³κ²½μ μνν μ μλ ν, μ 체 μνκ° μμ μ μΈμ§ μλμ§λ μ€μνμ§ μλ€.
λμμΈ λμμΈ μ리μ λ°λΌ, μΏ λ²λ€ν°μ€λ ν΄λ¬μ€ν° μνμ κ° νΉμ μΈ‘λ©΄μ κ΄λ¦¬νλ λ§μ 컨νΈλ‘€λ¬λ₯Ό μ¬μ©νλ€. κ°μ₯ μΌλ°μ μΌλ‘, νΉμ 컨νΈλ‘€ 루ν (컨νΈλ‘€λ¬)λ μλν μνλ‘μ ν μ’ λ₯μ 리μμ€λ₯Ό μ¬μ©νκ³ , μλν μνλ‘ λ§λ€κΈ° μν΄ λ€λ₯Έ μ’ λ₯μ 리μμ€λ₯Ό κ΄λ¦¬νλ€.
컨νΈλ‘€ 루νλ€λ‘ μ°κ²° ꡬμ±λ νλμ λͺ¨λ리μ(monolithic) μ§ν©λ³΄λ€, κ°λ¨ν 컨νΈλ‘€λ¬λ₯Ό μ¬λ¬ κ° μ¬μ©νλ κ²μ΄ μ μ©νλ€. 컨νΈλ‘€λ¬λ μ€ν¨ν μ μμΌλ―λ‘, μΏ λ²λ€ν°μ€λ μ΄λ₯Ό νμ©νλλ‘ λμμΈλμλ€.
μλ₯Ό λ€μ΄, μ‘μ© μ»¨νΈλ‘€λ¬λ μ‘ μ€λΈμ νΈ(μ μμ μ λ°κ²¬νκΈ° μν΄)μ νλ μ€λΈμ νΈ(μ‘μ μ€ννκ³ , μλ£λ μκΈ°λ₯Ό νμΈνκΈ° μν΄)λ₯Ό μΆμ νλ€. μ΄ κ²½μ° νλλ μ‘ μ»¨νΈλ‘€λ¬κ° μμ±νλ λ°λ©΄, μ‘μ λ€λ₯Έ 컨νΈλ‘€λ¬κ° μμ±νλ€.
μ°Έκ³ : λμΌν μ’ λ₯μ μ€λΈμ νΈλ₯Ό λ§λ€κ±°λ μ λ°μ΄νΈνλ μ¬λ¬ 컨νΈλ‘€λ¬κ° μμ μ μλ€. μ΄λ©΄μ, μΏ λ²λ€ν°μ€ 컨νΈλ‘€λ¬λ 컨νΈλ‘€ νκ³ μλ 리μμ€μ μ°κ²°λ 리μμ€μλ§ μ£Όμλ₯Ό κΈ°μΈμΈλ€.
μλ₯Ό λ€μ΄, λνλ‘μ΄λ¨ΌνΈμ μ‘μ κ°μ§κ³ μλ€. μ΄ λ κ°μ§ λͺ¨λ νλλ₯Ό μμ±νλ€. μ‘ μ»¨νΈλ‘€λ¬λ λνλ‘μ΄λ¨ΌνΈκ° μμ±ν νλλ₯Ό μμ νμ§ μλλ€. μ΄λ 컨νΈλ‘€λ¬κ° ν΄λΉ νλλ₯Ό ꡬλ³νκΈ° μν΄ μ¬μ©ν μ μλ μ 보(λ μ΄λΈ)κ° μκΈ° λλ¬Έμ΄λ€.
컨νΈλ‘€λ¬λ₯Ό μ€ννλ λ°©λ² μΏ λ²λ€ν°μ€μλ kube-controller-manager λ΄λΆμμ μ€νλλ λ΄μ₯λ 컨νΈλ‘€λ¬ μ§ν©μ΄ μλ€. μ΄ λ΄μ₯ 컨νΈλ‘€λ¬λ μ€μν ν΅μ¬ λμμ μ 곡νλ€.
λνλ‘μ΄λ¨ΌνΈ 컨νΈλ‘€λ¬μ μ‘ μ»¨νΈλ‘€λ¬λ μΏ λ²λ€ν°μ€μ μ체(βλ΄μ₯β 컨νΈλ‘€λ¬)λ‘ μ 곡λλ 컨νΈλ‘€λ¬ μμμ΄λ€. μΏ λ²λ€ν°μ€λ₯Ό μ¬μ©νλ©΄ 볡μλ ₯μ΄ λ°μ΄λ 컨νΈλ‘€ νλ μΈμ μ€νν μ μμΌλ―λ‘, μ΄λ€ λ΄μ₯ 컨νΈλ‘€λ¬κ° μ€ν¨νλλΌλ λ€λ₯Έ 컨νΈλ‘€ νλ μΈμ μΌλΆκ° μμ μ μ΄μ΄μ μννλ€.
컨νΈλ‘€ νλ μΈμ μΈλΆμμ μ€ννλ 컨νΈλ‘€λ¬λ₯Ό μ°Ύμμ μΏ λ²λ€ν°μ€λ₯Ό νμ₯ν μ μλ€. λλ, μνλ κ²½μ° μ 컨νΈλ‘€λ¬λ₯Ό μ§μ μμ±ν μ μλ€. μμ νκ³ μλ 컨νΈλ‘€λ¬λ₯Ό νλ μ§ν©μΌλ‘μ μ€ννκ±°λ, λλ μΏ λ²λ€ν°μ€ μΈλΆμμ μ€νν μ μλ€. κ°μ₯ μ ν©ν κ²μ νΉμ 컨νΈλ‘€λ¬μ κΈ°λ₯μ λ°λΌ λ¬λΌμ§λ€.