เบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เบ‚เบญเบ‡ Skaffold เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ Kubernetes

เบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เบ‚เบญเบ‡ Skaffold เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ Kubernetes

เบ™เบถเปˆเบ‡เบ›เบตเป€เบ„เบดเปˆเบ‡เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เปƒเบ™เบงเบฑเบ™เบ—เบต 5 เบกเบตเบ™เบฒ 2018, Google เป„เบ”เป‰เบ›เปˆเบญเบเป€เบงเบตเบŠเบฑเปˆเบ™ alpha เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™ Open Source เบ‚เบญเบ‡เบ•เบปเบ™เบชเปเบฒเบฅเบฑเบš CI/CD เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ Skaffold, เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ‚เบญเบ‡เบกเบฑเบ™เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡ "เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ Kubernetes เบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบŠเป‰เปเบฒเบเบฑเบ™" เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบชเบฒเบกเบฒเบ”เบชเบธเบกเปƒเบชเปˆเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบšเปเบฅเบดเบซเบฒเบ™. เบชเบดเปˆเบ‡เบ—เบตเปˆเบญเบฒเบ”เบˆเบฐเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบเปˆเบฝเบงเบเบฑเบš Skaffold? เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เบซเบฑเบ™เบญเบญเบ, เบกเบฑเบ™เบกเบตเป€เบ„เบฑเบ”เบฅเบฑเบšเบšเปเปˆเบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”เป€เบ–เบดเบ‡เปเบ‚เบ™เบ‚เบญเบ‡เบกเบฑเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ, เปเบฅเบฐเบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบงเบดเบชเบฐเบงเบฐเบเบญเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™. เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบˆเบฑเบเบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เปเบฅเบฐเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เบกเบฑเบ™.

NB: เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบงเบปเป‰เบฒเบชเบฑเป‰เบ™เป†เบเปˆเบฝเบงเบเบฑเบš Skaffold เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบงเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ เบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบžเบฑเบ”เบ—เบฐเบ™เบฒ, เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปเบกเปˆเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš Kubernetes.

เบ—เบดเบ”เบชเบฐเบ”เบต. เบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เปเบฅเบฐเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบง, Skaffold เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบงเบปเบ‡เบˆเบญเบ™ CI / CD เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” (เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡, เบŠเบธเบเบเบนเป‰, เบ™เปเบฒเปƒเบŠเป‰), เบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบเบฒเบ™เบ•เบญเบšเป‚เบ•เป‰เบ—เบฑเบ™เบ—เบต, i.e. เบ„เบงเบฒเบกโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบขเปˆเบฒเบ‡โ€‹เบงเปˆเบญเบ‡โ€‹เป„เบงโ€‹เบœเบปเบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เบ•เปเปˆโ€‹เบกเบฒ - เปƒเบ™โ€‹เบฎเบนเบšโ€‹เปเบšเบšโ€‹เบ‚เบญเบ‡โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ—เบตเปˆโ€‹เบ›เบฑเบšโ€‹เบ›เบธเบ‡โ€‹เปเบฅเปˆเบ™โ€‹เปƒเบ™โ€‹เบเบธเปˆเบก Kubernetesโ€‹. เปเบฅเบฐเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบงเบปเบ‡เบˆเบญเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ (dev, เบ‚เบฑเป‰เบ™เบ•เบญเบ™, เบเบฒเบ™เบœเบฐเบฅเบดเบ” ... ), เบ—เบตเปˆ Skaffold เบŠเปˆเบงเบเบญเบฐเบ—เบดเบšเบฒเบเบ—เปเปˆเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ rollout.

เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡ Skaffold เปเบกเปˆเบ™เบ‚เบฝเบ™เปƒเบ™ Go, เปเบˆเบเบขเบฒเบเป‚เบ”เบ เบžเบฒเบเปƒเบ•เป‰เปƒเบšเบญเบฐเบ™เบธเบเบฒเบ” Apache 2.0 (GitHub).

เบ‚เปเปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบ•เบปเป‰เบ™เบ•เปเปเบฅเบฐเบฅเบฑเบเบชเบฐเบ™เบฐเบ•เปˆเบฒเบ‡เป†. เบ—เปเบฒเบญเบดเบ”เบ›เบฐเบเบญเบšเบกเบตเบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • Skaffold เบชเบฐเป€เปœเบตเป€เบ„เบทเปˆเบญเบ‡เบกเบทเปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบ—เปเปˆ CI/CD.
  • เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปƒเบ™เบžเบทเป‰เบ™เบซเบฅเบฑเบ‡เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ‚เบญเบ‡เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบฅเบฐเบซเบฑเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฎเบนเบšเบžเบฒเบšเบšเบฑเบ™เบˆเบธ, เป€เบœเบตเบเปเบœเปˆเบฎเบนเบšเบžเบฒเบšเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบขเบนเปˆเปƒเบ™ Docker Registry เปเบฅเบฐเบ™เปเบฒเป„เบ›เปƒเบŠเป‰เบเบฑเบšเบเบธเปˆเบก Kubernetes.
  • synchronizes เป„เบŸเบฅเปŒเปƒเบ™ repository เบเบฑเบš directory เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ container เป„เบ”เป‰.
  • เบ—เบปเบ”เบชเบญเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰ container-structure-test.
  • เบชเบปเปˆเบ‡เบ•เปเปˆเบžเบญเบ”.
  • เบญเปˆเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™เบเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธ.
  • เบŠเปˆเบงเบเปƒเบ™เบเบฒเบ™เปเบเป‰เบšเบฑเบ™เบซเบฒเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเบ‚เบฝเบ™เปƒเบ™ Java, Node.js, Python, Go.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”:

  • Skaffold เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบšเปเปˆเบกเบตเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ”เป‰เบฒเบ™เบ‚เป‰เบฒเบ‡เบ‚เบญเบ‡เบเบธเปˆเบก. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Kubernetes เบ•เบทเปˆเบกเบญเบตเบเป€เบžเบทเปˆเบญเปƒเบŠเป‰เบ›เบฐเป‚เบซเบเบ”เบ™เบตเป‰.
  • เบ—เปเปˆเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเป‰เบงเบ™เบฅเบฐเบซเบฑเบ”เป„เบ›เบเบฑเบ‡ Minikube เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒ, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบžเบทเปˆเบญเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบซเบผเบทเบเบฒเบ™เบœเบฐเบฅเบดเบ”? เบชเปเบฒเบฅเบฑเบšเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ™เบตเป‰เบกเบต เป‚เบ›เบฃเป„เบŸเบฅ เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบœเบนเป‰เปƒเบŠเป‰, เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปเบฅเบฐเบ—เบธเบ‡, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบญเบฐเบ—เบดเบšเบฒเบเบ—เปเปˆเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบซเบ™เบถเปˆเบ‡.
  • CLI. เบžเบฝเบ‡เปเบ•เปˆ console utility เปเบฅเบฐ configurations เปƒเบ™ YAML. เปƒเบ™เบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡ GUI เบ—เบปเบ”เบฅเบญเบ‡เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰, เบชเปˆเบงเบ™เบซเบผเบฒเบเบญเบฒเบ”เบˆเบฐเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบœเบนเป‰เปƒเบ”เบœเบนเป‰เบซเบ™เบถเปˆเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เบฅเบฒเบง, เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เปเบ—เป‰เป†.
  • เบ„เบงเบฒเบกเบ„เปˆเบญเบ‡เปเบ„เป‰เบง. Skaffold เบšเปเปˆเปเบกเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เป€เบเบฑเบšเบเปˆเบฝเบงเปเบšเบšเบ”เปˆเบฝเบง, เปเบ•เปˆเบžเบฐเบเบฒเบเบฒเบกเปƒเบŠเป‰เป‚เบกเบ”เบนเบ™เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™เบซเบผเบทเบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบชเบฐเป€เบžเบฒเบฐ.

เบฎเบนเบšเบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบญเบฑเบ™เบชเบธเบ”เบ—เป‰เบฒเบ:

  • เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ›เบฐเบเบญเบš, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰:
    • docker เบชเป‰เบฒเบ‡เบขเบนเปˆเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™, เปƒเบ™เบเบธเปˆเบกเป‚เบ”เบเปƒเบŠเป‰ kaniko เบซเบผเบทเปƒเบ™ Google Cloud Build;
    • Bazel เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™;
    • Jib Maven เปเบฅเบฐ Jib Gradle เบขเบนเปˆเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบซเบผเบทเปƒเบ™ Google Cloud Build;
    • script build custom เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบขเบนเปˆเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰เบเบฒเบ™เปเบเป‰เป„เบ‚เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบšเบšเบญเบทเปˆเบ™ (เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบเบทเบ”เบซเบเบธเปˆเบ™ / เบ„เบธเป‰เบ™เป€เบ„เบตเบ / ... ) เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เปƒเบ™เบชเบฐเบ„เบดเบšเป€เบžเบทเปˆเบญเปƒเบซเป‰ Skaffold เป€เบ›เบตเบ”เบ•เบปเบง (เบ•เบปเบงเบขเปˆเบฒเบ‡เบˆเบฒเบเป€เบญเบเบฐเบชเบฒเบ™). เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เปƒเบŠเป‰เบ•เบปเบงเป€เบเบฑเบšเปƒเบ”เป†เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบญเบตเป‰เบ™เป„เบ”เป‰เป‚เบ”เบเปƒเบŠเป‰ script;
  • เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเปเบฅเป‰เบง container-structure-test;
  • เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เป„เบ”เป‰โ€‹เบชเบฐโ€‹เบซเบ™เบญเบ‡โ€‹เปƒเบซเป‰โ€‹:
    • Kubectl;
    • เปเบงเบ;
    • เบ›เบฑเบšเปเบ•เปˆเบ‡.

เบ‚เปเบ‚เบญเบšเปƒเบˆเบเบฑเบšเบ™เบตเป‰, Skaffold เบชเบฒเบกเบฒเบ”เป€เบญเบตเป‰เบ™เบงเปˆเบฒเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบ เป‚เบ„เบ‡โ€‹เบฎเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡ CI/CD. เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบกเบทเปˆเบญเปƒเบŠเป‰เบกเบฑเบ™ (เบˆเบฒเบเป€เบญเบเบฐเบชเบฒเบ™เป‚เบ„เบ‡เบเบฒเบ™):

เบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เบ‚เบญเบ‡ Skaffold เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ Kubernetes

เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ Skaffold เบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเปเบ™เบงเปƒเบ”เปƒเบ™เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ—เบปเปˆเบงเป„เบ›?

  1. เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ•เบดเบ”เบ•เบฒเบกเบเบงเบ”เบเบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡. เบ–เป‰เบฒเบกเบตเบเบฒเบ™เบ”เบฑเบ”เปเบเป‰เป„เบŸเบฅเปŒ, เบžเบงเบเบกเบฑเบ™เบˆเบฐเบ–เบทเบ synchronized เบเบฑเบšเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ pod เปƒเบ™เบเบธเปˆเบก Kubernetes. เบ–เป‰เบฒเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ›เบฐเบเบญเบšเบฎเบนเบšเบžเบฒเบšเบ„เบทเบ™. เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบฎเบนเบšเบžเบฒเบšเปƒเบซเบกเปˆเปเบกเปˆเบ™เบ›เบฐเบเบญเบš.
  2. เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบ›เบฐเบเบญเบšเบ–เบทเบเบเบงเบ”เบชเบญเบšเป‚เบ”เบเปƒเบŠเป‰ container-structure-test, tagged เปเบฅเบฐเบชเบปเปˆเบ‡เป„เบ›เบ—เบตเปˆ Docker Registry.
  3. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบตเป‰, เบฎเบนเบšเบžเบฒเบšเป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเป„เบ›เปƒเบŠเป‰ - เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบเบธเปˆเบก Kubernetes.
  4. เบ–เป‰เบฒเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเป„เบ”เป‰เบ–เบทเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ skaffold dev, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบ—เบถเบเบˆเบฒเบเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™, เปเบฅเบฐ Skaffold เบฅเปเบ–เป‰เบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบŠเป‰เปเบฒเบ—เบธเบเป†เบเบฒเบ™เบเบฐเบ—เปเบฒเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡.

เบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เบ‚เบญเบ‡ Skaffold เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ Kubernetes
เบฎเบนเบšเบžเบฒเบšเบ‚เบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ Skaffold

เบ›เบฐเบ•เบดเบšเบฑเบ”. เบžเบฐเบเบฒเบเบฒเบก Skaffold

เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Skaffold, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเป€เบญเบปเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เบˆเบฒเบ เบ„เบฑเบ‡เป€เบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ GitHub... เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™ เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เบญเบทเปˆเบ™เป†เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบ—เบตเปˆเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบชเบฐเป€เบžเบฒเบฐเบ•เปˆเบฒเบ‡เป†. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เปƒเบ™ Minikube. เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒเบชเบญเบ‡เบชเบฒเบกเบ™เบฒเบ—เบต, เปเบฅเบฐเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™ kubectl เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.

เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Skaffold:

curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64
chmod +x skaffold
sudo mv skaffold /usr/local/bin
skaffold version
v0.37.1

เปƒเบซเป‰ clone เบ„เบฑเบ‡เป€เบเบฑเบšเบ‚เบญเบ‡ Skaffold เบ”เป‰เบงเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™:

git clone https://github.com/GoogleContainerTools/skaffold
cd skaffold/examples/microservices

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบฅเบทเบญเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบกเบตเบชเบญเบ‡เบเบฑเบ, เปเบ•เปˆเบฅเบฐเบญเบฑเบ™เบกเบตเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Go เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡. เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™ frontend (leeroy-web), เป€เบŠเบดเปˆเบ‡เบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเป„เบ›เบซเบฒเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเบชเบญเบ‡ - backend (leeroy-app). เบกเบฒโ€‹เป€เบšเบดเปˆเบ‡โ€‹เบเบฑเบ™โ€‹เบงเปˆเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เปเบ™เบงโ€‹เปƒเบ”:

~/skaffold/examples/microservices # tree
.
โ”œโ”€โ”€ leeroy-app
โ”‚   โ”œโ”€โ”€ app.go
โ”‚   โ”œโ”€โ”€ Dockerfile
โ”‚   โ””โ”€โ”€ kubernetes
โ”‚       โ””โ”€โ”€ deployment.yaml
โ”œโ”€โ”€ leeroy-web
โ”‚   โ”œโ”€โ”€ Dockerfile
โ”‚   โ”œโ”€โ”€ kubernetes
โ”‚   โ”‚   โ””โ”€โ”€ deployment.yaml
โ”‚   โ””โ”€โ”€ web.go
โ”œโ”€โ”€ README.adoc
โ””โ”€โ”€ skaffold.yaml
 
4 directories, 8 files

leeroy-app เปเบฅเบฐ leeroy-web เบกเบตเบฅเบฐเบซเบฑเบ” Go เปเบฅเบฐ Dockerfiles เบ‡เปˆเบฒเบเป†เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™:

~/skaffold/examples/microservices # cat leeroy-app/Dockerfile
FROM golang:1.12.9-alpine3.10 as builder
COPY app.go .
RUN go build -o /app .
 
FROM alpine:3.10
CMD ["./app"]
COPY --from=builder /app .

เบ‚เป‰เบญเบเบˆเบฐเบšเปเปˆเปƒเบซเป‰เบฅเบฐเบซเบฑเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ - เบกเบฑเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเบฎเบนเป‰เบงเปˆเบฒ leeroy-web เบเบญเบกเบฎเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปเบฅเบฐเบ•เบปเบงเปเบ—เบ™เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ leeroy-app. เป€เบžเบฒเบฐเบชเบฐเบ™เบฑเป‰เบ™เปƒเบ™เป„เบŸเบฅเปŒ Deployment.yaml เบกเบตเบšเปเบฅเบดเบเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบš app (เบชเปเบฒเบฅเบฑเบšเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบžเบฒเบเปƒเบ™). เบžเบญเบ”เบžเบญเบ” web เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบปเปˆเบ‡เบ•เปเปˆเปƒเบซเป‰เบเบฑเบšเบ•เบปเบงเป€เบฎเบปเบฒเป€เบญเบ‡เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป„เบ”เป‰เป„เบง.

เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ skaffold.yaml:

~/skaffold/examples/microservices # cat skaffold.yaml
apiVersion: skaffold/v1beta13
kind: Config
build:
  artifacts:
    - image: leeroy-web
      context: ./leeroy-web/
    - image: leeroy-app
      context: ./leeroy-app/
deploy:
  kubectl:
    manifests:
      - ./leeroy-web/kubernetes/*
      - ./leeroy-app/kubernetes/*
portForward:
  - resourceType: deployment
    resourceName: leeroy-web
    port: 8080
    localPort: 9000

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เปเบกเปˆเบ™เป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰. เบ™เบญเบเป€เบซเบ™เบทเบญเป„เบ›เบˆเบฒเบ config เบ™เบตเป‰, เบเบฑเบ‡เบกเบตเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบปเปˆเบงเป‚เบฅเบ - ~/.skaffold/config. เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเปเบเป‰เป„เบ‚เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เบซเบผเบทเบœเปˆเบฒเบ™ CLI - เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

skaffold config set --global local-cluster true

เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰เบˆเบฐเบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป‚เบฅเบ local-cluster เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ„เบงเบฒเบกเบซเบกเบฒเบ true, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ Skaffold เบˆเบฐเบšเปเปˆเบžเบฐเบเบฒเบเบฒเบกเบเบนเป‰เบฎเบนเบšเบžเบฒเบšเป„เบ›เบเบฑเบ‡เบฅเบตเบˆเบดเบ”เบŠเบตเบ—เบฒเบ‡เป„เบ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒเบขเบนเปˆเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™.

เบเบฑเบšโ€‹เป„เบ› skaffold.yaml:

  • เบขเบนเปˆเป€เบ—เบดเบ‡เป€เบงเบ—เบต build เบžเบงเบเป€เบฎเบปเบฒเบฅเบฐเบšเบธเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเปเบฅเบฐเบšเบฑเบ™เบ—เบถเบเบฎเบนเบšเบžเบฒเบšเบขเบนเปˆเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™. เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปเบฅเปˆเบ™เป€เบ›เบฑเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:
    // ั‚.ะบ. Minikube ัะพะทะดะฐะตั‚ ะบะปะฐัั‚ะตั€ ะฒ ะพั‚ะดะตะปัŒะฝะพะน ะฒะธั€ั‚ัƒะฐะปัŒะฝะพะน ะผะฐัˆะธะฝะต,
    // ะฟั€ะธะดะตั‚ัั ะฟั€ะพะฝะธะบะฝัƒั‚ัŒ ะฒะฝัƒั‚ั€ัŒ, ั‡ั‚ะพะฑั‹ ะฝะฐะนั‚ะธ ะพะฑั€ะฐะทั‹
    # minikube ssh
    $ docker images
    REPOSITORY                                TAG                                                                IMAGE ID            CREATED             SIZE 
    leeroy-app                                7d55a50803590b2ff62e47e6f240723451f3ef6f8c89aeb83b34e661aa287d2e   7d55a5080359        4 hours ago         13MB 
    leeroy-app                                v0.37.1-171-g0270a0c-dirty                                         7d55a5080359        4 hours ago         13MB
    leeroy-web                                5063bfb29d984db1ff70661f17d6efcc5537f2bbe6aa6907004ad1ab38879681   5063bfb29d98        5 hours ago         13.1MB
    leeroy-web                                v0.37.1-171-g0270a0c-dirty                                         5063bfb29d98        5 hours ago         13.1MB

    เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, Skaffold tagged เบฎเบนเบšเบžเบฒเบšเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบ™เบฐเป‚เบเบšเบฒเบ tagging เบซเบผเบฒเบเปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™.

  • เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบ™ config เบกเบฑเบ™เบ–เบทเบเบŠเบตเป‰เบšเบญเบ context: ./leeroy-app/, i.e. เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ—เบตเปˆเบฎเบนเบšเบžเบฒเบšเบ–เบทเบเป€เบเบฑเบšเบเบณเปเบกเปˆเบ™เบฅเบฐเบšเบธเป„เบงเป‰.
  • เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบกเบฑเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰ kubectl เปเบฅเบฐเบซเบ™เป‰เบฒเบเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™.
  • PortForward: เบ„เป‰เบฒเบเบ„เบทเบเบฑเบšเบงเบดเบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบฑเบเบˆเบฐเบชเบปเปˆเบ‡เบ•เปเปˆเบžเบญเบ”เป‚เบ”เบเปƒเบŠเป‰ kubectl port-forward, เบžเบงเบเป€เบฎเบปเบฒเปƒเบซเป‰เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบเบฑเบš Skaffold เป€เบžเบทเปˆเบญเป‚เบ—เบซเบฒเบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบ—เปˆเบฒเป€เบฎเบทเบญเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™ 9000 เบ–เบทเบเบชเบปเปˆเบ‡เบ•เปเปˆเป„เบ›เบซเบฒ 8080 เปƒเบ™ Deployment เบ”เป‰เบงเบเบŠเบทเปˆ. leeroy-web.

เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบง skaffold dev: เบ—เบตเบกเบ‡เบฒเบ™เบˆเบฐเบชเป‰เบฒเบ‡ "เบงเบปเบ‡เบเบฒเบ™เบ„เปเบฒเบ„เบดเบ”เป€เบซเบฑเบ™" เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡, i.e. เบกเบฑเบ™เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเบฅเบงเบšเบฅเบงเบกเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบฅเบฐเบ™เปเบฒเป„เบ›เปƒเบŠเป‰เปƒเบ™เบเบธเปˆเบก, เปเบ•เปˆเบเบฑเบ‡เบˆเบฐเบšเบญเบเบ—เปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบเบฑเบเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปเบฅเบฐเบ›เบฑเบšเบ›เบธเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบเบฑเบ.

เบ™เบตเป‰เปเบกเปˆเบ™เบœเบปเบ™เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง skaffold dev --port-forward เป€เบกเบทเปˆเบญโ€‹เบ›เบฐเบเบญเบšโ€‹เบ„เบทเบ™โ€‹เปƒเปเปˆ:

เบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เบ‚เบญเบ‡ Skaffold เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ Kubernetes

เบ—เปเบฒเบญเบดเบ”, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒ cache เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰. เบ•เปเปˆเป„เบ›, เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป„เบ”เป‰เบ–เบทเบเบ›เบฐเบเบญเบš, deployed, เปเบฅเบฐเบžเบญเบ”เปเบกเปˆเบ™เบชเบปเปˆเบ‡เบ•เปเปˆ. เบ•เบฑเป‰เบ‡โ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบšเบธโ€‹เป„เบงเป‰โ€‹ --port-forward, Skaffold เบชเบปเปˆเบ‡เบ•เปเปˆเบžเบญเบ”เป„เบ› web, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบฅเบฒเบงเบ–เบทเบเบ–เบฒเบก, เปเบ•เปˆเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰ app เบฅเบฒเบงเบ–เบดเป‰เบกเบ•เบฒเบกเบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡ (เป€เบฅเบทเบญเบเบ—เบตเปˆเปƒเบเป‰เบ—เบตเปˆเบชเบธเบ”เบŸเบฃเบต). เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบ—เบถเบเบ—เปเบฒเบญเบดเบ”เบˆเบฒเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ.

เปƒเบซเป‰เบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบšเป?

~/skaffold/examples/microservices # kubectl get po
NAME                          READY   STATUS    RESTARTS   AGE
leeroy-app-6998dfcc95-2nxvf   1/1     Running   0          103s
leeroy-web-69f7d47c9d-5ff77   1/1     Running   0          103s
~/skaffold/examples/microservices # curl localhost:9000
leeroooooy app!!!

เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เบ›เบธเบ‡โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹ leeroy-app/app.go - เบšเปเปˆโ€‹เบžเปโ€‹เป€เบ—เบปเปˆเบฒโ€‹เปƒเบ”โ€‹เบงเบดโ€‹เบ™เบฒโ€‹เบ—เบตโ€‹เบœเปˆเบฒเบ™โ€‹เป„เบ› ... เปเบฅเบฐโ€‹:

~/skaffold/examples/microservices # kubectl get po
NAME                          READY   STATUS    RESTARTS   AGE
leeroy-app-ffd79d986-l6nwp    1/1     Running   0          11s
leeroy-web-69f7d47c9d-5ff77   1/1     Running   0          4m59s
~/skaffold/examples/microservices # curl localhost:9000
leeroooooy Habr!!!

เปƒเบ™เบ‚เบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™, Skaffold เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เป„เบ”เป‰เบชเบฐเปเบ”เบ‡เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™เบขเบนเปˆเปƒเบ™ console เบ„เบทเบเปˆเบญเบ™, เป‚เบ”เบเบกเบตเบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เบซเบ™เบถเปˆเบ‡เบˆเบธเบ”: เบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบกเป‰เบงเบ™เบญเบญเบ. leeroy-app, เปเบฅเบฐเบšเปเปˆเปเบกเปˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™.

เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก

เบกเบฑเบ™เบเบฑเบ‡เบกเบตเบกเบนเบ™เบ„เปˆเบฒเบšเบญเบเบงเปˆเบฒเป€เบกเบทเปˆเบญเบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เปƒเบซเบกเปˆ, configs เบชเปเบฒเบฅเบฑเบš Skaffold เบชเบฒเบกเบฒเบ”เบ–เบทเบ bootstrapped เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡. init, เป€เบŠเบดเปˆเบ‡เบชเบฐเบ”เบงเบเบซเบผเบฒเบ. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™ configs เบซเบผเบฒเบ: เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปƒเบ™ config เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ roll out เบเบฑเบšเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡. run (เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš dev, เบžเบฝเบ‡เปเบ•เปˆเบšเปเปˆเป„เบ”เป‰เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡), เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ config เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เปƒเบ™ katacoda เบกเบต เบ„เบนเปˆเบกเบท เบกเบฑเบ™เบ‡เปˆเบฒเบเบเบงเปˆเบฒเบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡. เปเบ•เปˆเบกเบฑเบ™เบชเบฐเบซเบ™เบญเบ‡ sandbox เบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบ”เป‰เบงเบ Kubernetes, เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปเบฅเบฐ Skaffold. เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เบ—เบตเปˆโ€‹เบ”เบตโ€‹เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เบชเบปเบ™โ€‹เปƒเบˆโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบฒเบกโ€‹เบญเบญเบโ€‹เบžเบทเป‰เบ™โ€‹เบ–เบฒเบ™โ€‹เบซเบผเบฒเบโ€‹เบ•เบปเบงโ€‹เบ—เปˆเบฒเบ™โ€‹เป€เบญเบ‡โ€‹.

เบเปเบฅเบฐเบ™เบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบซเบ™เบถเปˆเบ‡เบชเปเบฒเบฅเบฑเบš Skaffold เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปƒเบ™เบเบธเปˆเบกเบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบ. เบšเปเปˆเปเบกเปˆเบ™เบ—เบธเบเบ„เบปเบ™เบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบเปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ Minikube เปƒเบ™เบฎเบฒเบ”เปเบงเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบ›เบตเบ”เบ•เบปเบงเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปเบฅเบฐเบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เบžเบฝเบ‡เบžเป ... เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, Skaffold เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบขเบทเบ™เบขเบฑเบ™เป„เบ”เป‰, เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เป‚เบ”เบเบงเบดเบชเบฐเบงเบฐเบเบญเบ™ Reddit, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบต. เบชเบปเบ™เบ—เบฐเบ™เบฒเปเบฅเป‰เบง wrote เปƒเบ™ blog เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เปเบฅเบฐเปƒเบ™ เบชเบดเปˆเบ‡เบžเบดเบกเบ™เบตเป‰ เบˆเบฒเบ Weaveworks เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เบ—เปเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ”.

เบชเบฐเบซเบฅเบธเบš

Skaffold เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบชเบฐเบ”เบงเบเปƒเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เปเปˆเบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ Kubernetes เปเบฅเบฐเป€เบ™เบฑเป‰เบ™เปƒเบชเปˆเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ”เป‰เบฒเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบ›เบฑเบ™เบ•เบปเป‰เบ™เบ•เป. เบกเบฑเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบ—เปเปˆ "เบชเบฑเป‰เบ™" เป€เบŠเบดเปˆเบ‡เบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ, เปเบ•เปˆเบ–เป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเป„เบ”เป‰. เป€เบ›เบฑเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Skaffold เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ CI / CD เปเบกเปˆเบ™เปƒเบซเป‰ เบ”เบฑเปˆเบ‡โ€‹เบเปˆเบฒเบง เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹ เบ‚เบญเบ‡ 10 microservices เป‚เบ”เบเปƒเบŠเป‰เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡ Kubernetes, gRPC, Istio เปเบฅเบฐ OpenCensus Tracing.

Skaffold เบกเบตเป€เบเบทเบญเบš 8000+ เบ”เบฒเบงเบขเบนเปˆเปƒเบ™ GitHub, เบ–เบทเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเป‚เบ”เบ Google เปเบฅเบฐเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ GoogleContainerTools โ€” เป‚เบ”เบโ€‹เบ—เบปเปˆเบงโ€‹เป„เบ›, เปƒเบ™โ€‹เบ›เบฑเบ”โ€‹เบˆเบธโ€‹เบšเบฑเบ™โ€‹เบกเบตโ€‹เป€เบซเบ”โ€‹เบœเบปเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบŠเบทเปˆเบญโ€‹เบงเปˆเบฒโ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบˆเบฐโ€‹เบžเบฑเบ”โ€‹เบ—เบฐโ€‹เบ™เบฒโ€‹เบขเปˆเบฒเบ‡โ€‹เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เบชเบธเบโ€‹เบ—เบธเบโ€‹เบ„เบฑเป‰เบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹.

PS

เบญเปˆเบฒเบ™เบเบฑเบ‡เบขเบนเปˆเปƒเบ™ blog เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

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

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