เดเดฑเตเดฑเดตเตเด‚ เด•เตเดฑเดžเตเดž เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเดฏ เด•เตเดฌเตผเดจเต†เดฑเตเดฑเตเด•เตพ

เด•เต‹เดดเตโ€Œเดธเต เดคเตเดŸเด™เตเด™เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เดคเดฒเต‡เดจเตเดจเต เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เดฟเดฏเดคเดพเดฃเต เดฒเต‡เด–เดจเดคเตเดคเดฟเดจเตเดฑเต† เดชเดฐเดฟเดญเดพเดท "DevOps เดชเตเดฐเดพเด•เตเดŸเต€เดธเตเด•เดณเตเด‚ เดŸเต‚เดณเตเด•เดณเตเด‚".

เดเดฑเตเดฑเดตเตเด‚ เด•เตเดฑเดžเตเดž เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเดฏ เด•เตเดฌเตผเดจเต†เดฑเตเดฑเตเด•เตพ

เดจเดฟเด™เตเด™เตพ เด‡เดคเต เดตเดพเดฏเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพ เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดจเต† เด•เตเดฑเดฟเดšเตเดšเต เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เด•เต‡เดŸเตเดŸเดฟเดฐเดฟเด•เตเด•เดพเด‚ (เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพ เดŽเด™เตเด™เดจเต† เด‡เดตเดฟเดŸเต† เดŽเดคเตเดคเดฟ?) เดŽเดจเตเดจเดพเตฝ เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดŽเดจเตเดคเดพเดฃเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต? เดˆ "เดตเตเดฏเดพเดตเดธเดพเดฏเดฟเด• เดจเดฟเดฒเดตเดพเดฐเดฎเตเดณเตเดณ เด•เดฃเตเดŸเต†เดฏเตเดจเดฑเตเด•เดณเตเดŸเต† เด“เตผเด•เตเด•เดธเตเดŸเตเดฐเต‡เดทเตป"? เด…เดฅเดตเดพ "เด•เตเดฒเต—เดกเต-เดจเต‡เดฑเตเดฑเต€เดตเต เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเดฟเด‚เด—เต เดธเดฟเดธเตเดฑเตเดฑเด‚"? เด‡เดคเต เดชเต‹เดฒเตเด‚ เดŽเดจเตเดคเดพเดฃเต เด…เตผเดคเตเดฅเดฎเดพเด•เตเด•เตเดจเตเดจเดคเต?

เดธเดคเตเดฏเด‚ เดชเดฑเดžเตเดžเดพเตฝ, เดŽเดจเดฟเด•เตเด•เต 100% เด‰เดฑเดชเตเดชเดฟเดฒเตเดฒ. เดŽเดจเตเดจเดพเตฝ เด†เดจเตเดคเดฐเดฟเด•เดคเด•เดณเดฟเดฒเต‡เด•เตเด•เต เด•เตเดดเดฟเดšเตเดšเดฟเดŸเตเดจเตเดจเดคเต เดฐเดธเด•เดฐเดฎเดพเดฃเต†เดจเตเดจเต เดžเดพเตป เด•เดฐเตเดคเตเดจเตเดจเต, เด…เดคเดฟเดจเตเดฑเต† เด…เดฎเต‚เตผเดคเตเดคเดคเด•เดณเตเดŸเต† เดชเดฒ เดชเดพเดณเดฟเด•เตพเด•เตเด•เต เด•เต€เดดเดฟเตฝ เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเตฝ เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดŽเดจเตเดคเดพเดฃเต เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเดคเต†เดจเตเดจเต. เด…เดคเดฟเดจเดพเตฝ เดตเดฟเดจเต‹เดฆเดคเตเดคเดฟเดจเดพเดฏเดฟ, เดเดฑเตเดฑเดตเตเด‚ เด•เตเดฑเดžเตเดž โ€œเด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฒเดธเตเดฑเตเดฑเตผโ€ เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดŽเด™เตเด™เดจเต†เดฏเตเดฃเตเดŸเต†เดจเตเดจเต เดจเต‹เด•เตเด•เดพเด‚. (เด‡เดคเต เดตเดณเดฐเต† เดŽเดณเตเดชเตเดชเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเต เดฆเดฟ เดนเดพเตผเดกเต เดตเต‡.)

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต, เดฒเดฟเดจเด•เตเดธเต, เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเตเด•เตพ เดŽเดจเตเดจเดฟเดตเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดŸเดฟเดธเตเดฅเดพเดจ เด…เดฑเดฟเดตเตเดฃเตเดŸเต†เดจเตเดจเต เดžเดพเตป เด•เดฐเตเดคเตเดจเตเดจเต. เดžเด™เตเด™เตพ เด‡เดตเดฟเดŸเต† เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต†เดฒเตเดฒเดพเด‚ เด—เดตเต‡เดทเดฃ/เดชเด เดจ เด†เดตเดถเตเดฏเด™เตเด™เตพเด•เตเด•เต เดฎเดพเดคเตเดฐเดฎเตเดณเตเดณเดคเดพเดฃเต, เด…เดตเดฏเตŠเดจเตเดจเตเด‚ เดจเดฟเตผเดฎเตเดฎเดพเดฃเดคเตเดคเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฐเตเดคเต!

เดชเต†เดพเดคเต เด…เดตเดฒเต‡เดพเด•เดจเด‚

เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเตฝ เดจเดฟเดฐเดตเดงเดฟ เด˜เดŸเด•เด™เตเด™เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดคเดจเตเดธเดฐเดฟเดšเตเดšเต เดตเดฟเด•เตเด•เดฟเดชเต€เดกเดฟเดฏ, เดตเดพเดธเตเดคเตเดตเดฟเดฆเตเดฏ เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต:

เดเดฑเตเดฑเดตเตเด‚ เด•เตเดฑเดžเตเดž เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเดฏ เด•เตเดฌเตผเดจเต†เดฑเตเดฑเตเด•เตพ

เด•เตเดฑเดžเตเดžเดคเต เดŽเดŸเตเดŸเต เด˜เดŸเด•เด™เตเด™เดณเต†เด™เตเด•เดฟเดฒเตเด‚ เด‡เดตเดฟเดŸเต† เด•เดพเดฃเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต, เดŽเดจเตเดจเดพเตฝ เด…เดตเดฏเดฟเตฝ เดฎเดฟเด•เตเด•เดคเตเด‚ เดžเด™เตเด™เตพ เด…เดตเด—เดฃเดฟเด•เตเด•เตเด‚. เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เดŽเดจเตเดจเต เดจเตเดฏเดพเดฏเดฎเดพเดฏเตเด‚ เดตเดฟเดณเดฟเด•เตเด•เดพเดตเตเดจเตเดจ เดเดฑเตเดฑเดตเตเด‚ เด•เตเดฑเดžเตเดž เด•เดพเดฐเตเดฏเด‚ เดฎเต‚เดจเตเดจเต เดชเตเดฐเดงเดพเดจ เด˜เดŸเด•เด™เตเด™เตพ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจเตเดตเต†เดจเตเดจเต เดžเดพเตป เดชเตเดฐเดธเตเดคเดพเดตเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต:

  • เด•เตเดฌเต†เดฒเต†เดฑเตเดฑเต
  • kube-apiserver (เด‡เดคเต etcd-เดฏเต† เด†เดถเตเดฐเดฏเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต - เด…เดคเดฟเดจเตเดฑเต† เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต)
  • เด•เดฃเตเดŸเต†เดฏเตเดจเตผ เดฑเตบเดŸเตˆเด‚ (เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ เดกเต‹เด•เตเด•เตผ)

เด“เดฐเต‹เดจเตเดจเดฟเดจเต†เดฏเตเด‚ เด•เตเดฑเดฟเดšเตเดšเต เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป เดŽเดจเตเดคเดพเดฃเต เดชเดฑเดฏเตเดจเตเดจเดคเต†เดจเตเดจเต เดจเดฎเตเด•เตเด•เต เดจเต‹เด•เตเด•เดพเด‚ (เดฑเดธเต., เด‡เด‚เด—เตเดฒเต€เดทเต.). เด†เดฆเตเดฏเด‚ เด•เตเดฌเต†เดฒเต†เดฑเตเดฑเต:

เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเต† เด“เดฐเต‹ เดจเต‹เดกเดฟเดฒเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดเดœเดจเตเดฑเต. เดชเต‹เดกเดฟเตฝ เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต†เดจเตเดจเต เด‡เดคเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เตเดจเตเดจเต.

เดตเต‡เดฃเตเดŸเดคเตเดฐ เดฒเดณเดฟเดคเดฎเดพเดฏเดฟ เดคเต‹เดจเตเดจเตเดจเตเดจเต. เดŽเดจเตเดคเตเดชเดฑเตเดฑเดฟ เด•เดฃเตเดŸเต†เดฏเตเดจเตผ เดฑเตบเดŸเตˆเดฎเตเด•เตพ (เด•เดฃเตเดŸเต†เดฏเตเดจเตผ เดฑเตบเดŸเตˆเด‚)?

เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดฐเต‚เดชเด•เตฝเดชเตเดชเดจ เดšเต†เดฏเตโ€Œเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดพเดฃเต เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเตผ เดฑเตบเดŸเตˆเด‚.

เดตเดณเดฐเต† เดตเดฟเดœเตเดžเดพเดจเดชเตเดฐเดฆเด‚. เดŽเดจเตเดจเดพเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดกเต‹เด•เตเด•เดฑเดฟเดจเต† เดชเดฐเดฟเดšเดฏเดฎเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เด…เดคเต เดŽเดจเตเดคเดพเดฃเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเตŠเดคเตเดตเดพเดฏ เด’เดฐเต เดงเดพเดฐเดฃ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚. (เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเตผ เดฑเตบเดŸเตˆเดฎเตเด‚ เด•เตเดฌเต†เดฒเต†เดฑเตเดฑเตเด‚ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เด‰เดคเตเดคเดฐเดตเดพเดฆเดฟเดคเตเดคเด™เตเด™เตพ เดตเต‡เตผเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เตพ เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดตเดณเดฐเต† เดธเต‚เด•เตเดทเตเดฎเดฎเดพเดฃเต, เดžเดพเตป เด…เดตเดฏเดฟเดฒเต‡เด•เตเด•เต เด‡เดตเดฟเดŸเต† เด•เดŸเด•เตเด•เดฟเดฒเตเดฒ.)

ะ˜ API เดธเต†เตผเดตเตผ?

Kubernetes API เดคเตเดฑเดจเตเดจเตเด•เดพเดŸเตเดŸเตเดจเตเดจ Kubernetes เด•เตบเดŸเตเดฐเต‹เตพ เดชเดพเดจเตฝ เด˜เดŸเด•เดฎเดพเดฃเต API เดธเต†เตผเดตเตผ. เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฃ เดชเดพเดจเดฒเดฟเดจเตเดฑเต† เด•เตเดฒเดฏเดจเตเดฑเต เดตเดถเดฎเดพเดฃเต API เดธเต†เตผเดตเตผ

Kubernetes-เดฎเดพเดฏเดฟ เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดšเต†เดฏเตโ€ŒเดคเดฟเดŸเตเดŸเตเดณเตเดณ เด†เตผเด•เตเด•เตเด‚ API-เดฏเตเดฎเดพเดฏเดฟ เดจเต‡เดฐเดฟเดŸเตเดŸเต‹ kubectl เดตเดดเดฟเดฏเต‹ เดธเด‚เดตเดฆเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด‡เดคเดพเดฃเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด†เด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เดนเตƒเดฆเดฏเด‚ - เดจเดฎเตเด•เตเด•เต†เดฒเตเดฒเดพเดตเตผเด•เตเด•เตเด‚ เด…เดฑเดฟเดฏเดพเดตเตเดจเตเดจเดคเตเด‚ เด‡เดทเตเดŸเดชเตเดชเต†เดŸเตเดจเตเดจเดคเตเดฎเดพเดฏ (?) 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 เด“เดชเตเดทเตป เดตเดดเดฟ Kubelet-เดฒเต‡เด•เตเด•เต เด…เดฏเดšเตเดš เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเดฟเตฝ เดˆ เด“เดชเตโ€Œเดทเตป เดธเดœเตเดœเดฎเดพเด•เตเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚. เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดตเดฐเด™เตเด™เตพเด•เตเด•เต, เด•เดพเดฃเตเด•. kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file .)

เดˆ เด“เดชเตเดทเตป เดžเด™เตเด™เดณเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด•เดพเดฏเตเด•เตพ - Kubernetes 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 เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เดชเต‹เดกเต เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเดจเตเดจเดคเต เดตเดฐเต† เด…เดคเต เด…เดจเดฟเดถเตเดšเดฟเดคเดฎเดพเดฏเดฟ เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด‚.

เดธเตเดตเดฏเด‚ เด…เดญเดฟเดจเดจเตเดฆเดฟเด•เตเด•เตเด•. เดŸเต†เตผเดฎเดฟเดจเดฒเดฟเดฒเต‡เด•เตเด•เต เดŸเต†เด•เตโ€Œเดธเตโ€Œเดฑเตเดฑเต เด”เดŸเตเดŸเตโ€ŒเดชเตเดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด‚ เด†เดถเดฏเด•เตเด•เตเดดเดชเตเดชเดฎเตเดฃเตเดŸเดพเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดฎเดพเตผเด—เตเด—เด‚ เดžเด™เตเด™เตพ เด•เดฃเตเดŸเตเดชเดฟเดŸเดฟเดšเตเดšเต!

เดฎเตเดคเดฒเดพเดฏเดต เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด•

เดžเด™เตเด™เดณเตเดŸเต† เด†เดคเตเดฏเดจเตเดคเดฟเด• เดฒเด•เตเดทเตเดฏเด‚ Kubernetes 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

เดจเดฟเด™เตเด™เตพ เดŽเดชเตเดชเต‹เดดเต†เด™เตเด•เดฟเดฒเตเด‚ Kubernetes-เตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดˆ YAML เดซเดฏเดฒเตเด•เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเดฐเดฟเดšเดฟเดคเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚. เด‡เดตเดฟเดŸเต† เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เต‡เดฃเตเดŸ เดฐเดฃเตเดŸเต เดชเต‹เดฏเดฟเดจเตเดฑเตเด•เตพ เดฎเดพเดคเตเดฐเดฎเต‡เดฏเตเดณเตเดณเต‚:

เดžเด™เตเด™เตพ เดนเต‹เดธเตเดฑเตเดฑเต เดซเต‹เตพเดกเตผ เดฎเตŒเดฃเตเดŸเต เดšเต†เดฏเตเดคเต /var/lib/etcd เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚ etcd เดกเดพเดฑเตเดฑ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจ เดคเดฐเดคเตเดคเดฟเตฝ เดชเต‹เดกเดฟเตฝ (เด‡เดคเต เดšเต†เดฏเตเดคเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดชเต‹เดกเต เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดฎเตเดชเต‹เดดเต†เดฒเตเดฒเดพเด‚ เด•เตเดฒเดธเตเดฑเตเดฑเตผ เด…เดตเดธเตเดฅ เดฎเดพเดฏเตโ€Œเด•เตเด•เดชเตเดชเต†เดŸเตเด‚, เด‡เดคเต เดšเตเดฐเตเด™เตเด™เดฟเดฏ เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด‡เตปเดธเตเดฑเตเดฑเดพเดณเต‡เดทเดจเตเดชเต‹เดฒเตเด‚ เดจเดฒเตเดฒเดคเดฒเตเดฒ).

เดžเด™เตเด™เตพ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดคเต hostNetwork: true. เดˆ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด‚, เดชเต‹เดกเดฟเดจเตเดฑเต† เด†เดจเตเดคเดฐเดฟเด• เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เดฟเดจเต เดชเด•เดฐเด‚ เดนเต‹เดธเตเดฑเตเดฑเต เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต etcd เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเดจเตเดจเต (เด‡เดคเต เดŽเดชเดฟเด เดธเต†เตผเดตเดฑเดฟเดจเต 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 เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เดคเตเดฑเดจเตเดจ เด†เด•เตโ€Œเดธเดธเต เด‰เดณเตเดณ เดชเต‹เตผเดŸเตเดŸเต 8080-เตฝ Kubernetes API เดถเตเดฐเดตเดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต†เดจเตเดจเต เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเต - เด†เดงเดฟเด•เดพเดฐเดฟเด•เดค เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ!

$ 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.

เดŽเดจเตเดคเดพเดฃเต เด•เดพเดฐเตเดฏเด‚? เด•เตเดฑเดšเตเดšเต เด–เดฃเตเดกเดฟเด•เด•เตพ เดฎเตเดฎเตเดชเต เดจเดฟเด™เตเด™เตพ เด“เตผเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดžเด™เตเด™เตพ เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเดฏ เด•เดฎเดพเตปเดกเต เดฒเตˆเตป เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต kubelet เด†เดฐเด‚เดญเดฟเดšเตเดšเดคเต, เด…เดคเดฟเดจเดพเตฝ API เดธเต†เตผเดตเดฑเตเดฎเดพเดฏเดฟ เดŽเด™เตเด™เดจเต† เดฌเดจเตเดงเดชเตเดชเต†เดŸเดฃเดฎเต†เดจเตเดจเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เด…เดตเดธเตเดฅเดฏเต† เด…เดฑเดฟเดฏเดฟเด•เตเด•เดฃเดฎเต†เดจเตเดจเตเด‚ kubelet-เดจเต เด…เดฑเดฟเดฏเดฟเดฒเตเดฒ. เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป เดชเด เดฟเดšเตเดš เดถเต‡เดทเด‚, เด…เดจเตเดฌเดจเตเดง เดซเตเดฒเดพเด—เต เดžเด™เตเด™เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเต:

--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

(เดตเดดเดฟเดฏเดฟเตฝ, kubelet เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดคเตเดคเดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพ API-เดฒเต‡เด•เตเด•เต curl เดตเดดเดฟ เด†เด•เตเดธเดธเต เดšเต†เดฏเตเดฏเดพเตป เดถเตเดฐเดฎเดฟเดšเตเดšเดพเตฝ, เด…เดคเต เด‡เดชเตเดชเต‹เดดเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฏเดฟ เดจเดฟเด™เตเด™เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเด‚! Kubelet เด…เดคเดฟเดจเตเดฑเต† เดกเต‹เด•เตเด•เตผ เดชเต‹เดฒเต†เดฏเตเดณเตเดณ เดชเต‹เดกเตเด•เดณเตเดŸเต† เด’เดฐเต "เดฐเด•เตเดทเดพเด•เตผเดคเตƒ" เด…เดฒเตเดฒ, เด…เดคเต เด’เดฐเต "เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด‚" เดชเต‹เดฒเต†เดฏเดพเดฃเต. เดกเต†เดฎเตบ.โ€ เด’เดฐเต เด•เตเดฌเต†เดฒเต†เดฑเตเดฑเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เตเดจเตเดจ เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเตเด•เตพ เด•เตเดฌเต†เดฒเต†เดฑเตเดฑเต เดจเดฟเตผเดคเตเดคเตเดจเตเดจเดคเต เดตเดฐเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต เดคเตเดŸเดฐเตเด‚.)

เดเดคเดพเดจเตเด‚ เดฎเดฟเดจเดฟเดฑเตเดฑเตเด•เตพเด•เตเด•เตเดณเตเดณเดฟเตฝ 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

เด’เดŸเตเดตเดฟเตฝ, เดชเต‹เดกเต เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเต! เดŽเดจเตเดจเดพเตฝ เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ เด…เดคเต เด†เดฐเด‚เดญเดฟเด•เตเด•เดฟเดฒเตเดฒ, เด•เดพเดฐเดฃเด‚ เดจเดฎเตเด•เตเด•เดฟเดฒเตเดฒ เด†เดธเต‚เดคเตเดฐเด•เตป (เดทเต†เดกเตเดฏเต‚เดณเตผ) เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดจเตเดฑเต† เดฎเดฑเตเดฑเตŠเดฐเต เดชเตเดฐเดงเดพเดจ เด˜เดŸเด•เดฎเดพเดฃเต. เดตเต€เดฃเตเดŸเตเด‚, Kubernetes 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>

เดชเต‹เดกเตเด•เตพเด•เตเด•เดฟเดŸเดฏเดฟเดฒเตเดณเตเดณ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดถเดฐเดฟเดฏเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเตป, เดจเดฎเตเด•เตเด•เต เดฎเดฑเตเดฑเตŠเดฐเต เดชเต‹เดกเดฟเตฝ เดจเดฟเดจเตเดจเต curl เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเด‚:

$ 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>

เดˆ เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเดฟเตฝ เด•เตเดดเดฟเดšเตเดšเต†เดŸเตเดคเตเดคเต เดŽเดจเตเดคเดพเดฃเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต†เดจเตเดจเตเด‚ เดŽเดจเตเดคเดพเดฃเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดคเตเดคเดคเต†เดจเตเดจเตเด‚ เด•เดพเดฃเตเดจเตเดจเดคเต เดตเดณเดฐเต† เดฐเดธเด•เดฐเดฎเดพเดฃเต. เด•เต‹เตบเดซเดฟเด—เตเดฎเดพเดชเตเดชเตเด‚ เดฐเดนเดธเตเดฏเดตเตเด‚ เดชเตเดฐเดคเต€เด•เตเดทเดฟเดšเตเดšเดคเตเดชเต‹เดฒเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต†เดจเตเดจเต เดžเดพเตป เด•เดฃเตเดŸเต†เดคเตเดคเดฟ, เดŽเดจเตเดจเดพเตฝ เดธเต‡เดตเดจเดตเตเด‚ เดตเดฟเดจเตเดฏเดพเดธเดตเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดฟเดฒเตเดฒ.

เดตเดฟเดœเดฏเด‚!

เดˆ เดชเต‹เดธเตเดฑเตเดฑเต เดฆเตˆเตผเด˜เตเดฏเดฎเต‡เดฑเดฟเดฏเดคเดพเดฃเต, เด…เดคเดฟเดจเดพเตฝ เดžเดพเตป เดตเดฟเดœเดฏเด‚ เดชเตเดฐเด–เตเดฏเดพเดชเดฟเด•เตเด•เดพเตป เดชเต‹เด•เตเดจเตเดจเต, เด‡เดคเต "เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต" เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เดพเดตเตเดจเตเดจ เด’เดฐเต เดชเตเดฐเดพเดฏเต‹เด—เดฟเด• เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดพเดฃเต†เดจเตเดจเต เดชเดฑเดฏเดพเตป เดชเต‹เด•เตเดจเตเดจเต. เดšเตเดฐเตเด•เตเด•เดคเตเดคเดฟเตฝ: เดจเดพเดฒเต เดฌเตˆเดจเดฑเดฟเด•เดณเตเด‚ เด…เดžเตเดšเต เด•เดฎเดพเตปเดกเต เดฒเตˆเตป เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเตเด‚ YAML-เดจเตเดฑเต† "เดฎเดพเดคเตเดฐเด‚" 45 เดตเดฐเดฟเด•เดณเตเด‚ (เด…เดฒเตเดฒ เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเต เดฎเดพเดจเดฆเดฃเตเดกเดฎเดจเตเดธเดฐเดฟเดšเตเดšเต) เดžเด™เตเด™เตพเด•เตเด•เต เด•เตเดฑเดšเตเดšเต เด•เดพเดฐเตเดฏเด™เตเด™เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต:

  • เดธเดพเดงเดพเดฐเดฃ เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต API เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เดชเต‹เดกเตเด•เตพ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต (เด•เตเดฑเดšเตเดšเต เดนเดพเด•เตเด•เตเด•เดณเต‹เดŸเต†)
  • เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเตŠเดคเต เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเตผ เดšเดฟเดคเตเดฐเด™เตเด™เตพ เด…เดชเตโ€Œเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚
  • เดชเต‹เดกเตเด•เตพ เดธเดœเต€เดตเดฎเดพเดฏเดฟ เดคเตเดŸเดฐเตเด•เดฏเตเด‚ เดธเตเดตเดฏเดฎเต‡เดต เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต
  • เด’เดฐเต‡ เดจเต‹เดกเดฟเดจเตเดณเตเดณเดฟเดฒเต† เดชเต‹เดกเตเด•เตพ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เดฟเด‚เด—เต เดจเดจเตเดจเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต
  • เด•เต‹เตบเดซเดฟเด—เตโ€Œเดฎเดพเดชเตเดชเต, เดฐเดนเดธเตเดฏเดตเตเด‚ เดฒเดณเดฟเดคเดตเตเดฎเดพเดฏ เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเต เดฎเต—เดฃเตเดŸเดฟเด‚เด—เต เดœเต‹เดฒเดฟเด•เตพ เดชเตเดฐเดคเต€เด•เตเดทเดฟเดšเตเดšเดคเตเดชเต‹เดฒเต†

เดŽเดจเตเดจเดพเตฝ เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเดฟเดจเต† เดถเดฐเดฟเด•เตเด•เตเด‚ เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเด•เตเด•เตเดจเตเดจ เดชเดฒเดคเตเด‚ เด‡เดชเตเดชเต‹เดดเตเด‚ เด•เดพเดฃเตเดจเตเดจเดฟเดฒเตเดฒ, เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต:

  • เดชเต‹เดกเต เดทเต†เดกเตเดฏเต‚เดณเตผ
  • เดชเตเดฐเดพเดฎเดพเดฃเต€เด•เดฐเดฃเด‚/เด…เด‚เด—เต€เด•เดพเดฐเด‚
  • เด’เดจเตเดจเดฟเดฒเดงเดฟเด•เด‚ เดจเต‹เดกเตเด•เตพ
  • เดธเต‡เดตเดจ เดถเตƒเด‚เด–เดฒ
  • เด•เตเดฒเดธเตเดฑเตเดฑเต‡เตผเดกเต เด‡เดจเตเดฑเต‡เดฃเตฝ DNS
  • เดธเต‡เดตเดจ เด…เด•เตเด•เต—เดฃเตเดŸเตเด•เตพเด•เตเด•เดพเดฏเตเดณเตเดณ เด•เตบเดŸเตเดฐเต‹เดณเดฑเตเด•เตพ, เดตเดฟเดจเตเดฏเดพเดธเด™เตเด™เตพ, เด•เตเดฒเต—เดกเต เดฆเดพเดคเดพเด•เตเด•เดณเตเดฎเดพเดฏเตเดณเตเดณ เดธเด‚เดฏเต‹เดœเดจเด‚, เด•เตเดฌเต†เตผเดจเต†เดฑเตเดฑเดธเต เด•เตŠเดฃเตเดŸเตเดตเดฐเตเดจเตเดจ เดฎเดฑเตเดฑเต เดฎเดฟเด•เตเด• เด—เตเดฃเด™เตเด™เดณเตเด‚

เด…เดชเตเดชเต‹เตพ เดจเดฎเตเด•เตเด•เต เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดŽเดจเตเดคเดพเดฃเต เดฒเดญเดฟเดšเตเดšเดคเต? เดธเตเดตเดจเตเดคเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต API เดถเดฐเดฟเด•เตเด•เตเด‚ เด’เดฐเต เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เด‚ เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เด•เดฃเตเดŸเต†เดฏเตเดจเตผ เด“เดŸเตเดŸเต‹เดฎเต‡เดทเตป. เด‡เดคเต เด•เต‚เดŸเตเดคเตฝ เด’เดจเตเดจเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดฟเดฒเตเดฒ - เด‡เดคเต API เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดตเดฟเดตเดฟเดง เด•เตบเดŸเตเดฐเต‹เดณเตผเดฎเดพเตผเด•เตเด•เตเด‚ เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผเดฎเดพเตผเด•เตเด•เตเด‚ เดตเต‡เดฃเตเดŸเดฟเดฏเตเดณเตเดณ เด’เดฐเต เดœเต‹เดฒเดฟเดฏเดพเดฃเต - เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เด“เดŸเตเดŸเต‹เดฎเต‡เดทเดจเดพเดฏเดฟ เดธเตเดฅเดฟเดฐเดคเดฏเตเดณเตเดณ เด…เดจเตเดคเดฐเต€เด•เตเดทเด‚ เดจเตฝเด•เตเดจเตเดจเต.

เดธเต—เดœเดจเตเดฏ เดตเต†เดฌเดฟเดจเดพเดฑเดฟเตฝ เด•เต‹เดดเตเดธเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด•เต‚เดŸเตเดคเดฒเดฑเดฟเดฏเตเด•.

เด•เต‚เดŸเตเดคเดฒเต เดตเดพเดฏเดฟเด•เตเด•เตเด•:

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•