ืคึผืจืึธื‘ืœืขืžืก ืžื™ื˜ DNS ืื™ืŸ Kubernetes. ืคื•ื‘ืœื™ืง ืคึผืึธืกื˜ืžืึธืจื˜ืขื

ื ืื˜ื™ืฅ ืื™ื‘ืขืจื–ืขืฆื•ื ื’: ื“ืึธืก ืื™ื– ืึทืŸ ืื™ื‘ืขืจื–ืขืฆื•ื ื’ ืคื•ืŸ ืึท ืขืคื ื˜ืœืขืš ืคึผืึธืกื˜ืžืึธืจื˜ืขื ืคื•ืŸ ื“ื™ ืคื™ืจืžืข 'ืก ื™ื ื–ืฉืขื ื™ืขืจื™ืข ื‘ืœืึธื’ ืคึผืจืขืคึผืœื™. ืขืก ื‘ืืฉืจื™ื™ื‘ื˜ ืึท ืคึผืจืึธื‘ืœืขื ืžื™ื˜ ืงืึทื ื˜ืจืึทืงืง ืื™ืŸ ืึท Kubernetes ืงื ื•ื™ืœ, ื•ื•ืึธืก ื’ืขืคื™ืจื˜ ืฆื• ื˜ื™ื™ืœ ื“ืึทื•ื ื˜ื™ื™ื ืคื•ืŸ ืขื˜ืœืขื›ืข ืคึผืจืึธื“ื•ืงืฆื™ืข ื‘ืึทื“ื™ื ื•ื ื’ืก.

ื“ืขืจ ืึทืจื˜ื™ืงืœ ืงืขืŸ ื–ื™ื™ืŸ ื ื•ืฆื™ืง ืคึฟืึทืจ ื™ืขื ืข ื•ื•ืึธืก ื•ื•ื™ืœืŸ ืฆื• ืœืขืจื ืขืŸ ืึท ื‘ื™ืกืœ ืžืขืจ ื•ื•ืขื’ืŸ ืคึผืึธืกื˜ืžืึธืจื˜ืขืžืก ืึธื“ืขืจ ืคืึทืจืžื™ื™ึทื“ืŸ ืขื˜ืœืขื›ืข ืคึผืึธื˜ืขื ืฆื™ืขืœ ื“ื ืก ืคึผืจืึธื‘ืœืขืžืก ืื™ืŸ ื“ืขืจ ืฆื•ืงื•ื ืคึฟื˜.

ืคึผืจืึธื‘ืœืขืžืก ืžื™ื˜ DNS ืื™ืŸ Kubernetes. ืคื•ื‘ืœื™ืง ืคึผืึธืกื˜ืžืึธืจื˜ืขื
ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ื“ื ืก
ืขืก ืงืขืŸ ื ื™ืฉื˜ ื–ื™ื™ืŸ DNS
ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื“ื ืก

ื ื‘ื™ืกืœ ื•ื•ืขื’ืŸ ืคึผืึธืกื˜ืžืึธืจื˜ืขืžืก ืื•ืŸ ืคึผืจืึทืกืขืกืึทื– ืื™ืŸ ืคึผืจืขืคึผืœื™

ื ืคึผืึธืกื˜ืžืึธืจื˜ืขื ื‘ืืฉืจื™ื™ื‘ื˜ ืึท ืžืึทืœืคืึทื ื’ืงืฉืึทืŸ ืึธื“ืขืจ ืขื˜ืœืขื›ืข ื’ืขืฉืขืขื ื™ืฉ ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข. ื“ื™ ืคึผืึธืกื˜ืžืึธืจื˜ืขื ื›ื•ืœืœ ืึท ื˜ื™ื™ืžืœื™ื™ืŸ ืคื•ืŸ ื’ืขืฉืขืขื ื™ืฉืŸ, ื‘ืึทื ื™ืฆืขืจ ืคึผืจืึทืœ, ื•ื•ืึธืจืฆืœ ื’ืจื•ื ื˜, ืึทืงืฉืึทื ื– ื’ืขื ื•ืžืขืŸ ืื•ืŸ ืœืขืงืฆื™ืขืก ื’ืขืœืขืจื ื˜.

ื–ื•ื›ืŸ SRE

ืื™ืŸ ื•ื•ืื›ื ืฉืจื™ืคื˜ ืžื™ื˜ื™ื ื’ื– ืžื™ื˜ ืคึผื™ืฆืึท, ืฆื•ื•ื™ืฉืŸ ื“ื™ ื˜ืขื›ื ื™ืฉ ืžืึทื ืฉืึทืคึฟื˜, ืžื™ืจ ื˜ื™ื™ืœืŸ ืคืึทืจืฉื™ื“ืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข. ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืžืขืจืกื˜ ื•ื•ื™ื›ื˜ื™ืง ื˜ื™ื™ืœืŸ ืคื•ืŸ ืึทื–ืึท ืžื™ื˜ื™ื ื’ื– ืื™ื– ืคึผืึธืกื˜-ืžืึธืจื˜ืขืžืก, ื•ื•ืึธืก ื–ืขื ืขืŸ ืžืขืจืกื˜ ืึธืคื˜ ื‘ืื’ืœื™ื™ื˜ ื“ื•ืจืš ืึท ืคึผืจืขื–ืขื ื˜ื™ืจื•ื ื’ ืžื™ื˜ ืกืœื™ื™ื“ื– ืื•ืŸ ืึท ืžืขืจ ื˜ื™ืฃ ืึทื ืึทืœื™ืกื™ืก ืคื•ืŸ ื“ืขื ืื™ื ืฆื™ื“ืขื ื˜. ื›ืึธื˜ืฉ ืžื™ืจ ืงืœืึทืคึผืŸ ื ื™ืฉื˜ ื ืึธืš ืคึผืึธืกื˜-ืžืึธืจื˜ืขืžืก, ืžื™ืจ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืึทื ื˜ื•ื•ื™ืงืœืขืŸ ืึท ืงื•ืœื˜ื•ืจ ืคื•ืŸ "ืงื™ื™ืŸ ืฉื•ืœื“" (ื‘ืœืขื ื“ื™ืง ืงื•ืœื˜ื•ืจ). ืžื™ืจ ื’ืœื•ื™ื‘ืŸ ืึทื– ืฉืจื™ื™ื‘ืŸ ืื•ืŸ ืคึผืจื™ื–ืขื ื˜ื™ื ื’ ืคึผืึธืกื˜ืžืึธืจื˜ืขืžืก ืงืขื ืขืŸ ื”ืขืœืคึฟืŸ ืื•ื ื“ื– (ืื•ืŸ ืื ื“ืขืจืข) ืคืึทืจืžื™ื™ึทื“ืŸ ืขื ืœืขืš ื™ื ืกืึทื“ืึทื ืฅ ืื™ืŸ ื“ืขืจ ืฆื•ืงื•ื ืคึฟื˜, ื•ื•ืึธืก ืื™ื– ื•ื•ืึธืก ืžื™ืจ ื˜ื™ื™ืœืŸ ื–ื™ื™.

ืžืขื ื˜ืฉืŸ ื™ื ื•ื•ืึทืœื•ื•ื“ ืื™ืŸ ืึทืŸ ืื™ื ืฆื™ื“ืขื ื˜ ื–ืึธืœ ืคื™ืœืŸ ืึทื– ื–ื™ื™ ืงืขื ืขืŸ ืจืขื“ืŸ ืื™ืŸ ื“ืขื˜ืึทืœ ืึธืŸ ืžื•ืจื ืคื•ืŸ ืฉื˜ืจืึธืฃ ืึธื“ืขืจ ื ืงืžื”. ืงื™ื™ืŸ ืฉื•ืœื“! ืฉืจื™ื™ื‘ืŸ ืึท ืคึผืึธืกื˜ืžืึธืจื˜ืขื ืื™ื– ื ื™ืฉื˜ ืึท ืฉื˜ืจืึธืฃ, ืึธื‘ืขืจ ืึท ืœืขืจื ืขืŸ ื’ืขืœืขื’ื ื”ื™ื™ื˜ ืคึฟืึทืจ ื“ื™ ื’ืื ืฆืข ืคื™ืจืžืข.

ื”ืึทืœื˜ืŸ ืงืึทืœืžืก ืื•ืŸ ื“ืขื•ื•ืึธืคึผืก: S ืื™ื– ืคึฟืึทืจ ื™ื™ึทื ื˜ื™ื™ืœื•ื ื’

ืคึผืจืึธื‘ืœืขืžืก ืžื™ื˜ DNS ืื™ืŸ Kubernetes. ืคึผืึธืกื˜ืžืึธืจื˜ืขื

Date: 28.02.2020

ืžื—ื‘ืจื™ื: Amet U., Andrey S., Igor K., Alexey P.

ืกื˜ืื˜ื•ืก: ื’ืขืขื ื“ื™ืงื˜

Briefly: ื˜ื™ื™ืœ DNS ืึทื ืึทื•ื•ื™ื™ืœืึทื‘ื™ืœื™ื˜ื™ (26 ืžื™ืŸ) ืคึฟืึทืจ ืขื˜ืœืขื›ืข ื‘ืึทื“ื™ื ื•ื ื’ืก ืื™ืŸ ื“ื™ Kubernetes ืงื ื•ื™ืœ

ื”ืฉืคึผืขื”: 15000 ื’ืขืฉืขืขื ื™ืฉืŸ ืคืึทืจืคืึทืœืŸ ืคึฟืึทืจ ืกืขืจื•ื•ื™ืกืขืก ื, ื‘ ืื•ืŸ ืกื™

ืฉื•ืจืฉ ืกื™ื‘ื”: Kube-proxy ืื™ื– ื ื™ืฉื˜ ื‘ื™ื›ื•ืœืช ืฆื• ืจื™ื›ื˜ื™ืง ื‘ืึทื–ื™ื™ึทื˜ื™ืงืŸ ืึทืŸ ืึทืœื˜ ืคึผืึธื–ื™ืฆื™ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืงืึทื ื˜ืจืึทืงืง ื˜ื™ืฉ, ืึทื–ื•ื™ ืขื˜ืœืขื›ืข ืกืขืจื•ื•ื™ืกืขืก ื–ืขื ืขืŸ ื ืึธืš ื˜ืจื™ื™ื ื’ ืฆื• ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ื ื™ื˜-ืขื’ื–ื™ืกื˜ืึทื ื˜ ืคึผืึธื“ืก

E0228 20:13:53.795782       1 proxier.go:610] Failed to delete kube-system/kube-dns:dns endpoint connections, error: error deleting conntrack entries for UDP peer {100.64.0.10, 100.110.33.231}, error: conntrack command returned: ...

ื˜ืจื™ื’ืขืจ: ืจืขื›ื˜ ืฆื• ื“ืขืจ ื ื™ื“ืขืจื™ืง ืžืึทืกืข ืื™ืŸ ื“ื™ Kubernetes ืงื ื•ื™ืœ, CoreDNS-autoscaler ืจื™ื“ื•ืกื˜ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืคึผืึธื“ืก ืื™ืŸ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืคื•ืŸ ื“ืจื™ื™ ืฆื• ืฆื•ื•ื™ื™

ืœื™ื™ื–ื•ื ื’: ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืคื•ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื™ื ื™ืฉื™ื™ื™ื˜ื™ื“ ื“ื™ ืฉืึทืคื•ื ื’ ืคื•ืŸ ื ื™ื™ึท ื ืึธื•ื“ื–, CoreDNS-autoscaler ืฆื•ื’ืขื’ืขื‘ืŸ ืžืขืจ ืคึผืึธื“ืก ืฆื• ื“ื™ื ืขืŸ ื“ืขื ืงื ื•ื™ืœ, ื•ื•ืึธืก ืคึผืจืึทื•ื•ืึธื•ืงื˜ ืึท ืจื™ืจื™ื™ื˜ ืคื•ืŸ ื“ื™ ืงืึธื ื˜ืจืึทืงืง ื˜ื™ืฉ

ื“ืขื˜ืขืงืฉืึทืŸ: ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืžืึธื ื™ื˜ืึธืจื™ื ื’ ื“ื™ื˜ืขืงื˜ืึทื“ ืึท ื’ืจื•ื™ืก ื ื•ืžืขืจ ืคื•ืŸ 5xx ืขืจืจืึธืจืก ืคึฟืึทืจ ืกืขืจื•ื•ื™ืกืขืก ื, ื‘ ืื•ืŸ C ืื•ืŸ ื™ื ื™ืฉื™ื™ื™ื˜ื™ื“ ืึท ืจื•ืฃ ืฆื• ื“ื™ ืขื ื“ื–ืฉืึทื ื™ืจื– ืื•ื™ืฃ ืคืœื™ื›ื˜

ืคึผืจืึธื‘ืœืขืžืก ืžื™ื˜ DNS ืื™ืŸ Kubernetes. ืคื•ื‘ืœื™ืง ืคึผืึธืกื˜ืžืึธืจื˜ืขื
5xx ืขืจืจืึธืจืก ืื™ืŸ ืงื™ื‘ืึทื ืึท

ื˜ืขื˜ื™ืงื™ื™ื˜

ืงืึทืžืฃ
ื˜ื™ืคึผ
ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš
ืึทืจื‘ืขื˜

ื“ื™ืกื™ื™ื‘ืึทืœ ืึทื•ื˜ืึธืกืงืึทืœืขืจ ืคึฟืึทืจ CoreDNS
ืคืึทืจื”ื™ื˜ืŸ
ืึทืžืขื˜ ื™ื•.
ื“ืขื•ื•ืึธืคึผืก-695

ืฉื˜ืขืœืŸ ืึทืจื•ื™ืฃ ืึท ืงืึทื˜ืฉื™ื ื’ ื“ื ืก ืกืขืจื•ื•ืขืจ
ืคืึทืจืžื™ื ืขืจืŸ
ืžืึทืงืก V.
ื“ืขื•ื•ืึธืคึผืก-665

ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืงืึทื ื˜ืจืึทืงืง ืžืึธื ื™ื˜ืึธืจื™ื ื’
ืคืึทืจื”ื™ื˜ืŸ
ืึทืžืขื˜ ื™ื•.
ื“ืขื•ื•ืึธืคึผืก-674

ืœืขืงืฆื™ืขืก ื’ืขืœืขืจื ื˜

ื•ื•ืึธืก ืื™ื– ื’ื•ื˜:

  • ื“ื™ ืžืึธื ื™ื˜ืึธืจื™ื ื’ ื’ืขืืจื‘ืขื˜ ื’ืขื–ื•ื ื˜. ื“ืขืจ ืขื ื˜ืคืขืจ ืื™ื– ื’ืขื•ื•ืขืŸ ืฉื ืขืœ ืื•ืŸ ืึธืจื’ืึทื ื™ื–ื™ืจื˜
  • ืžื™ืจ ื”ืึธื‘ืŸ ืงื™ื™ืŸ ืœื™ืžืึทืฅ ืื•ื™ืฃ ื“ื™ ื ืึธื•ื“ื–

ื•ื•ืึธืก ืื™ื– ืคืึทืœืฉ:

  • ื ืึธืš ืื•ืžื‘ืึทืงืึทื ื˜ ืคืึทืงื˜ื™ืฉ ื•ื•ืึธืจืฆืœ ื’ืจื•ื ื˜, ืขื ืœืขืš ืฆื• ืกืคึผืขืฆื™ืคื™ืฉ ื–ืฉื•ืง ืื™ืŸ ืงืึธื ื˜ืจืึทืงื˜
  • ื›ืœ ืึทืงืฉืึทื ื– ืจื™ื›ื˜ื™ืง ื‘ืœื•ื™ื– ื“ื™ ืงืึทื ืกืึทืงื•ื•ืขื ืกืึทื–, ื ื™ืฉื˜ ื“ื™ ื•ื•ืึธืจืฆืœ ื’ืจื•ื ื˜ (ื–ืฉื•ืง)
  • ืžื™ืจ ื’ืขื•ื•ืื•ืกื˜ ืึทื– ื’ื™ื›ืขืจ ืึธื“ืขืจ ืฉืคึผืขื˜ืขืจ ืžื™ืจ ืงืขืŸ ื”ืึธื‘ืŸ ืคึผืจืึธื‘ืœืขืžืก ืžื™ื˜ ื“ื ืก, ืึธื‘ืขืจ ืžื™ืจ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ืคึผืจื™ื™ืึธืจืึทื˜ื™ื™ื– ื“ื™ ื˜ืึทืกืงืก

ื•ื•ื• ืžื™ืจ ื”ืึธื‘ืŸ ืžืึทื–ืœื“ื™ืง:

  • ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื™ื– ื˜ืจื™ื’ืขืจื“ ื“ื•ืจืš CoreDNS-autoscaler, ื•ื•ืึธืก ืึธื•ื•ื•ืขืจืจื™ื™ื˜ื™ื“ ื“ื™ ืงืึธื ื˜ืจืึทืงืง ื˜ื™ืฉ
  • ื“ืขืจ ื–ืฉื•ืง ืึทืคืขืงื˜ืึทื“ ื‘ืœื•ื™ื– ืขื˜ืœืขื›ืข ืกืขืจื•ื•ื™ืกืขืก

ื˜ื™ื™ืžืœื™ื™ืŸ (EET)

ืฆื™ื™ึทื˜
ืงืึทืžืฃ

22:13
CoreDNS-autoscaler ืจื™ื“ื•ืกื˜ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืคึผืึธื“ืก ืคื•ืŸ ื“ืจื™ื™ ืฆื• ืฆื•ื•ื™ื™

22:18
ืขื ื“ื–ืฉืึทื ื™ืจื– ืื•ื™ืฃ ืคืœื™ื›ื˜ ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืจื•ืคื˜ ืคื•ืŸ ื“ื™ ืžืึธื ื™ื˜ืึธืจื™ื ื’ ืกื™ืกื˜ืขื

22:21
ื“ื™ ืคืœื™ื›ื˜ ืขื ื“ื–ืฉืึทื ื™ืจื– ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ื’ืขืคึฟื™ื ืขืŸ ื“ื™ ื’ืจื•ื ื˜ ืคื•ืŸ ื“ื™ ืขืจืจืึธืจืก.

22:39
ืขื ื“ื–ืฉืึทื ื™ืจื– ืื•ื™ืฃ ืคืœื™ื›ื˜ ืื ื’ืขื”ื•ื™ื‘ืŸ ืจืึธื•ืœื™ื ื’ ืฆื•ืจื™ืง ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืœืขืฆื˜ืข ื‘ืึทื“ื™ื ื•ื ื’ืก ืฆื• ื“ื™ ืคืจื™ืขืจื“ื™ืงืข ื•ื•ืขืจืกื™ืข

22:40
5xx ืขืจืจืึธืจืก ืคืืจืฉื˜ืืคื˜ ื–ื™ืš, ื“ื™ ืกื™ื˜ื•ืึทืฆื™ืข ืื™ื– ืกื˜ื™ื™ื‘ืึทืœื™ื™ื–ื“

  • ืฆื™ื™ื˜ ืฆื• ื“ืขืจืงืขื ืขืŸ: 4 min
  • ืฆื™ื™ื˜ ืื™ื™ื“ืขืจ ืงืึทืžืฃ: 21 min
  • ืฆื™ื™ื˜ ืฆื• ืคืึทืจืจื™ื›ื˜ืŸ: 1 min

ื ืึธืš ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข

ืฆื• ืžื™ื ืึทืžื™ื™ื– ืงืคึผื• ื‘ืึทื ื™ืฅ, ื“ื™ ืœื™ื ื•ืงืก ืงืขืจืŸ ื ื™ืฆื˜ ืขืคึผืขืก ื’ืขืจื•ืคืŸ ืงืึธื ื˜ืจืึทืงืง. ืื™ืŸ ืงื•ืจืฅ, ื“ืึธืก ืื™ื– ืึท ื ื•ืฆืŸ ื•ื•ืึธืก ื›ึผื•ืœืœ ืึท ืจืฉื™ืžื” ืคื•ืŸ NAT ืจืขืงืึธืจื“ืก ื•ื•ืึธืก ื–ืขื ืขืŸ ืกื˜ืึธืจื“ ืื™ืŸ ืึท ืกืคึผืขืฆื™ืขืœ ื˜ื™ืฉ. ื•ื•ืขืŸ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืคึผืึทืงืึทื˜ ืงื•ืžื˜ ืคื•ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืคึผืึธื“ ืฆื• ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืคึผืึธื“ ื•ื•ื™ ืคืจื™ืขืจ, ื“ื™ ืœืขืฆื˜ IP ืึทื“ืจืขืก ื•ื•ืขื˜ ื ื™ืฉื˜ ื–ื™ื™ืŸ ืจื™ืงืึทืœืงื™ืึทืœื™ื™ื˜ื™ื“, ืึธื‘ืขืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื ื•ืžืขืŸ ืคื•ืŸ ื“ื™ ืงืึทื ื˜ืจืึทืงืง ื˜ื™ืฉ.
ืคึผืจืึธื‘ืœืขืžืก ืžื™ื˜ DNS ืื™ืŸ Kubernetes. ืคื•ื‘ืœื™ืง ืคึผืึธืกื˜ืžืึธืจื˜ืขื
ื•ื•ื™ ืงืึทื ื˜ืจืึทืงืง ืึทืจื‘ืขื˜

ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคื•ืŸ

ื“ืึธืก ืื™ื– ื’ืขื•ื•ืขืŸ ืึท ื‘ื™ื™ืฉืคึผื™ืœ ืคื•ืŸ ืื™ื™ื ืขืจ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืคึผืึธืกื˜ืžืึธืจื˜ืขืžืก ืžื™ื˜ ืขื˜ืœืขื›ืข ื ื•ืฆื™ืง ืœื™ื ืงืก. ืกืคึผืขืฆื™ืขืœ ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, ืžื™ืจ ื˜ื™ื™ืœืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืึธืก ืงืขืŸ ื–ื™ื™ืŸ ื ื•ืฆื™ืง ืคึฟืึทืจ ืื ื“ืขืจืข ืงืึธืžืคึผืึทื ื™ืขืก. ื“ืขืจืคึฟืึทืจ ื”ืึธื‘ืŸ ืžื™ืจ ื ื™ืฉื˜ ืงื™ื™ืŸ ืžื•ืจื ืฆื• ืžืึทื›ืŸ ื’ืจืฒึทื–ืŸ ืื•ืŸ ื“ืขืจืคึฟืึทืจ ืžืึทื›ืŸ ืžื™ืจ ืื™ื™ื ืขืจ ืคึฟื•ืŸ ืื•ื ื“ื–ืขืจืข ืคึผืึธืกื˜ืžืึธืจื˜ืขืžืก ืคึผื•ื‘ืœื™ืงื•ื. ื“ืึธ ื–ืขื ืขืŸ ืขื˜ืœืขื›ืข ืžืขืจ ื˜ืฉื™ืงืึทื•ื•ืข ืฆื™ื‘ื•ืจ ืคึผืึธืกื˜ืžืึธืจื˜ืขืžืก:

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’