เชจเซเชฏเซ‚เชจเชคเชฎ เชธเชงเซเชงเชฐ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ

เชฒเซ‡เช–เชจเซ‹ เช…เชจเซเชตเชพเชฆ เช•เซ‹เชฐเซเชธเชจเซ€ เชถเชฐเซ‚เช†เชคเชจเซ€ เชชเซ‚เชฐเซเชตเชธเช‚เชงเซเชฏเชพเช เชคเซˆเชฏเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹ "DevOps เชชเซเชฐเซ‡เช•เซเชŸเชฟเชธ เช…เชจเซ‡ เชŸเซ‚เชฒเซเชธ".

เชจเซเชฏเซ‚เชจเชคเชฎ เชธเชงเซเชงเชฐ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ

เชœเซ‹ เชคเชฎเซ‡ เช† เชตเชพเช‚เชšเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ‹, เชคเซ‹ เชคเชฎเซ‡ เช•เชฆเชพเชš เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชตเชฟเชถเซ‡ เช•เช‚เชˆเช• เชธเชพเช‚เชญเชณเซเชฏเซเช‚ เชนเชถเซ‡ (เช…เชจเซ‡ เชœเซ‹ เชจเชนเซ€เช‚, เชคเซ‹ เชคเชฎเซ‡ เช…เชนเซ€เช‚ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชชเชนเซ‹เช‚เชšเซเชฏเชพ?) เชชเชฐเช‚เชคเซ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชฌเชฐเชพเชฌเชฐ เชถเซเช‚ เช›เซ‡? เช† "เช”เชฆเซเชฏเซ‹เช—เชฟเช•-เช—เซเชฐเซ‡เชก เช•เชจเซเชŸเซ‡เชจเชฐเชจเซเช‚ เช“เชฐเซเช•เซ‡เชธเซเชŸเซเชฐเซ‡เชถเชจ"? เช…เชฅเชตเชพ "เช•เซเชฒเชพเช‰เชก-เชจเซ‡เชŸเชฟเชต เช“เชชเชฐเซ‡เชŸเชฟเช‚เช— เชธเชฟเชธเซเชŸเชฎ"? เช†เชจเซ‹ เชชเชฃ เช…เชฐเซเชฅ เชถเซเช‚ เช›เซ‡?

เชธเชพเชšเซเช‚ เช•เชนเซเช‚ เชคเซ‹, เชฎเชจเซ‡ 100% เช–เชพเชคเชฐเซ€ เชจเชฅเซ€. เชชเชฐเช‚เชคเซ เชฎเชจเซ‡ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เช†เช‚เชคเชฐเชฟเช•เชฎเชพเช‚ เช–เซ‹เชฆเชตเซเช‚ เช…เชจเซ‡ เชเชฌเซเชธเซเชŸเซเชฐเซ‡เช•เซเชถเชจเชจเชพ เช˜เชฃเชพ เชธเซเชคเชฐเซ‹ เชนเซ‡เช เชณ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชฎเชพเช‚ เช–เชฐเซ‡เช–เชฐ เชถเซเช‚ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡ เชœเซ‹เชตเชพเชจเซเช‚ เชฐเชธเชชเซเชฐเชฆ เช›เซ‡. เชคเซ‹ เชฎเชพเชคเซเชฐ เชฎเชจเซ‹เชฐเช‚เชœเชจ เชฎเชพเชŸเซ‡, เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช เช•เซ‡ เชจเซเชฏเซ‚เชจเชคเชฎ โ€œเช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช•เซเชฒเชธเซเชŸเชฐโ€ เช–เชฐเซ‡เช–เชฐ เช•เซ‡เชตเซเช‚ เชฆเซ‡เช–เชพเชฏ เช›เซ‡. (เช† เช•เชฐเชคเชพเช‚ เช˜เชฃเซเช‚ เชธเชฐเชณ เชนเชถเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชง เชนเชพเชฐเซเชก เชตเซ‡.)

เชนเซเช‚ เชงเชพเชฐเซเช‚ เช›เซเช‚ เช•เซ‡ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ, เชฒเชฟเชจเช•เซเชธ เช…เชจเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐเชจเซเช‚ เชฎเซ‚เชณเชญเซ‚เชค เชœเซเชžเชพเชจ เช›เซ‡. เช…เชฎเซ‡ เช…เชนเซ€เช‚ เชœเซ‡ เชชเชฃ เชตเชพเชค เช•เชฐเซ€เช เช›เซ€เช เชคเซ‡ เชซเช•เซเชค เชธเช‚เชถเซ‹เชงเชจ/เชถเชฟเช•เซเชทเชฃ เชนเซ‡เชคเซเช“ เชฎเชพเชŸเซ‡ เช›เซ‡, เชคเซ‡เชฎเชพเช‚เชฅเซ€ เช•เซ‹เชˆ เชชเชฃ เช‰เชคเซเชชเชพเชฆเชจเชฎเชพเช‚ เชฎเซ‚เช•เชถเซ‹ เชจเชนเซ€เช‚!

เชเชพเช‚เช–เซ€

เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชฎเชพเช‚ เช˜เชฃเชพ เช˜เชŸเช•เซ‹ เช›เซ‡. เช…เชจเซเชธเชพเชฐ เชตเชฟเช•เชฟเชชเซ€เชกเชฟเชฏเชพ, เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฆเซ‡เช–เชพเชฏ เช›เซ‡:

เชจเซเชฏเซ‚เชจเชคเชฎ เชธเชงเซเชงเชฐ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ

เช…เชนเซ€เช‚ เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ เช†เช  เช˜เชŸเช•เซ‹ เชฆเชฐเซเชถเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡, เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เชคเซ‡เชฎเชพเช‚เชจเชพ เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพเชจเซ‡ เช…เชตเช—เชฃเซ€เชถเซเช‚. เชนเซเช‚ เชœเชฃเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เช•เซ‡ เชจเซเชฏเซ‚เชจเชคเชฎ เชตเชธเซเชคเซ เชœเซ‡เชจเซ‡ เชตเซเชฏเชพเชœเชฌเซ€ เชฐเซ€เชคเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช•เชนเซ€ เชถเช•เชพเชฏ เชคเซ‡ เชคเซเชฐเชฃ เชฎเซเช–เซเชฏ เช˜เชŸเช•เซ‹ เชงเชฐเชพเชตเซ‡ เช›เซ‡:

  • เช•เซเชฌเซ‡เชฒเซ‡เชŸ
  • kube-apiserver (เชœเซ‡ etcd เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ‡ เช›เซ‡ - เชคเซ‡เชจเซ‹ เชกเซ‡เชŸเชพเชฌเซ‡เช)
  • เช•เชจเซเชŸเซ‡เชจเชฐ เชฐเชจเชŸเชพเช‡เชฎ (เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชกเซ‹เช•เชฐ)

เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช เช•เซ‡ เชคเซ‡ เชฆเชฐเซ‡เช• เชตเชฟเชถเซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชถเซเช‚ เช•เชนเซ‡ เช›เซ‡ (rus., เช…เช‚เช—เซเชฐเซ‡เชœเซ€.). เชธเซŒ เชชเซเชฐเชฅเชฎ เช•เซเชฌเซ‡เชฒเซ‡เชŸ:

เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เชฆเชฐเซ‡เช• เชจเซ‹เชก เชชเชฐ เชเช• เชเชœเชจเซเชŸ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซ‹ เช›เซ‡. เชคเซ‡ เช–เชพเชคเชฐเซ€ เช•เชฐเซ‡ เช›เซ‡ เช•เซ‡ เชชเซ‹เชกเชฎเชพเช‚ เช•เชจเซเชŸเซ‡เชจเชฐ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡.

เชชเชฐเซเชฏเชพเชชเซเชค เชธเชฐเชณ เชฒเชพเช—เซ‡ เช›เซ‡. เชคเซ‡ เชตเชฟเชทเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐ เชฐเชจเชŸเชพเช‡เชฎเซเชธ (เช•เชจเซเชŸเซ‡เชจเชฐ เชฐเชจเชŸเชพเช‡เชฎ)?

เช•เชจเซเชŸเซ‡เชจเชฐ เชฐเชจเชŸเชพเชˆเชฎ เช เช•เชจเซเชŸเซ‡เชจเชฐ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชฐเชšเชพเชฏเซ‡เชฒ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช›เซ‡.

เช–เซ‚เชฌ เชœ เชฎเชพเชนเชฟเชคเซ€เชชเซเชฐเชฆ. เชชเชฐเช‚เชคเซ เชœเซ‹ เชคเชฎเซ‡ เชกเซ‹เช•เชฐเชฅเซ€ เชชเชฐเชฟเชšเชฟเชค เช›เซ‹, เชคเซ‹ เชคเชฎเชพเชฐเซ‡ เชคเซ‡ เชถเซเช‚ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡เชจเซ‹ เชธเชพเชฎเชพเชจเซเชฏ เช–เซเชฏเชพเชฒ เชนเซ‹เชตเซ‹ เชœเซ‹เชˆเช. (เช•เชจเซเชŸเซ‡เชจเชฐ เชฐเชจเชŸเชพเชˆเชฎ เช…เชจเซ‡ เช•เซเชฌเซ‡เชฒเซ‡เชŸ เชตเชšเซเชšเซ‡เชจเซ€ เชœเชตเชพเชฌเชฆเชพเชฐเซ€เช“เชจเชพ เชตเชฟเชญเชพเชœเชจเชจเซ€ เชตเชฟเช—เชคเซ‹ เชตเชพเชธเซเชคเชตเชฎเชพเช‚ เช–เซ‚เชฌ เชœ เชธเซ‚เช•เซเชทเซเชฎ เช›เซ‡ เช…เชจเซ‡ เชนเซเช‚ เช…เชนเซ€เช‚ เชคเซ‡เชฎเชพเช‚ เชœเชˆเชถ เชจเชนเซ€เช‚.)

ะ˜ API เชธเชฐเซเชตเชฐ?

API เชธเชฐเซเชตเชฐ เช Kubernetes เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชชเซ‡เชจเชฒ เช˜เชŸเช• เช›เซ‡ เชœเซ‡ Kubernetes API เชจเซ‡ เช–เซเชฒเซเชฒเซเช‚ เชชเชพเชกเซ‡ เช›เซ‡. API เชธเชฐเซเชตเชฐ เช Kubernetes เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชชเซ‡เชจเชฒเชจเซ€ เช•เซเชฒเชพเชฏเชจเซเชŸ เชฌเชพเชœเซ เช›เซ‡

เช•เซ‹เชˆเชชเชฃ เชœเซ‡เชฃเซ‡ เช•เซเชฏเชพเชฐเซ‡เชฏ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชธเชพเชฅเซ‡ เช•เช‚เชˆเชชเชฃ เช•เชฐเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡เชฃเซ‡ เชธเซ€เชงเชพ เช…เชฅเชตเชพ เช•เซเชฏเซเชฌเซ‡เช•เซเชŸเชฒ เชฆเซเชตเชพเชฐเชพ API เชธเชพเชฅเซ‡ เชธเช‚เชชเชฐเซเช• เช•เชฐเชตเซ‹ เชชเชกเซเชฏเซ‹ เช›เซ‡. เช† เชคเซ‡ เชนเซƒเชฆเชฏ เช›เซ‡ เชœเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชฌเชจเชพเชตเซ‡ เช›เซ‡ - เชฎเช—เชœ เชœเซ‡ YAML เชจเชพ เชชเชฐเซเชตเชคเซ‹เชจเซ‡ เช†เชชเชฃเซ‡ เชฌเชงเชพ เชœเชพเชฃเซ€เช เช›เซ€เช เช…เชจเซ‡ เชชเซเชฐเซ‡เชฎ (?) เชจเซ‡ เช•เชพเชฐเซเชฏเช•เชพเชฐเซ€ เชฎเชพเชณเช–เชพเชฎเชพเช‚ เชซเซ‡เชฐเชตเซ‡ เช›เซ‡. เชคเซ‡ เชธเซเชชเชทเซเชŸ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ API เช…เชฎเชพเชฐเชพ เชจเซเชฏเซ‚เชจเชคเชฎ เช—เซ‹เช เชตเชฃเซ€เชฎเชพเช‚ เชนเชพเชœเชฐ เชนเซ‹เชตเซเช‚ เชœเซ‹เชˆเช.

เชชเซ‚เชฐเซเชตเชถเชฐเชคเซ‹

  • เชฐเซเชŸ เชเช•เซเชธเซ‡เชธ เชธเชพเชฅเซ‡ Linux เชตเชฐเซเชšเซเชฏเซเช…เชฒ เช…เชฅเชตเชพ เชญเซŒเชคเชฟเช• เชฎเชถเซ€เชจ (เชนเซเช‚ เชตเชฐเซเชšเซเชฏเซเช…เชฒ เชฎเชถเซ€เชจ เชชเชฐ เช‰เชฌเซเชจเซเชŸเซ 18.04 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเช‚ เช›เซเช‚).
  • เช…เชจเซ‡ เชคเซ‡ เชฌเชงเซเช‚ เช›เซ‡!

เช•เช‚เชŸเชพเชณเชพเชœเชจเช• เชธเซเชฅเชพเชชเชจ

เช…เชฎเซ‡ เชœเซ‡ เชฎเชถเซ€เชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ เชคเซ‡เชจเชพ เชชเชฐ เช…เชฎเชพเชฐเซ‡ เชกเซ‹เช•เชฐ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. (เชกเซ‹เช•เชฐ เช…เชจเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชตเชฟเชถเซ‡ เชนเซเช‚ เชตเชฟเช—เชคเชตเชพเชฐ เชจเชฅเซ€ เชœเชˆ เชฐเชนเซเชฏเซ‹; เชœเซ‹ เชคเชฎเชจเซ‡ เชฐเชธ เชนเซ‹เชฏ, เชคเซ‹ เชคเซเชฏเชพเช‚ เช›เซ‡ เช…เชฆเซเชญเซเชค เชฒเซ‡เช–เซ‹). เชšเชพเชฒเซ‹ เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เชœ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€เช apt:

$ sudo apt install docker.io
$ sudo systemctl start docker

เชคเซ‡ เชชเช›เซ€, เช†เชชเชฃเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซ€เชธ เชฆเซเชตเชฟเชธเช‚เช—เซ€ เชฎเซ‡เชณเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชนเช•เซ€เช•เชคเชฎเชพเช‚, เช…เชฎเชพเชฐเชพ "เช•เซเชฒเชธเซเชŸเชฐ" เชจเชพ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชชเซเชฐเช•เซเชทเซ‡เชชเชฃ เชฎเชพเชŸเซ‡ เช…เชฎเชจเซ‡ เชซเช•เซเชค เชœเชฐเซ‚เชฐ เช›เซ‡ kubelet, เช•เชพเชฐเชฃ เช•เซ‡ เช…เชจเซเชฏ เชธเชฐเซเชตเชฐ เช˜เชŸเช•เซ‹เชจเซ‡ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช kubelet. เช…เชฎเชพเชฐเชพ เช•เซเชฒเชธเซเชŸเชฐ เชšเชพเชฒเซ เชฅเชฏเชพ เชชเช›เซ€ เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เชธเช‚เชชเชฐเซเช• เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชคเซ‡เชจเซ‹ เชชเชฃ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ kubectl.

$ curl -L https://dl.k8s.io/v1.18.5/kubernetes-server-linux-amd64.tar.gz > server.tar.gz
$ tar xzvf server.tar.gz
$ cp kubernetes/server/bin/kubelet .
$ cp kubernetes/server/bin/kubectl .
$ ./kubelet --version
Kubernetes v1.18.5

เช†เชชเชฃเซ‡ เชœ เชฆเซ‹เชกเซ€เช เชคเซ‹ เชถเซเช‚ เชฅเชพเชฏ kubelet?

$ ./kubelet
F0609 04:03:29.105194    4583 server.go:254] mkdir /var/lib/kubelet: permission denied

kubelet เชฐเซเชŸ เชคเชฐเซ€เช•เซ‡ เชšเชพเชฒเชตเซเช‚ เชœเซ‹เชˆเช. เชคเชฆเซเชฆเชจ เชคเชพเชฐเซเช•เชฟเช•, เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡เชฃเซ‡ เชธเชฎเช—เซเชฐ เชจเซ‹เชกเชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชšเชพเชฒเซ‹ เชคเซ‡เชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชœเซ‹เชˆเช:

$ ./kubelet -h
<ัะปะธัˆะบะพะผ ะผะฝะพะณะพ ัั‚ั€ะพะบ, ั‡ั‚ะพะฑั‹ ั€ะฐะทะผะตัั‚ะธั‚ัŒ ะทะดะตััŒ>
$ ./kubelet -h | wc -l
284

เชตเชพเชน, เช˜เชฃเชพ เชฌเชงเชพ เชตเชฟเช•เชฒเซเชชเซ‹! เชธเชฆเชญเชพเช—เซเชฏเซ‡, เช…เชฎเชจเซ‡ เชซเช•เซเชค เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชเช•เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช…เชนเซ€เช‚ เชเช• เชชเชฐเชฟเชฎเชพเชฃเซ‹ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เช…เชฎเชจเซ‡ เชฐเชธ เช›เซ‡:

--pod-manifest-path string

เชธเซเชŸเซ‡เชŸเชฟเช• เชชเซ‹เชกเซเชธ เชฎเชพเชŸเซ‡เชจเซ€ เชซเชพเช‡เชฒเซ‹ เชงเชฐเชพเชตเชคเซ€ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชจเซ‹ เชชเชพเชฅ เช…เชฅเชตเชพ เชธเซเชŸเซ‡เชŸเชฟเช• เชชเซ‹เชกเซเชธเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชคเซ€ เชซเชพเช‡เชฒเชจเซ‹ เชชเชพเชฅ. เชฌเชฟเช‚เชฆเซเช“เชฅเซ€ เชถเชฐเซ‚ เชฅเชคเซ€ เชซเชพเช‡เชฒเซ‹เชจเซ‡ เช…เชตเช—เชฃเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. (เชจเชพเชชเชธเช‚เชฆ เช•เชฐเซ‡เชฒ: เช† เชตเชฟเช•เชฒเซเชช --config เชตเชฟเช•เชฒเซเชช เชฆเซเชตเชพเชฐเชพ เช•เซเชฌเซ‡เชฒเซ‡เชŸเชจเซ‡ เชชเชธเชพเชฐ เช•เชฐเชพเชฏเซ‡เชฒเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเชˆเชฒเชฎเชพเช‚ เชธเซ‡เชŸ เช•เชฐเชตเซ‹ เช†เชตเชถเซเชฏเช• เช›เซ‡. เชตเชงเซ เชฎเชพเชนเชฟเชคเซ€ เชฎเชพเชŸเซ‡, เชœเซเช“ kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file .)

เช† เชตเชฟเช•เชฒเซเชช เช…เชฎเชจเซ‡ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡ เชธเซเชฅเชฟเชฐ เชถเซ€เช‚เช—เซ‹ โ€” เชชเซ‹เชกเซเชธ เช•เซ‡ เชœเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ API เชฆเซเชตเชพเชฐเชพ เชธเช‚เชšเชพเชฒเชฟเชค เชจเชฅเซ€. เชธเซเชŸเซ‡เชŸเชฟเช• เชถเซ€เช‚เช—เซ‹ เชญเชพเช—เซเชฏเซ‡ เชœ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชฏ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เชเชกเชชเชฅเซ€ เช•เซเชฒเชธเซเชŸเชฐ เชตเชงเชพเชฐเชตเชพ เชฎเชพเชŸเซ‡ เช–เซ‚เชฌ เช…เชจเซเช•เซ‚เชณ เช›เซ‡, เช…เชจเซ‡ เช† เชœ เช†เชชเชฃเชจเซ‡ เชœเซ‹เชˆเช เช›เซ‡. เช…เชฎเซ‡ เช† เชฎเซ‹เชŸเซ€ เชšเซ‡เชคเชตเชฃเซ€เชจเซ‡ เช…เชตเช—เชฃเซ€เชถเซเช‚ (เชซเชฐเซ€เชฅเซ€, เช†เชจเซ‡ เชชเซเชฐเซ‹เชกเช•เซเชถเชจเชฎเชพเช‚ เชšเชฒเชพเชตเชถเซ‹ เชจเชนเซ€เช‚!) เช…เชจเซ‡ เชœเซ‹เชถเซเช‚ เช•เซ‡ เชถเซเช‚ เช…เชฎเซ‡ เชชเซ‹เชก เชšเชพเชฒเซ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช.

เชชเชนเซ‡เชฒเชพ เช†เชชเชฃเซ‡ เชธเซเชŸเซ‡เชŸเชฟเช• เชชเซ‹เชกเซเชธ เชฎเชพเชŸเซ‡ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€ เชฌเชจเชพเชตเซ€เชถเซเช‚ เช…เชจเซ‡ เชฐเชจ เช•เชฐเซ€เชถเซเช‚ kubelet:

$ mkdir pods
$ sudo ./kubelet --pod-manifest-path=pods

เชชเช›เซ€, เช…เชจเซเชฏ เชŸเชฐเซเชฎเชฟเชจเชฒ/tmux เชตเชฟเชจเซเชกเซ‹เชฎเชพเช‚/เชœเซ‡ เช•เช‚เชˆเชชเชฃ เชนเซ‹เชฏ, เช…เชฎเซ‡ เชชเซ‹เชก เชฎเซ‡เชจเชฟเชซเซ‡เชธเซเชŸ เชฌเชจเชพเชตเซ€เชถเซเช‚:

$ cat <<EOF > pods/hello.yaml
apiVersion: v1
kind: Pod
metadata:
  name: hello
spec:
  containers:
  - image: busybox
    name: hello
    command: ["echo", "hello world!"]
EOF

kubelet เช•เซ‡เชŸเชฒเซ€เช• เชšเซ‡เชคเชตเชฃเซ€เช“ เชฒเช–เชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เช•เช‚เชˆ เชฅเชˆ เชฐเชนเซเชฏเซเช‚ เชจเชฅเซ€. เชชเชฐเช‚เชคเซ เชคเซ‡ เชธเชพเชšเซเช‚ เชจเชฅเซ€! เชšเชพเชฒเซ‹ เชกเซ‹เช•เชฐเชจเซ‡ เชœเซ‹เชˆเช:

$ sudo docker ps -a
CONTAINER ID        IMAGE                  COMMAND                 CREATED             STATUS                      PORTS               NAMES
8c8a35e26663        busybox                "echo 'hello world!'"   36 seconds ago      Exited (0) 36 seconds ago                       k8s_hello_hello-mink8s_default_ab61ef0307c6e0dee2ab05dc1ff94812_4
68f670c3c85f        k8s.gcr.io/pause:3.2   "/pause"                2 minutes ago       Up 2 minutes                                    k8s_POD_hello-mink8s_default_ab61ef0307c6e0dee2ab05dc1ff94812_0
$ sudo docker logs k8s_hello_hello-mink8s_default_ab61ef0307c6e0dee2ab05dc1ff94812_4
hello world!

kubelet เชฎเซ‡เช‚ เชชเซ‹เชก เชฎเซ‡เชจเชฟเชซเซ‡เชธเซเชŸ เชตเชพเช‚เชšเซเชฏเซเช‚ เช…เชจเซ‡ เชกเซ‹เช•เชฐเชจเซ‡ เช…เชฎเชพเชฐเชพ เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃเซ‹ เช…เชจเซเชธเชพเชฐ เชฅเซ‹เชกเชพ เช•เชจเซเชŸเซ‡เชจเชฐ เชฒเซ‹เช‚เชš เช•เชฐเชตเชพเชจเซ‹ เช†เชฆเซ‡เชถ เช†เชชเซเชฏเซ‹. (เชœเซ‹ เชคเชฎเซ‡ "เชฅเซ‹เชญเซ‹" เช•เชจเซเชŸเซ‡เชจเชฐ เชตเชฟเชถเซ‡ เช†เชถเซเชšเชฐเซเชฏ เชชเชพเชฎเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ‹, เชคเซ‹ เชคเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชนเซ‡เช• เช›เซ‡ - เชœเซเช“ เช† เชฌเซเชฒเซ‹เช—.) เช•เซเชฌเซ‡เชฒเซ‡เชŸ เช…เชฎเชพเชฐเซเช‚ เช•เชจเซเชŸเซ‡เชจเชฐ เชฒเซ‹เชจเซเชš เช•เชฐเชถเซ‡ busybox เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เช…เชจเซ‡ เชธเซเชฅเชฟเชฐ เชชเซ‹เชก เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เชคเซ‡เชจเซ‡ เช…เชจเชฟเชถเซเชšเชฟเชค เชธเชฎเชฏ เชฎเชพเชŸเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชถเซ‡.

เชคเชฎเชพเชฐเซ€ เชœเชพเชคเชจเซ‡ เช…เชญเชฟเชจเช‚เชฆเชจ เช†เชชเซ‹. เช…เชฎเซ‡ เชนเชฎเชฃเชพเช‚ เชœ เชŸเชฐเซเชฎเชฟเชจเชฒ เชชเชฐ เชŸเซ‡เช•เซเชธเซเชŸเชจเซ‡ เช†เช‰เชŸเชชเซเชŸ เช•เชฐเชตเชพเชจเซ€ เชธเซŒเชฅเซ€ เช—เซ‚เช‚เชšเชตเชฃเชญเชฐเซ€ เชฐเซ€เชคเซ‹เชฎเชพเช‚เชฅเซ€ เชเช• เชธเชพเชฅเซ‡ เช†เชตเซเชฏเชพ เช›เซ€เช!

เชฒเซ‹เชจเซเชš เชตเช—เซ‡เชฐเซ‡

เช…เชฎเชพเชฐเซเช‚ เช…เช‚เชคเชฟเชฎ เชงเซเชฏเซ‡เชฏ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ API เชšเชฒเชพเชตเชตเชพเชจเซเช‚ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช†เชชเชฃเซ‡ เชชเชนเซ‡เชฒเชพ เชšเชฒเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชตเช—เซ‡เชฐเซ‡. เชšเชพเชฒเซ‹ เชเช• เชจเซเชฏเซ‚เชจเชคเชฎ etcd เช•เซเชฒเชธเซเชŸเชฐเชจเซ‡ เชชเซ‹เชกเซเชธ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚ เชฎเซ‚เช•เซ€เชจเซ‡ เชถเชฐเซ‚ เช•เชฐเซ€เช (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, pods/etcd.yaml):

apiVersion: v1
kind: Pod
metadata:
  name: etcd
  namespace: kube-system
spec:
  containers:
  - name: etcd
    command:
    - etcd
    - --data-dir=/var/lib/etcd
    image: k8s.gcr.io/etcd:3.4.3-0
    volumeMounts:
    - mountPath: /var/lib/etcd
      name: etcd-data
  hostNetwork: true
  volumes:
  - hostPath:
      path: /var/lib/etcd
      type: DirectoryOrCreate
    name: etcd-data

เชœเซ‹ เชคเชฎเซ‡ เช•เซเชฏเชพเชฐเซ‡เชฏ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซเชฏเซเช‚ เชนเซ‹เชฏ, เชคเซ‹ เช† YAML เชซเชพเช‡เชฒเซ‹ เชคเชฎเชจเซ‡ เชชเชฐเชฟเชšเชฟเชค เชนเซ‹เชตเชพ เชœเซ‹เชˆเช. เช…เชนเซ€เช‚ เชฎเชพเชคเซเชฐ เชฌเซ‡ เชœ เชฎเซเชฆเซเชฆเชพ เชจเซ‹เช‚เชงเชตเชพ เชฏเซ‹เช—เซเชฏ เช›เซ‡:

เช…เชฎเซ‡ เชนเซ‹เชธเซเชŸ เชซเซ‹เชฒเซเชกเชฐ เชฎเชพเช‰เชจเซเชŸ เช•เชฐเซเชฏเซเช‚ เช›เซ‡ /var/lib/etcd เชชเซ‹เชกเชฎเชพเช‚ เชœเซ‡เชฅเซ€ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซเชฏเชพ เชชเช›เซ€ etcd เชกเซ‡เชŸเชพ เชธเชพเชšเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ (เชœเซ‹ เช† เชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซ‹, เชฆเชฐ เชตเช–เชคเซ‡ เชชเซ‹เชก เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ เช•เซเชฒเชธเซเชŸเชฐ เชธเซเชฅเชฟเชคเชฟ เชญเซ‚เช‚เชธเซ€ เชจเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เชœเซ‡ เชจเซเชฏเซ‚เชจเชคเชฎ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชชเชฃ เชธเชพเชฐเซ€ เชฐเชนเซ‡เชถเซ‡ เชจเชนเซ€เช‚).

เช…เชฎเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซเชฏเซเช‚ เช›เซ‡ hostNetwork: true. เช† เชธเซ‡เชŸเชฟเช‚เช—, เช†เชถเซเชšเชฐเซเชฏเชœเชจเช• เชฐเซ€เชคเซ‡, เชชเซ‹เชกเชจเชพ เช†เช‚เชคเชฐเชฟเช• เชจเซ‡เชŸเชตเชฐเซเช•เชจเซ‡ เชฌเชฆเชฒเซ‡ เชนเซ‹เชธเซเชŸ เชจเซ‡เชŸเชตเชฐเซเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ etcd เชจเซ‡ เช—เซ‹เช เชตเซ‡ เช›เซ‡ (เช† API เชธเชฐเซเชตเชฐเชจเซ‡ etcd เช•เซเชฒเชธเซเชŸเชฐ เชถเซ‹เชงเชตเชพเชจเซเช‚ เชธเชฐเชณ เชฌเชจเชพเชตเชถเซ‡).

เชเช• เชธเชฐเชณ เชคเชชเชพเชธ เชฌเชคเชพเชตเซ‡ เช›เซ‡ เช•เซ‡ etcd เช–เชฐเซ‡เช–เชฐ เชฒเซ‹เช•เชฒเชนเซ‹เชธเซเชŸ เชชเชฐ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชกเชฟเชธเซเช• เชชเชฐ เชกเซ‡เชŸเชพ เชธเชพเชšเชตเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡:

$ curl localhost:2379/version
{"etcdserver":"3.4.3","etcdcluster":"3.4.0"}
$ sudo tree /var/lib/etcd/
/var/lib/etcd/
โ””โ”€โ”€ member
    โ”œโ”€โ”€ snap
    โ”‚   โ””โ”€โ”€ db
    โ””โ”€โ”€ wal
        โ”œโ”€โ”€ 0.tmp
        โ””โ”€โ”€ 0000000000000000-0000000000000000.wal

API เชธเชฐเซเชตเชฐ เชถเชฐเซ‚ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

Kubernetes API เชธเชฐเซเชตเชฐ เชšเชฒเชพเชตเชตเซเช‚ เชตเชงเซ เชธเชฐเชณ เช›เซ‡. เชเช•เชฎเชพเชคเซเชฐ เชชเชฐเชฟเชฎเชพเชฃ เช•เซ‡ เชœเซ‡ เชชเชธเชพเชฐ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชคเซ‡ เช›เซ‡ --etcd-servers, เชคเชฎเซ‡ เชœเซ‡ เช…เชชเซ‡เช•เซเชทเชพ เช•เชฐเซ‹ เช›เซ‹ เชคเซ‡ เช•เชฐเซ‡ เช›เซ‡:

apiVersion: v1
kind: Pod
metadata:
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - name: kube-apiserver
    command:
    - kube-apiserver
    - --etcd-servers=http://127.0.0.1:2379
    image: k8s.gcr.io/kube-apiserver:v1.18.5
  hostNetwork: true

เช† YAML เชซเชพเช‡เชฒเชจเซ‡ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚ เชฎเซ‚เช•เซ‹ pods, เช…เชจเซ‡ API เชธเชฐเซเชตเชฐ เชถเชฐเซ‚ เชฅเชถเซ‡. เชธเชพเชฅเซ‡ เชคเชชเชพเชธ เช•เชฐเซ€ เชฐเชนเซ€ เช›เซ‡ curl เชฌเชคเชพเชตเซ‡ เช›เซ‡ เช•เซ‡ Kubernetes API เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช“เชชเชจ เชเช•เซเชธเซ‡เชธ เชธเชพเชฅเซ‡ เชชเซ‹เชฐเซเชŸ 8080 เชชเชฐ เชธเชพเช‚เชญเชณเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ - เช•เซ‹เชˆ เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เชœเชฐเซ‚เชฐเซ€ เชจเชฅเซ€!

$ curl localhost:8080/healthz
ok
$ curl localhost:8080/api/v1/pods
{
  "kind": "PodList",
  "apiVersion": "v1",
  "metadata": {
    "selfLink": "/api/v1/pods",
    "resourceVersion": "59"
  },
  "items": []
}

(เชซเชฐเซ€เชฅเซ€, เช†เชจเซ‡ เช‰เชคเซเชชเชพเชฆเชจเชฎเชพเช‚ เชšเชฒเชพเชตเชถเซ‹ เชจเชนเซ€เช‚! เชฎเชจเซ‡ เชฅเซ‹เชกเซเช‚ เช†เชถเซเชšเชฐเซเชฏ เชฅเชฏเซเช‚ เช•เซ‡ เชกเชฟเชซเซ‹เชฒเซเชŸ เชธเซ‡เชŸเชฟเช‚เช— เชเชŸเชฒเซ€ เช…เชธเซเชฐเช•เซเชทเชฟเชค เช›เซ‡. เชชเชฐเช‚เชคเซ เชนเซเช‚ เช…เชจเซเชฎเชพเชจ เช•เชฐเซ€ เชฐเชนเซเชฏเซ‹ เช›เซเช‚ เช•เซ‡ เช† เชตเชฟเช•เชพเชธ เช…เชจเซ‡ เชชเชฐเซ€เช•เซเชทเชฃเชจเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช›เซ‡.)

เช…เชจเซ‡, เชธเซเช–เชฆ เช†เชถเซเชšเชฐเซเชฏ, kubectl เช•เซ‹เชˆเชชเชฃ เชตเชงเชพเชฐเชพเชจเชพ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชตเชฟเชจเชพ เชฌเซ‹เช•เซเชธเชจเซ€ เชฌเชนเชพเชฐ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡!

$ ./kubectl version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.5", GitCommit:"e6503f8d8f769ace2f338794c914a96fc335df0f", GitTreeState:"clean", BuildDate:"2020-06-26T03:47:41Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.5", GitCommit:"e6503f8d8f769ace2f338794c914a96fc335df0f", GitTreeState:"clean", BuildDate:"2020-06-26T03:39:24Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
$ ./kubectl get pod
No resources found in default namespace.

เชธเชฎเชธเซเชฏเชพ

เชชเชฐเช‚เชคเซ เชœเซ‹ เชคเชฎเซ‡ เชฅเซ‹เชกเซเช‚ เชŠเช‚เชกเซเช‚ เช–เซ‹เชฆเชถเซ‹, เชคเซ‹ เช•เช‚เชˆเช• เช–เซ‹เชŸเซเช‚ เชฅเชˆ เชฐเชนเซเชฏเซเช‚ เชนเซ‹เชตเชพเชจเซเช‚ เชœเชฃเชพเชฏ เช›เซ‡:

$ ./kubectl get pod -n kube-system
No resources found in kube-system namespace.

เช…เชฎเซ‡ เชฌเชจเชพเชตเซ‡เชฒเซ€ เชธเซเชฅเชฟเชฐ เชถเซ€เช‚เช—เซ‹ เช…เชฆเซƒเชถเซเชฏ เชฅเชˆ เช—เชˆ เช›เซ‡! เชนเช•เซ€เช•เชคเชฎเชพเช‚, เช…เชฎเชพเชฐเซเช‚ เช•เซเชฌเซ‡เชฒเซ‡เชŸ เชจเซ‹เชก เชฌเชฟเชฒเช•เซเชฒ เชถเซ‹เชงเชพเชฏเซ‡เชฒ เชจเชฅเซ€:

$ ./kubectl get nodes
No resources found in default namespace.

เชถเซเช‚ เชฌเชพเชฌเชค เช›เซ‡? เชœเซ‹ เชคเชฎเชจเซ‡ เชฅเซ‹เชกเชพ เชซเช•เชฐเชพ เชชเชนเซ‡เชฒเชพ เชฏเชพเชฆ เชนเซ‹เชฏ, เชคเซ‹ เช…เชฎเซ‡ เช•เชฎเชพเชจเซเชก เชฒเชพเช‡เชจ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐเซเชธเชจเชพ เช…เชคเซเชฏเช‚เชค เชธเชฐเชณ เชธเซ‡เชŸ เชธเชพเชฅเซ‡ เช•เซเชฌเซ‡เชฒเซ‡เชŸเชจเซ€ เชถเชฐเซ‚เช†เชค เช•เชฐเซ€, เชœเซ‡เชฅเซ€ เช•เซเชฏเซ‚เชฌเซ‡เชฒเซ‡เชŸ เชเชชเซ€เช†เชˆ เชธเชฐเซเชตเชฐเชจเซ‹ เชธเช‚เชชเชฐเซเช• เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชคเซ‡เชจเซ€ เชธเซเชฅเชฟเชคเชฟ เชตเชฟเชถเซ‡ เชœเชพเชฃ เช•เชฐเชตเซ€ เชคเซ‡ เชœเชพเชฃเชคเซเช‚ เชจเชฅเซ€. เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹เชจเซ‹ เช…เชญเซเชฏเชพเชธ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เช…เชฎเชจเซ‡ เช…เชจเซเชฐเซ‚เชช เชงเซเชตเชœ เชฎเชณเซ‡ เช›เซ‡:

--kubeconfig string

เชซเชพเช‡เชฒเชจเซ‹ เชฎเชพเชฐเซเช— kubeconfig, เชœเซ‡ API เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเชตเซเช‚ เชคเซ‡ เชธเซเชชเชทเซเชŸ เช•เชฐเซ‡ เช›เซ‡. เช‰เชชเชฒเชฌเซเชงเชคเชพ --kubeconfig API เชธเชฐเซเชตเชฐ เชฎเซ‹เชกเชจเซ‡ เชธเช•เซเชทเชฎ เช•เชฐเซ‡ เช›เซ‡, เชจเชพ --kubeconfig เช‘เชซเชฒเชพเช‡เชจ เชฎเซ‹เชกเชจเซ‡ เชธเช•เซเชทเชฎ เช•เชฐเซ‡ เช›เซ‡.

เช† เชฌเชงเชพ เชธเชฎเชฏ, เชคเซ‡ เชœเชพเชฃเซเชฏเชพ เชตเชฟเชจเชพ, เช…เชฎเซ‡ "เช‘เชซเชฒเชพเช‡เชจ เชฎเซ‹เชก" เชฎเชพเช‚ เช•เซเชฌเซ‡เชฒเซ‡เชŸ เชšเชฒเชพเชตเซ€ เชฐเชนเซเชฏเชพ เชนเชคเชพ. (เชœเซ‹ เช†เชชเชฃเซ‡ เชชเซ‡เชกเชจเซเชŸเชฟเช• เชนเซ‹เชˆเช, เชคเซ‹ เช†เชชเชฃเซ‡ เชเช•เชฒ เช•เซเชฌเซ‡เชฒเซ‡เชŸเชจเซ‡ "เชฒเช˜เซเชคเซเชคเชฎ เชธเชงเซเชงเชฐ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ" เชคเชฐเซ€เช•เซ‡ เชตเชฟเชšเชพเชฐเซ€ เชถเช•เซ€เช, เชชเชฐเช‚เชคเซ เชคเซ‡ เช–เซ‚เชฌ เช•เช‚เชŸเชพเชณเชพเชœเชจเช• เชนเชถเซ‡). "เชตเชพเชธเซเชคเชตเชฟเช•" เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช•เชพเชฐเซเชฏ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเชพเชฐเซ‡ kubeconfig เชซเชพเช‡เชฒเชจเซ‡ kubelet เชชเชฐ เชชเชพเชธ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชœเซ‡เชฅเซ€ เชคเซ‡ API เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชพเชค เช•เชฐเชตเซ€ เชคเซ‡ เชœเชพเชฃเซ‡. เชธเชฆเชญเชพเช—เซเชฏเซ‡ เชคเซ‡ เชเช•เชฆเชฎ เชธเชฐเชณ เช›เซ‡ (เช•เชพเชฐเชฃ เช•เซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช•เซ‹เชˆ เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เช…เชฅเชตเชพ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชธเชฎเชธเซเชฏเชพเช“ เชจเชฅเซ€):

apiVersion: v1
kind: Config
clusters:
- cluster:
    server: http://127.0.0.1:8080
  name: mink8s
contexts:
- context:
    cluster: mink8s
  name: mink8s
current-context: mink8s

เช† เชคเชฐเซ€เช•เซ‡ เชธเชพเชšเชตเซ‹ kubeconfig.yaml, เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชฎเชพเชฐเซ€ เชจเชพเช–เซ‹ kubelet เช…เชจเซ‡ เชœเชฐเซ‚เชฐเซ€ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชธเชพเชฅเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ‹:

$ sudo ./kubelet --pod-manifest-path=pods --kubeconfig=kubeconfig.yaml

(เชฎเชพเชฐเซเช— เชฆเซเชตเชพเชฐเชพ, เชœเซ‹ เชคเชฎเซ‡ เช•เซเชฌเซ‡เชฒเซ‡เชŸ เชšเชพเชฒเซ เชจ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เช•เชฐเซเชฒ เชฆเซเชตเชพเชฐเชพ API เชจเซ‡ เชเช•เซเชธเซ‡เชธ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ‹ เช›เซ‹, เชคเซ‹ เชคเชฎเซ‡ เชœเซ‹เชถเซ‹ เช•เซ‡ เชคเซ‡ เชนเชœเซ€ เชชเชฃ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡! เช•เซเชฌเซ‡เชฒเซ‡เชŸ เชกเซ‹เช•เชฐ เชœเซ‡เชตเชพ เชคเซ‡เชจเชพ เชชเซ‹เชกเซเชธเชจเซเช‚ "เชชเชฟเชคเซƒ" เชจเชฅเซ€, เชคเซ‡ "เชจเชฟเชฏเช‚เชคเซเชฐเชฃ" เชœเซ‡เชตเซเช‚ เช›เซ‡. เชกเชฟเชฎเชจ." เช•เซเชฌเซ‡เชฒเซ‡เชŸ เชฆเซเชตเชพเชฐเชพ เชธเช‚เชšเชพเชฒเชฟเชค เช•เชจเซเชŸเซ‡เชจเชฐ เชœเซเชฏเชพเช‚ เชธเซเชงเซ€ เช•เซเชฌเซ‡เชฒเซ‡เชŸ เชคเซ‡เชฎเชจเซ‡ เชฐเซ‹เช•เซ‡ เชจเชนเซ€เช‚ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เชšเชพเชฒเชตเชพเชจเซเช‚ เชšเชพเชฒเซ เชฐเชนเซ‡เชถเซ‡.)

เชฅเซ‹เชกเซ€เชตเชพเชฐเชฎเชพเช‚ kubectl เช…เชฎเชพเชฐเซ€ เช…เชชเซ‡เช•เซเชทเชพ เชฎเซเชœเชฌ เช…เชฎเชจเซ‡ เชถเซ€เช‚เช—เซ‹ เช…เชจเซ‡ เช—เชพเช‚เช เซ‹ เชฌเชคเชพเชตเชตเชพ เชœเซ‹เชˆเช:

$ ./kubectl get pods -A
NAMESPACE     NAME                    READY   STATUS             RESTARTS   AGE
default       hello-mink8s            0/1     CrashLoopBackOff   261        21h
kube-system   etcd-mink8s             1/1     Running            0          21h
kube-system   kube-apiserver-mink8s   1/1     Running            0          21h
$ ./kubectl get nodes -owide
NAME     STATUS   ROLES    AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
mink8s   Ready    <none>   21h   v1.18.5   10.70.10.228   <none>        Ubuntu 18.04.4 LTS   4.15.0-109-generic   docker://19.3.6

เชšเชพเชฒเซ‹ เช† เชตเช–เชคเซ‡ เช–เชฐเซ‡เช–เชฐ เชชเซ‹เชคเชพเชจเซ‡ เช…เชญเชฟเชจเช‚เชฆเชจ เช†เชชเซ€เช (เชนเซเช‚ เชœเชพเชฃเซเช‚ เช›เซเช‚ เช•เซ‡ เชฎเซ‡เช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชชเซ‹เชคเชพเชจเซ‡ เช…เชญเชฟเชจเช‚เชฆเชจ เช†เชชเซเชฏเชพ เช›เซ‡) - เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เช•เชพเชฐเซเชฏเช•เชพเชฐเซ€ API เชธเชพเชฅเซ‡ เชจเซเชฏเซ‚เชจเชคเชฎ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ "เช•เซเชฒเชธเซเชŸเชฐ" เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡!

เช…เชฎเซ‡ เชนเซ‡เช เชณ เชฒเซ‹เชจเซเชš

เชนเชตเซ‡ เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช เช•เซ‡ API เชถเซเช‚ เชธเช•เซเชทเชฎ เช›เซ‡. เชšเชพเชฒเซ‹ nginx เชชเซ‹เชกเชฅเซ€ เชถเชฐเซ‚เช†เชค เช•เชฐเซ€เช:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - image: nginx
    name: nginx

เช…เชนเซ€เช‚ เช…เชฎเชจเซ‡ เชเช• เชฐเชธเชชเซเชฐเชฆ เชญเซ‚เชฒ เชฎเชณเซ‡ เช›เซ‡:

$ ./kubectl apply -f nginx.yaml
Error from server (Forbidden): error when creating "nginx.yaml": pods "nginx" is
forbidden: error looking up service account default/default: serviceaccount
"default" not found
$ ./kubectl get serviceaccounts
No resources found in default namespace.

เช…เชนเซ€เช‚ เช†เชชเชฃเซ‡ เชœเซ‹เชˆเช เช›เซ€เช เช•เซ‡ เช†เชชเชฃเซเช‚ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เช•เซ‡เชŸเชฒเซเช‚ เช…เชชเซ‚เชฐเซเชฃ เช›เซ‡ - เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชธเซ‡เชตเชพเช“ เชฎเชพเชŸเซ‡ เช•เซ‹เชˆ เชเช•เชพเช‰เชจเซเชŸ เชจเชฅเซ€. เชšเชพเชฒเซ‹ เชฎเซ‡เชจเซเชฏเซเช…เชฒเซ€ เชธเชฐเซเชตเชฟเชธ เชเช•เชพเช‰เชจเซเชŸ เชฌเชจเชพเชตเซ€เชจเซ‡ เชซเชฐเซ€ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เช เช…เชจเซ‡ เชœเซ‹เชˆเช เช•เซ‡ เชถเซเช‚ เชฅเชพเชฏ เช›เซ‡:

$ cat <<EOS | ./kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: default
  namespace: default
EOS
serviceaccount/default created
$ ./kubectl apply -f nginx.yaml
Error from server (ServerTimeout): error when creating "nginx.yaml": No API
token found for service account "default", retry after the token is
automatically created and added to the service account

เช…เชฎเซ‡ เชธเซ‡เชตเชพ เช–เชพเชคเซเช‚ เชฎเซ‡เชจเซเชฏเซเช…เชฒเซ€ เชฌเชจเชพเชตเซเชฏเซเช‚ เชคเซเชฏเชพเชฐเซ‡ เชชเชฃ, เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เชŸเซ‹เช•เชจ เชœเชจเชฐเซ‡เชŸ เชฅเชคเซเช‚ เชจเชฅเซ€. เชœเซ‡เชฎ เชœเซ‡เชฎ เช†เชชเชฃเซ‡ เช†เชชเชฃเชพ เชจเซเชฏเซ‚เชจเชคเชฎ "เช•เซเชฒเชธเซเชŸเชฐ" เชธเชพเชฅเซ‡ เชชเซเชฐเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซเช‚ เชšเชพเชฒเซ เชฐเชพเช–เซ€เช เช›เซ€เช เชคเซ‡เชฎ, เช†เชชเชฃเซ‡ เชœเซ‹เชถเซเช‚ เช•เซ‡ เชฎเซ‹เชŸเชพเชญเชพเช—เชจเซ€ เช‰เชชเชฏเซ‹เช—เซ€ เชตเชธเซเชคเซเช“ เชœเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช†เชชเชฎเซ‡เชณเซ‡ เชฅเชพเชฏ เช›เซ‡ เชคเซ‡ เช–เซ‚เชŸเซ‡ เช›เซ‡. Kubernetes API เชธเชฐเซเชตเชฐ เชเช•เชฆเชฎ เชจเซเชฏเซ‚เชจเชคเชฎ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เชฎเซ‹เชŸเชพเชญเชพเช—เชจเซ€ เชนเซ‡เชตเซ€ เชฒเชฟเชซเซเชŸเชฟเช‚เช— เช…เชจเซ‡ เช“เชŸเซ‹เชฎเซ‡เชŸเชฟเช• เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชตเชฟเชตเชฟเชง เชจเชฟเชฏเช‚เชคเซเชฐเช•เซ‹ เช…เชจเซ‡ เชฌเซ‡เช•เช—เซเชฐเชพเช‰เชจเซเชก เชœเซ‹เชฌเซเชธเชฎเชพเช‚ เชฅเชพเชฏ เช›เซ‡ เชœเซ‡ เชนเชœเซ เชธเซเชงเซ€ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเชพเช‚ เชจเชฅเซ€.

เช…เชฎเซ‡ เชตเชฟเช•เชฒเซเชช เชธเซ‡เชŸ เช•เชฐเซ€เชจเซ‡ เช† เชธเชฎเชธเซเชฏเชพเชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช automountServiceAccountToken เชธเซ‡เชตเชพ เช–เชพเชคเชพ เชฎเชพเชŸเซ‡ (เช•เชพเชฐเชฃ เช•เซ‡ เช†เชชเชฃเซ‡ เช•เซ‹เชˆเชชเชฃ เชฐเซ€เชคเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชชเชกเชถเซ‡ เชจเชนเซ€เช‚):

$ cat <<EOS | ./kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: default
  namespace: default
automountServiceAccountToken: false
EOS
serviceaccount/default configured
$ ./kubectl apply -f nginx.yaml
pod/nginx created
$ ./kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
nginx   0/1     Pending   0          13m

เช›เซ‡เชฒเซเชฒเซ‡, เชชเซ‹เชก เชฆเซ‡เช–เชพเชฏเซ‹ เช›เซ‡! เชชเชฐเช‚เชคเซ เชนเช•เซ€เช•เชคเชฎเชพเช‚ เชคเซ‡ เชถเชฐเซ‚ เชฅเชถเซ‡ เชจเชนเซ€เช‚ เช•เชพเชฐเชฃ เช•เซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชจเชฅเซ€ เช†เชฏเซ‹เชœเช• (เชถเซ‡เชกเซเชฏเซเชฒเชฐ) เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชจเซเช‚ เชฌเซ€เชœเซเช‚ เชฎเชนเชคเซเชตเชจเซเช‚ เช˜เชŸเช• เช›เซ‡. เชซเชฐเซ€เชฅเซ€, เช†เชชเชฃเซ‡ เชœเซ‹เชˆเช เช›เซ€เช เช•เซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ API เช†เชถเซเชšเชฐเซเชฏเชœเชจเช• เชฐเซ€เชคเซ‡ "เชฎเซ‚เช‚เช—เซเช‚" เช›เซ‡ - เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ API เชฎเชพเช‚ เชชเซ‹เชก เชฌเชจเชพเชตเซ‹ เช›เซ‹, เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡ เชคเซ‡เชจเซ‡ เชฐเชœเซ€เชธเซเชŸเชฐ เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡เชจเซ‡ เช•เชฏเชพ เชจเซ‹เชก เชชเชฐ เชšเชฒเชพเชตเชตเซเช‚ เชคเซ‡ เชถเซ‹เชงเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชคเชพ เชจเชฅเซ€.

เชนเช•เซ€เช•เชคเชฎเชพเช‚, เชคเชฎเชพเชฐเซ‡ เชชเซ‹เชก เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชถเซ‡เชกเซเชฏเซ‚เชฒเชฐเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€. เชคเชฎเซ‡ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐเชฎเชพเช‚ เชฎเซ‡เชจเชฟเชซเซ‡เชธเซเชŸเชฎเชพเช‚ เชฎเซ‡เชจเซเชฏเซเช…เชฒเซ€ เชจเซ‹เชก เช‰เชฎเซ‡เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ nodeName:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - image: nginx
    name: nginx
  nodeName: mink8s

(เชฌเชฆเชฒเซ‹ mink8s เชจเซ‹เชกเชจเชพ เชจเชพเชฎ เชชเชฐ.) เชกเชฟเชฒเซ€เชŸ เช…เชจเซ‡ เชเชชเซเชฒเชพเชฏ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เช†เชชเชฃเซ‡ เชœเซ‹เชˆเช เช›เซ€เช เช•เซ‡ nginx เชถเชฐเซ‚ เชฅเชˆ เช—เชฏเซเช‚ เช›เซ‡ เช…เชจเซ‡ เช†เช‚เชคเชฐเชฟเช• IP เชเชกเซเชฐเซ‡เชธ เชธเชพเช‚เชญเชณเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡:

$ ./kubectl delete pod nginx
pod "nginx" deleted
$ ./kubectl apply -f nginx.yaml
pod/nginx created
$ ./kubectl get pods -owide
NAME    READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          30s   172.17.0.2   mink8s   <none>           <none>
$ curl -s 172.17.0.2 | head -4
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

เชชเซ‹เชกเซเชธ เชตเชšเซเชšเซ‡เชจเซเช‚ เชจเซ‡เชŸเชตเชฐเซเช• เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡เชจเซ€ เช–เชพเชคเชฐเซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชฌเซ€เชœเชพ เชชเซ‹เชกเชฎเชพเช‚เชฅเซ€ เช•เชฐเซเชฒ เชšเชฒเชพเชตเซ€ เชถเช•เซ€เช เช›เซ€เช:

$ cat <<EOS | ./kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: curl
spec:
  containers:
  - image: curlimages/curl
    name: curl
    command: ["curl", "172.17.0.2"]
  nodeName: mink8s
EOS
pod/curl created
$ ./kubectl logs curl | head -6
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

เช† เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช‚ เช–เซ‹เชฆเชตเซเช‚ เช…เชจเซ‡ เชถเซเช‚ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชถเซเช‚ เชจเชฅเซ€ เชคเซ‡ เชœเซ‹เชตเชพเชจเซเช‚ เช–เซ‚เชฌ เชœ เชฐเชธเชชเซเชฐเชฆ เช›เซ‡. เชฎเชจเซ‡ เชœเชพเชฃเชตเชพ เชฎเชณเซเชฏเซเช‚ เช•เซ‡ ConfigMap เช…เชจเซ‡ เชธเชฟเช•เซเชฐเซ‡เชŸ เช…เชชเซ‡เช•เซเชทเชพ เชฎเซเชœเชฌ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชธเชฐเซเชตเชฟเชธ เช…เชจเซ‡ เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ เชจเชฅเซ€ เช•เชฐเชคเชพ.

เชธเชซเชณเชคเชพ!

เช† เชชเซ‹เชธเซเชŸ เชฒเชพเช‚เชฌเซ€ เชฅเชˆ เชฐเชนเซ€ เช›เซ‡, เชคเซ‡เชฅเซ€ เชนเซเช‚ เชตเชฟเชœเชฏ เชœเชพเชนเซ‡เชฐ เช•เชฐเชตเชพ เชœเชˆ เชฐเชนเซเชฏเซ‹ เช›เซเช‚ เช…เชจเซ‡ เช•เชนเซเช‚ เช›เซเช‚ เช•เซ‡ เช† เชเช• เชธเช•เซเชทเชฎ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช›เซ‡ เชœเซ‡เชจเซ‡ "เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ" เช•เชนเซ€ เชถเช•เชพเชฏ. เชธเชพเชฐเชพเช‚เชถ เชฎเชพเชŸเซ‡: เชšเชพเชฐ เชฆเซเชตเชฟเชธเช‚เช—เซ€, เชชเชพเช‚เชš เช†เชฆเซ‡เชถ เชตเชพเช•เซเชฏ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เช…เชจเซ‡ YAML เชจเซ€ โ€‹โ€‹"เชฎเชพเชคเซเชฐ" 45 เชฐเซ‡เช–เชพเช“ (เชจเชฅเซ€ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชจเชพ เชงเซ‹เชฐเชฃเซ‹ เชฎเซเชœเชฌ) เช…เชจเซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชฅเซ‹เชกเซ€เช• เชตเชธเซเชคเซเช“ เช•เชพเชฎ เช•เชฐเซ€ เชฐเชนเซ€ เช›เซ‡:

  • เชจเชฟเชฏเชฎเชฟเชค เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ API (เชฅเซ‹เชกเชพ เชนเซ‡เช•เซเชธ เชธเชพเชฅเซ‡) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชถเซ€เช‚เช—เซ‹เชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.
  • เชคเชฎเซ‡ เชธเชพเชฐเซเชตเชœเชจเชฟเช• เช•เชจเซเชŸเซ‡เชจเชฐ เช›เชฌเซ€เช“ เช…เชชเชฒเซ‹เชก เช…เชจเซ‡ เชธเช‚เชšเชพเชฒเชฟเชค เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹
  • เชถเซ€เช‚เช—เซ‹ เชœเซ€เชตเช‚เชค เชฐเชนเซ‡ เช›เซ‡ เช…เชจเซ‡ เช†เชชเชฎเซ‡เชณเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เชฅเชพเชฏ เช›เซ‡
  • เชธเชฎเชพเชจ เชจเซ‹เชกเชจเซ€ เช…เช‚เชฆเชฐ เชชเซ‹เชกเซเชธ เชตเชšเซเชšเซ‡ เชจเซ‡เชŸเชตเชฐเซเช•เชฟเช‚เช— เช–เซ‚เชฌ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡
  • ConfigMap, เชธเชฟเช•เซเชฐเซ‡เชŸ เช…เชจเซ‡ เชธเชฐเชณ เชธเซเชŸเซ‹เชฐเซ‡เชœ เชฎเชพเช‰เชจเซเชŸ เช•เชฐเชตเชพเชจเซเช‚ เช•เชพเชฎ เช…เชชเซ‡เช•เซเชทเชพ เชฎเซเชœเชฌ

เชชเชฐเช‚เชคเซ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชจเซ‡ เช–เชฐเซ‡เช–เชฐ เช‰เชชเชฏเซ‹เช—เซ€ เชฌเชจเชพเชตเซ‡ เช›เซ‡ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เช˜เชฃเซเช‚ เชฌเชงเซเช‚ เชนเชœเซ€ เช–เซ‚เชŸเซ‡ เช›เซ‡, เชœเซ‡เชฎ เช•เซ‡:

  • เชชเซ‹เชก เชถเซ‡เชกเซเชฏเซ‚เชฒเชฐ
  • เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ/เช…เชงเชฟเช•เซƒเชคเชคเชพ
  • เชฌเชนเซเชตเชฟเชง เช—เชพเช‚เช เซ‹
  • เชธเซ‡เชตเชพเช“เชจเซเช‚ เชจเซ‡เชŸเชตเชฐเซเช•
  • เช•เซเชฒเชธเซเชŸเชฐเซเชก เช†เช‚เชคเชฐเชฟเช• DNS
  • เชธเชฐเซเชตเชฟเชธ เชเช•เชพเช‰เชจเซเชŸเซเชธ, เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸเซเชธ, เช•เซเชฒเชพเช‰เชก เชชเซเชฐเชฆเชพเชคเชพเช“ เชธเชพเชฅเซ‡ เชเช•เซ€เช•เชฐเชฃ เช…เชจเซ‡ เช…เชจเซเชฏ เชฎเซ‹เชŸเชพเชญเชพเช—เชจเซ€ เช—เซเชกเซ€เช เชฎเชพเชŸเซ‡ เช•เช‚เชŸเซเชฐเซ‹เชฒเชฐเซเชธ เชœเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชฒเชพเชตเซ‡ เช›เซ‡

เชคเซ‹ เช†เชชเชฃเซ‡ เช–เชฐเซ‡เช–เชฐ เชถเซเช‚ เชฎเซ‡เชณเชตเซเชฏเซเช‚? Kubernetes API, เชคเซ‡เชจเชพ เชชเซ‹เชคเชพเชจเชพ เชชเชฐ เชšเชพเชฒเซ‡ เช›เซ‡, เชคเซ‡ เช–เชฐเซ‡เช–เชฐ เชฎเชพเชŸเซ‡ เชฎเชพเชคเซเชฐ เชเช• เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เช›เซ‡ เช•เชจเซเชŸเซ‡เชจเชฐ เช“เชŸเซ‹เชฎเซ‡เชถเชจ. เชคเซ‡ เช˜เชฃเซเช‚ เช•เชพเชฎ เช•เชฐเชคเซเช‚ เชจเชฅเซ€ - เชคเซ‡ API เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชตเชฟเชตเชฟเชง เชจเชฟเชฏเช‚เชคเซเชฐเช•เซ‹ เช…เชจเซ‡ เช“เชชเชฐเซ‡เชŸเชฐเซ‹ เชฎเชพเชŸเซ‡เชจเซเช‚ เช•เชพเชฎ เช›เซ‡ - เชชเชฐเช‚เชคเซ เชคเซ‡ เช“เชŸเซ‹เชฎเซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชธเซเชธเช‚เช—เชค เชตเชพเชคเชพเชตเชฐเชฃ เชชเซ‚เชฐเซเช‚ เชชเชพเชกเซ‡ เช›เซ‡.

เชฎเชซเชค เชตเซ‡เชฌเชฟเชจเชพเชฐเชฎเชพเช‚ เช•เซ‹เชฐเซเชธ เชตเชฟเชถเซ‡ เชตเชงเซ เชœเชพเชฃเซ‹.

เชตเชงเซ เชตเชพเช‚เชšเซ‹:

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹