KlusterKit: เบŠเบธเบ”เป€เบ„เบทเปˆเบญเบ‡เบกเบทเปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ™เบณเปƒเบŠเป‰ Kubernetes เบฅเบฝเบšเบ‡เปˆเบฒเบ เปเบฅเบฐ เปเบฅเปˆเบ™เปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเป‚เบ”เบ”เบ”เปˆเบฝเบงเบ—เบฒเบ‡เบฎเปˆเบฒเบ‡เบเบฒเบ.

KlusterKit

เบกเบทเป‰เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบ•เบทเปˆเบ™เป€เบ•เบฑเป‰เบ™เบ—เบตเปˆเบˆเบฐเบ›เบฐเบเบฒเบ”เบงเปˆเบฒ Platform9 เปเบกเปˆเบ™เป€เบ›เบตเบ”เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบกเบฒ Klusterkit, เบŠเบธเบ”เบ‚เบญเบ‡เบชเบฒเบกเป€เบ„เบทเปˆเบญเบ‡เบกเบท, เบžเบฒเบเปƒเบ•เป‰เปƒเบšเบญเบฐเบ™เบธเบเบฒเบ” Apache v2.0 เปƒเบ™ GitHub.

เบฅเบนเบเบ„เป‰เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบงเบŠเบญเบšเปเบงเปƒเบ™เบชเบนเบ™เบ‚เปเป‰เบกเบนเบ™เบชเปˆเบงเบ™เบ•เบปเบงเบ—เบตเปˆเบกเบฑเบเบˆเบฐเบšเปเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ” (เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบซเบผเบทเป€เบซเบ”เบœเบปเบ™เบญเบทเปˆเบ™เป†). เบšเปเบฅเบดเบชเบฑเบ”เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰เบ›เบฐเป‚เบซเบเบ”เบˆเบฒเบ Kubernetes เปเบฅเบฐเบ›เบฑเบšเบ›เบธเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปƒเบซเป‰เบ—เบฑเบ™เบชเบฐเป„เบซเบกเปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เบกเป‰เบงเบ™เบžเบงเบเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบชเบนเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เป€เบŠเบดเปˆเบ‡เบกเบฑเบเบˆเบฐเบšเปเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป‚เบฅเบเบžเบฒเบเบ™เบญเบ. เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆ Klusterkit เป€เบ‚เบปเป‰เบฒเบกเบฒ, เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบˆเบฑเบ”เบซเบฒ เปเบฅเบฐเบˆเบฑเบ”เบเบฒเบ™เบเบธเปˆเบก K8s เปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเป‚เบ”เบ”เบ”เปˆเบฝเบง.

Klusterkit เบ›เบฐเบเบญเบšเบกเบตเบชเบฒเบกเป€เบ„เบทเปˆเบญเบ‡เบกเบทเป€เบญเบเบฐเบฅเบฒเบ”เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™เบซเบผเบทเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบงเบปเบ‡เบˆเบญเบ™เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบเบธเปˆเบกเบเบฒเบ™เบœเบฐเบฅเบดเบ” Kubernetes:

  1. etcdadm, CLI เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบเบธเปˆเบก etcd เปเบšเบšเบ‡เปˆเบฒเบเบ”เบฒเบ.
  2. nodeadm, CLI เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเบซเบฒเบ™ node เบ—เบตเปˆเบ‚เบฐเบซเบเบฒเบ kubeadm เปเบฅเบฐ deploys dependencies เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป‚เบ”เบ kubeadm.
  3. cctl, เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบงเบปเบ‡เบˆเบญเบ™เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบเบธเปˆเบกเบ—เบตเปˆเบฎเบฑเบšเบฎเบญเบ‡เป€เบญเบปเบฒ Cluster API เบˆเบฒเบเบŠเบธเบกเบŠเบปเบ™ Kubernetes เปเบฅเบฐเปƒเบŠเป‰ nodeadm เปเบฅเบฐ etcdadm เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบชเบปเปˆเบ‡ เปเบฅเบฐเบฎเบฑเบเบชเบฒเบเบธเปˆเบก Kubernetes เบ—เบตเปˆเบกเบตเปƒเบซเป‰เบขเปˆเบฒเบ‡เบšเปเปˆเบขเบธเบ”เบขเบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆ เปเบฅเบฐเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเป‚เบ”เบ”เบ”เปˆเบฝเบงเบ—เบฒเบ‡เบฎเปˆเบฒเบ‡เบเบฒเบ.

เบฎเปˆเบงเบกเบเบฑเบ™, เบชเบฒเบกเป€เบ„เบทเปˆเบญเบ‡เบกเบทเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบงเบฝเบเบ‡เบฒเบ™เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เบˆเบฑเบ”เบซเบฒ เปเบฅเบฐ เบˆเบฑเบ”เบเบฒเบ™เบเบธเปˆเบก etcd เบ—เบตเปˆเบกเบตเปƒเบซเป‰เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ เปเบฅเบฐ dashboard Kubernetes เปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปƒเบ™เบšเปเบฅเบดเป€เบงเบ™เบ—เบตเปˆเป‚เบ”เบ”เบ”เปˆเบฝเบงเบ—เบฒเบ‡เบฎเปˆเบฒเบ‡เบเบฒเบเบœเปˆเบฒเบ™ Cluster API.
  • เบเบฒเบ™เบŸเบทเป‰เบ™เบŸเบนเปเบœเบ‡เบ„เบงเบšเบ„เบธเบกเบเบธเปˆเบกเบซเบผเบฑเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบฅเบงเป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เบชเปเบฒเบฎเบญเบ‡เบ‚เปเป‰เบกเบนเบ™ etcd.
  • เบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆเบ‚เบญเบ‡เบ›เบญเบกเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡ Kubernetes เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเป‚เบ”เบ”เบ”เปˆเบฝเบง.

เบ„เบธเบ™โ€‹เบ™เบฐโ€‹เบชเบปเบกโ€‹เบšเบฑเบ” Klusterkitโ€‹

  • เบฎเบญเบ‡เบฎเบฑเบšเบซเบผเบฒเบเปเบกเปˆเบšเบปเบ” (HA cluster K8s).
  • เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เปเบฅเบฐเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบธเปˆเบก etcd เบ—เบตเปˆเบ›เบญเบ”เป„เบž.
  • เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเป‚เบ”เบ”เบ”เปˆเบฝเบงเบ—เบฒเบ‡เบฎเปˆเบฒเบ‡เบเบฒเบ.
  • เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบเบปเบเบฅเบฐเบ”เบฑเบšเบกเป‰เบงเบ™เปเบฅเบฐ rollbacks.
  • Flannel (vxlan) เป€เบ›เบฑเบ™ CNI เบชเปเบฒเบฅเบฑเบš backend; เบกเบตเปเบœเบ™เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ CNIs เบญเบทเปˆเบ™เป†.
  • เบเบฒเบ™โ€‹เบชเปเบฒโ€‹เบฎเบญเบ‡โ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบŸเบทเป‰เบ™โ€‹เบŸเบนโ€‹เบ‚เบญเบ‡โ€‹เบเบธเปˆเบก etcd เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เบชเบนเบ™โ€‹เป€เบชเบโ€‹เบ‚เบญเบ‡โ€‹เบเบธเปˆเบกโ€‹.
  • เบ›เบปเบเบ›เป‰เบญเบ‡เปเบœเบ‡เบ„เบงเบšเบ„เบธเบกเบˆเบฒเบเบเบฒเบ™เปเบปเบ”เบ„เบงเบฒเบกเบˆเบณ เปเบฅเบฐเป€เบงเบฅเบฒ CPU.

Klusterkit Solution Architecture

KlusterKit

เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบญเบปเบ”เบ—เบปเบ™เปเบฅเบฐเบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ”เบฒเบ, Klusterkit เปƒเบŠเป‰เป„เบŸเบฅเปŒ cctl-state.yaml เบ”เบฝเบงเป€เบžเบทเปˆเบญเป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เป€เบกเบ•เบฒเป€เบ”เบ•เบฒเบ‚เบญเบ‡เบเบธเปˆเบก Kubernetes. เบœเปˆเบฒเบ™ cctl CLI เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบฒเบ™เบงเบปเบ‡เบˆเบญเบ™เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบเบธเปˆเบก Kubernetes เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปƒเบ”เบเปเป„เบ”เป‰เบ—เบตเปˆเบกเบตเป„เบŸเบฅเปŒเบฅเบฑเบ”เบ™เบตเป‰. เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เปเบฅเบฑเบšเบ—เบฑเบญเบšเบ‚เบญเบ‡เบœเบนเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™ เบซเบผเบทเบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบญเบทเปˆเบ™เป†เบ—เบตเปˆเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เปœเบถเปˆเบ‡เบ‚เบญเบ‡เบเบธเปˆเบก Kubernetes.

Cctl เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบฅเบฐเป€เบญเบตเป‰เบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš cluster-api เบˆเบฒเบเบ•เบปเป‰เบ™เบ™เป‰เปเบฒเป€เบ›เบฑเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™ CRUD เปƒเบ™เบเบธเปˆเบก. เบฅเบฒเบงเปƒเบŠเป‰ ssh-เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™, เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™ cluster-api เป‚เบฅเบซเบฐเป€เบ›เบปเปˆเบฒเปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เบˆเบฒเบ Platform9, เป€เบŠเบดเปˆเบ‡เปƒเบ™เบ™เบฑเป‰เบ™เป€เบญเบตเป‰เบ™เบงเปˆเบฒ etcdadm เปเบฅเบฐ nodeadm เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เปƒเบ™เบเบธเปˆเบก.

เบงเบดเบ—เบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Klusterkit เปเบฅเบฐเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบกเบฑเบ™:

1 - เบซเบ™เบถเปˆเบ‡เปƒเบ™เบชเบฒเบกเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบชเบฒเบกเบฒเบ”เป€เบเบฑเบšเบเปเบฒเป„เบ”เป‰เบ‡เปˆเบฒเบเบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡ go get:

go get -u github.com/platform9/cctl

go get -u github.com/platform9/nodeadm

go get -u github.com/kubernetes-sigs/etcdadm

2 - เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ–เบทเบเบซเบธเป‰เบกเบซเปเปˆเปเบฅเบฐเบ„เบฑเบ”เบฅเบญเบเปƒเบชเปˆเป€เบ„เบทเปˆเบญเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบเบธเปˆเบก Kubernetes เบ—เบตเปˆเบกเบตเปƒเบซเป‰เบชเบนเบ‡เบ„เบงเบ™เบˆเบฐเปเบฅเปˆเบ™. เบงเบฒเบ‡เป„เบŸเบฅเปŒ nodeadm เปเบฅเบฐ etcdadm เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบฎเบธเปˆเบ™:

cp $GOPATH/bin/nodeadm /var/cache/ssh-provider/nodeadm//

cp $GOPATH/bin/etcdadm /var/cache/ssh-provider/etcdadm//

3 - เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบˆเบฑเบ”เบเบธเปˆเบก Kubernetes เบขเบนเปˆเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™, เปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเป‚เบ”เบ”เบ”เปˆเบฝเบง, เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบชเบฒเบกเบฒเบ”เบ”เบฒเบงเป‚เบซเบผเบ”เป„เบ”เป‰เบ‡เปˆเบฒเบเปƒเบ™เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡เบ”เบฒเบงเป‚เบซเบฅเบ” nodeadm เปเบฅเบฐ etcdadm. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบฅเบฒเบเบเบฒเบ™เบ—เบตเปˆเบ”เบฒเบงเป‚เบซเบผเบ”เบกเบฒ (i.e. kubelet เปเบฅเบฐ kubelet unit file for systemd, CNI executable files, kubeadm file, all container images including Kubernetes, keepalived image and systemd file, etcd container image and corfiguration files) เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ„เบฑเบ”เบฅเบญเบเป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเบเบฑเบš hosts เบ—เบตเปˆเป‚เบ”เบ”เบ”เปˆเบฝเบงเบ•เบฒเบกเบฎเปˆเบฒเบ‡เบเบฒเบ. เบ”เป‰เบงเบ cctl, nodeadm เปเบฅเบฐ etcdadm. (เป€เบšเบดเปˆเบ‡เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เปƒเบ™ เบงเบดโ€‹เบเบต).

4 โ€“ เป€เบกเบทเปˆเบญโ€‹เบ—เบธเบโ€‹เบชเบดเปˆเบ‡โ€‹เบ—เบธเบโ€‹เบขเปˆเบฒเบ‡โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบชเบฐโ€‹เบ–เบฒเบ™โ€‹เบ—เบตเปˆโ€‹, เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบชเป‰เบฒเบ‡โ€‹เบเบธเปˆเบก Kubernetes เบ—เปเบฒโ€‹เบญเบดเบ”โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบชเบญเบ‡โ€‹เบชเบฒเบกโ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹:

- เบ—เปเบฒเบญเบดเบ”เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบ›เบฐเบˆเปเบฒเบ•เบปเบงเบชเปเบฒเบฅเบฑเบšเบเบธเปˆเบก.

$GOPATH/bin/cctl create credential --user root --private-key ~/.ssh/id_rsa

- เบˆเบฒเบเบ™เบฑเป‰เบ™เบชเป‰เบฒเบ‡เบงเบฑเบ”เบ–เบธเบเบธเปˆเบก. -help เป€เบญเบปเบฒเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™.

$GOPATH/bin/cctl create cluster --pod-network 192.168.0.0/16 --service-network 192.169.0.0/24

- เบชเบธเบ”เบ—เป‰เบฒเบ, เบชเป‰เบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ—เปเบฒเบญเบดเบ”เปƒเบ™เบเบธเปˆเบก.

$GOPATH/bin/cctl create machine --ip $MACHINE_IP --role master

เบญเปˆเบฒเบ™เป€เบญเบเบฐเบชเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป„เบ”เป‰เบ—เบตเปˆ GitHub.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™