āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸

āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋāĻ° āĻ…āĻ¨ā§āĻŦāĻžāĻĻ āĻ•ā§‹āĻ°ā§āĻ¸ āĻļā§āĻ°ā§āĻ° āĻĒā§āĻ°āĻžāĻ•ā§āĻ•āĻžāĻ˛ā§‡ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ "DevOps āĻ…āĻ¨ā§āĻļā§€āĻ˛āĻ¨ āĻāĻŦāĻ‚ āĻ¸āĻ°āĻžā§āĻœāĻžāĻŽ".

āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸

āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻŸāĻŋ āĻĒāĻĄāĻŧāĻ›ā§‡āĻ¨, āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻŋāĻ›ā§ āĻļā§āĻ¨ā§‡āĻ›ā§‡āĻ¨ (āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻ¨āĻž āĻšāĻ¯āĻŧ āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ–āĻžāĻ¨ā§‡ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻļā§‡āĻˇ āĻ•āĻ°āĻ˛ā§‡āĻ¨?) āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ†āĻ¸āĻ˛ā§‡ āĻ•ā§€? āĻāĻ‡ "āĻļāĻŋāĻ˛ā§āĻĒ-āĻ—ā§āĻ°ā§‡āĻĄ āĻĒāĻžāĻ¤ā§āĻ°ā§‡ āĻ…āĻ°ā§āĻ•ā§‡āĻ¸ā§āĻŸā§āĻ°ā§‡āĻļāĻ¨"? āĻŦāĻž "āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ-āĻ¨ā§‡āĻŸāĻŋāĻ­ āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻŋāĻ‚ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ"? āĻāĻ‡ āĻāĻŽāĻ¨āĻ•āĻŋ āĻŽāĻžāĻ¨ā§‡ āĻ•āĻŋ?

āĻ¸āĻ¤ā§āĻ¯āĻŋ āĻŦāĻ˛āĻ¤ā§‡, āĻ†āĻŽāĻŋ 100% āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ¨āĻ‡āĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻŽāĻŋ āĻŽāĻ¨ā§‡ āĻ•āĻ°āĻŋ āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖ āĻ…āĻ‚āĻļā§‡ āĻ–āĻ¨āĻ¨ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ā§‡āĻ° āĻŦāĻŋāĻŽā§‚āĻ°ā§āĻ¤āĻ¤āĻžāĻ° āĻ…āĻ¨ā§‡āĻ• āĻ¸ā§āĻ¤āĻ°ā§‡āĻ° āĻ…āĻ§ā§€āĻ¨ā§‡ āĻ†āĻ¸āĻ˛ā§‡ āĻ•ā§€ āĻ˜āĻŸāĻ›ā§‡ āĻ¤āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧāĨ¤ āĻ¤āĻžāĻ‡ āĻļā§āĻ§ā§ āĻŽāĻœāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻ¸ā§āĻ¨ āĻĻā§‡āĻ–ā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ• āĻāĻ•āĻŸāĻŋ āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ "āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°" āĻ†āĻ¸āĻ˛ā§‡ āĻ•ā§‡āĻŽāĻ¨ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧāĨ¤ (āĻāĻŸāĻŋ āĻāĻ° āĻšā§‡āĻ¯āĻŧā§‡ āĻ…āĻ¨ā§‡āĻ• āĻ¸āĻšāĻœ āĻšāĻŦā§‡ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻĻā§āĻ¯ āĻšāĻžāĻ°ā§āĻĄ āĻ“āĻ¯āĻŧā§‡.)

āĻ†āĻŽāĻŋ āĻ§āĻ°ā§‡ āĻ¨āĻŋāĻšā§āĻ›āĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸, āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸ āĻāĻŦāĻ‚ āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ• āĻœā§āĻžāĻžāĻ¨ āĻ†āĻ›ā§‡āĨ¤ āĻ†āĻŽāĻ°āĻž āĻāĻ–āĻžāĻ¨ā§‡ āĻ¯āĻž āĻ•āĻŋāĻ›ā§ āĻ•āĻĨāĻž āĻŦāĻ˛āĻŋ āĻ¤āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ—āĻŦā§‡āĻˇāĻŖāĻž/āĻļāĻŋāĻ•ā§āĻˇāĻžāĻ° āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ā§‡, āĻāĻ° āĻ•ā§‹āĻ¨ā§‹āĻŸāĻŋ āĻ‰ā§ŽāĻĒāĻžāĻĻāĻ¨ā§‡ āĻ°āĻžāĻ–āĻŦā§‡āĻ¨ āĻ¨āĻž!

āĻ“āĻ­āĻžāĻ°āĻ­āĻŋāĻ‰

āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸā§‡ āĻ…āĻ¨ā§‡āĻ• āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ…āĻ¨ā§āĻ¸āĻžāĻ°ā§‡ āĻ‰āĻ‡āĻ•āĻŋāĻĒāĻŋāĻĄāĻŋāĻ¯āĻŧāĻž, āĻ¸ā§āĻĨāĻžāĻĒāĻ¤ā§āĻ¯ āĻāĻ‡ āĻŽāĻ¤ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ:

āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸

āĻāĻ–āĻžāĻ¨ā§‡ āĻ…āĻ¨ā§āĻ¤āĻ¤ āĻ†āĻŸāĻŸāĻŋ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻĻā§‡āĻ–āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻ¤āĻžāĻĻā§‡āĻ° āĻŦā§‡āĻļāĻŋāĻ°āĻ­āĻžāĻ—āĻ•ā§‡ āĻ‰āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦāĨ¤ āĻ†āĻŽāĻŋ āĻŦāĻ˛āĻ¤ā§‡ āĻšāĻžāĻ‡ āĻ¯ā§‡ āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ āĻœāĻŋāĻ¨āĻŋāĻ¸āĻŸāĻŋāĻ•ā§‡ āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻ¸āĻ™ā§āĻ—āĻ¤āĻ­āĻžāĻŦā§‡ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻŦāĻ˛āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ—āĻ āĻŋāĻ¤:

  • āĻ•ā§āĻŦāĻ˛ā§‡āĻŸ
  • kube-apiserver (āĻ¯āĻž etcd-āĻāĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡ - āĻāĻ° āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸)
  • āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻ°āĻžāĻ¨āĻŸāĻžāĻ‡āĻŽ (āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻĄāĻ•āĻžāĻ°)

āĻ†āĻ¸ā§āĻ¨ āĻĻā§‡āĻ–āĻŋ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻĄāĻ•ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨ āĻ•āĻŋ āĻŦāĻ˛ā§‡ (rus., āĻ‡āĻ‚āĻ°ā§‡āĻœāĻŋ.) āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻ•ā§āĻŦāĻ˛ā§‡āĻŸ:

āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°ā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¨ā§‹āĻĄā§‡ āĻšāĻ˛āĻŽāĻžāĻ¨ āĻāĻ•āĻŸāĻŋ āĻāĻœā§‡āĻ¨ā§āĻŸāĨ¤ āĻāĻŸāĻŋ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§‡ āĻ¯ā§‡ āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ°āĻ—ā§āĻ˛āĻŋ āĻĒāĻĄā§‡ āĻšāĻ˛āĻ›ā§‡āĨ¤

āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻ¸āĻšāĻœ āĻļā§‹āĻ¨āĻžāĻšā§āĻ›ā§‡. āĻ•āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ§āĻžāĻ°āĻ• āĻ°āĻžāĻ¨āĻŸāĻžāĻ‡āĻŽ (āĻ§āĻžāĻ°āĻ• āĻ°āĻžāĻ¨āĻŸāĻžāĻ‡āĻŽ)?

āĻāĻ•āĻŸāĻŋ āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻ°āĻžāĻ¨āĻŸāĻžāĻ‡āĻŽ āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ¯āĻž āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻĄāĻŋāĻœāĻžāĻ‡āĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻ–ā§āĻŦāĻ‡ āĻ¤āĻĨā§āĻ¯āĻŦāĻšā§āĻ˛. āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻĄāĻ•āĻžāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻšāĻ¨ āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻ•ā§€ āĻ•āĻ°ā§‡ āĻ¸ā§‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ§āĻžāĻ°āĻŖāĻž āĻĨāĻžāĻ•āĻž āĻ‰āĻšāĻŋāĻ¤āĨ¤ (āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻ°āĻžāĻ¨āĻŸāĻžāĻ‡āĻŽ āĻāĻŦāĻ‚ āĻ•ā§āĻŦā§‡āĻ˛ā§‡āĻŸā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĻāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦā§‡āĻ° āĻŦāĻŋāĻšā§āĻ›ā§‡āĻĻā§‡āĻ° āĻŦāĻŋāĻŦāĻ°āĻŖ āĻ†āĻ¸āĻ˛ā§‡ āĻŦā§‡āĻļ āĻ¸ā§‚āĻ•ā§āĻˇā§āĻŽ āĻāĻŦāĻ‚ āĻ†āĻŽāĻŋ āĻāĻ–āĻžāĻ¨ā§‡ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ¯āĻžāĻŦ āĻ¨āĻžāĨ¤)

И API āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°?

API āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻšāĻ˛ Kubernetes āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛ āĻĒā§āĻ¯āĻžāĻ¨ā§‡āĻ˛ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ¯āĻž Kubernetes API āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°ā§‡āĨ¤ API āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻšāĻ˛ Kubernetes āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛ āĻĒā§āĻ¯āĻžāĻ¨ā§‡āĻ˛ā§‡āĻ° āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ¸āĻžāĻ‡āĻĄ

āĻ¯ā§‡ āĻ•ā§‡āĻ‰ Kubernetes āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻŋāĻ›ā§ āĻ•āĻ°ā§‡āĻ›ā§‡ āĻ¤āĻžāĻ•ā§‡ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻŦāĻž kubectl āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ API āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸā§‡āĻ¸ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸā§‡āĻ¸ - āĻāĻ‡ āĻŽāĻ¸ā§āĻ¤āĻŋāĻˇā§āĻ• āĻ¯āĻž āĻ†āĻŽāĻ°āĻž āĻ¸āĻ•āĻ˛ā§‡āĻ‡ āĻœāĻžāĻ¨āĻŋ āĻāĻŦāĻ‚ āĻ­āĻžāĻ˛ā§‹āĻŦāĻžāĻ¸āĻŋ (?) āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻŋāĻ‚ āĻ‡āĻ¨āĻĢā§āĻ°āĻžāĻ¸ā§āĻŸā§āĻ°āĻžāĻ•āĻšāĻžāĻ°ā§‡ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻ•āĻ°ā§‡āĨ¤ āĻāĻŸāĻž āĻ¸ā§āĻĒāĻˇā§āĻŸ āĻŽāĻ¨ā§‡ āĻšāĻšā§āĻ›ā§‡ āĻ¯ā§‡ API āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ā§‡ āĻ‰āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻšāĻ“āĻ¯āĻŧāĻž āĻ‰āĻšāĻŋāĻ¤āĨ¤

āĻĒā§‚āĻ°ā§āĻŦāĻļāĻ°ā§āĻ¤

  • āĻ°ā§āĻŸ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ¸āĻš āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŦāĻž āĻļāĻžāĻ°ā§€āĻ°āĻŋāĻ• āĻŽā§‡āĻļāĻŋāĻ¨ (āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§‡āĻļāĻŋāĻ¨ā§‡ āĻ‰āĻŦā§āĻ¨ā§āĻŸā§ 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 .)

āĻāĻ‡ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻļā§āĻāĻŸāĻŋ — āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻāĻĒāĻŋāĻ†āĻ‡-āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻŋāĻ¤ āĻ¨āĻ¯āĻŧ āĻāĻŽāĻ¨ āĻĒāĻĄāĨ¤ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻĒāĻĄ āĻ–ā§āĻŦ āĻ•āĻŽāĻ‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻžāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻĻā§āĻ°ā§āĻ¤ āĻ‰āĻ¤ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ–ā§āĻŦ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻœāĻ¨āĻ•, āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ āĻŋāĻ• āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤ āĻ†āĻŽāĻ°āĻž āĻāĻ‡ āĻŦāĻĄāĻŧ āĻ¸āĻ¤āĻ°ā§āĻ•āĻŦāĻžāĻŖā§€ āĻ‰āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦ (āĻ†āĻŦāĻžāĻ°, āĻāĻŸāĻŋāĻ•ā§‡ āĻ‰ā§ŽāĻĒāĻžāĻĻāĻ¨ā§‡ āĻšāĻžāĻ˛āĻžāĻŦā§‡āĻ¨ āĻ¨āĻž!) āĻāĻŦāĻ‚ āĻĻā§‡āĻ–ā§āĻ¨ āĻ†āĻŽāĻ°āĻž āĻĒāĻĄ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻ•āĻŋāĻ¨āĻžāĨ¤

āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻ†āĻŽāĻ°āĻž āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻĒāĻĄā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦ āĻāĻŦāĻ‚ āĻ°āĻžāĻ¨ āĻ•āĻ°āĻŦ 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

āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ•āĻ–āĻ¨āĻ“ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻĨāĻžāĻ•ā§‡āĻ¨ āĻ¤āĻŦā§‡ āĻāĻ‡ 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.

āĻ•āĻŋ āĻŦā§āĻ¯āĻžāĻĒāĻžāĻ°? āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ•āĻŋāĻ›ā§ āĻ…āĻ¨ā§āĻšā§āĻ›ā§‡āĻĻ āĻ†āĻ—ā§‡ āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–ā§‡āĻ¨, āĻ†āĻŽāĻ°āĻž āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻ‡āĻ¨ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ°ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ…āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¸ā§‡āĻŸ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ•ā§āĻŦā§‡āĻ˛ā§‡āĻŸ āĻļā§āĻ°ā§ āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻ¤āĻžāĻ‡ āĻ•ā§āĻŦā§‡āĻ˛ā§‡āĻŸ āĻœāĻžāĻ¨ā§‡ āĻ¨āĻž āĻ•āĻŋāĻ­āĻžāĻŦā§‡ API āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻāĻŸāĻŋāĻ•ā§‡ āĻ¤āĻžāĻ° āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ…āĻŦāĻšāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧāĨ¤ āĻĄāĻ•ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨ āĻ…āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡, āĻ†āĻŽāĻ°āĻž āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻĒāĻ¤āĻžāĻ•āĻž āĻ–ā§āĻāĻœā§‡ āĻĒāĻžāĻ‡:

--kubeconfig string

āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻĒāĻĨ kubeconfig, āĻ¯āĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§‡ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ API āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧāĨ¤ āĻ‰āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ --kubeconfig API āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻŽā§‹āĻĄ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°ā§‡, āĻ¨āĻž --kubeconfig āĻ…āĻĢāĻ˛āĻžāĻ‡āĻ¨ āĻŽā§‹āĻĄ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°ā§‡āĨ¤

āĻāĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻŸāĻŋ āĻ¨āĻž āĻœā§‡āĻ¨ā§‡, āĻ†āĻŽāĻ°āĻž "āĻ…āĻĢāĻ˛āĻžāĻ‡āĻ¨ āĻŽā§‹āĻĄā§‡" āĻ•ā§āĻŦā§‡āĻ˛ā§‡āĻŸ āĻšāĻžāĻ˛āĻžāĻšā§āĻ›āĻŋāĻ˛āĻžāĻŽāĨ¤ (āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻ°āĻž āĻĒā§‡āĻĄā§‡āĻ¨ā§āĻŸāĻŋāĻ• āĻšāĻ¤āĻžāĻŽ, āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŦāĻ¤āĻ¨ā§āĻ¤ā§āĻ° āĻ•ā§āĻŦā§‡āĻ˛ā§‡āĻŸāĻ•ā§‡ "āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸" āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ­āĻžāĻŦāĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ, āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻ–ā§āĻŦ āĻŦāĻŋāĻ°āĻ•ā§āĻ¤āĻŋāĻ•āĻ° āĻšāĻŦā§‡)āĨ¤ "āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ" āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻžāĻĻā§‡āĻ° kubeconfig āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋ āĻ•ā§āĻŦā§‡āĻ˛ā§‡āĻŸā§‡ āĻĒāĻžāĻ¸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¯āĻžāĻ¤ā§‡ āĻāĻŸāĻŋ 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

(āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ•ā§āĻŦā§‡āĻ˛ā§‡āĻŸ āĻ¨āĻž āĻšāĻ˛āĻžāĻ•āĻžāĻ˛ā§€āĻ¨ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ•āĻžāĻ°ā§āĻ˛ āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻāĻĒāĻŋāĻ†āĻ‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§‡āĻ¨ āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻāĻŸāĻŋ āĻāĻ–āĻ¨āĻ“ āĻšāĻ˛āĻ›ā§‡! āĻ•ā§āĻŦā§‡āĻ˛ā§‡āĻŸ āĻĄāĻ•āĻžāĻ°ā§‡āĻ° āĻŽāĻ¤ā§‹ āĻāĻ° āĻĒāĻĄāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ "āĻ…āĻ­āĻŋāĻ­āĻžāĻŦāĻ•" āĻ¨āĻ¯āĻŧ, āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ "āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖā§‡āĻ° āĻŽāĻ¤ā§‹" āĻĄā§‡āĻŽāĻ¨āĨ¤" āĻ•ā§āĻŦā§‡āĻ˛ā§‡āĻŸ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻŋāĻ¤ āĻĒāĻžāĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋ āĻšāĻ˛āĻ¤ā§‡ āĻĨāĻžāĻ•āĻŦā§‡ āĻ¯āĻ¤āĻ•ā§āĻˇāĻŖ āĻ¨āĻž āĻ•ā§āĻŦā§‡āĻ˛ā§‡āĻŸ āĻ¤āĻžāĻĻā§‡āĻ° āĻĨāĻžāĻŽāĻžāĻ¯āĻŧāĨ¤)

āĻ•āĻ¯āĻŧā§‡āĻ• āĻŽāĻŋāĻ¨āĻŋāĻŸā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ 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

āĻ†āĻ¸ā§āĻ¨ āĻāĻŦāĻžāĻ° āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ‡ āĻ¨āĻŋāĻœā§‡āĻĻā§‡āĻ°āĻ•ā§‡ āĻ…āĻ­āĻŋāĻ¨āĻ¨ā§āĻĻāĻ¨ āĻœāĻžāĻ¨āĻžāĻ‡ (āĻ†āĻŽāĻŋ āĻœāĻžāĻ¨āĻŋ āĻ†āĻŽāĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻ¨āĻŋāĻœā§‡āĻĻā§‡āĻ° āĻ…āĻ­āĻŋāĻ¨āĻ¨ā§āĻĻāĻ¨ āĻœāĻžāĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ) - āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨ā§āĻ¯ā§‚āĻ¨āĻ¤āĻŽ Kubernetes "āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°" āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ 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 āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖ āĻ†āĻ‡āĻĒāĻŋ āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻļā§āĻ¨āĻ›ā§‡:

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

āĻāĻ‡ āĻĒāĻ°āĻŋāĻŦā§‡āĻļā§‡ āĻ–āĻ¨āĻ¨ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻ•ā§€ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ•ā§€ āĻ•āĻ°ā§‡ āĻ¨āĻž āĻ¤āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻŦā§‡āĻļ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧāĨ¤ āĻ†āĻŽāĻŋ āĻĻā§‡āĻ–ā§‡āĻ›āĻŋ āĻ¯ā§‡ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻŽā§āĻ¯āĻžāĻĒ āĻāĻŦāĻ‚ āĻ¸āĻŋāĻ•ā§āĻ°ā§‡āĻŸ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻŋāĻ¤ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ•āĻ°ā§‡ āĻ¨āĻžāĨ¤

āĻ¸āĻĢāĻ˛āĻ¤āĻžāĻ° !

āĻāĻ‡ āĻĒā§‹āĻ¸ā§āĻŸāĻŸāĻŋ āĻĻā§€āĻ°ā§āĻ˜ āĻšāĻšā§āĻ›ā§‡, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻŋ āĻŦāĻŋāĻœāĻ¯āĻŧ āĻ˜ā§‹āĻˇāĻŖāĻž āĻ•āĻ°āĻ¤ā§‡ āĻ¯āĻžāĻšā§āĻ›āĻŋ āĻāĻŦāĻ‚ āĻŦāĻ˛āĻŦ āĻ¯ā§‡ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻ¯āĻžāĻ•ā§‡ "āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸā§‡āĻ¸" āĻŦāĻ˛āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ¸āĻ‚āĻ•ā§āĻˇā§‡āĻĒā§‡: āĻšāĻžāĻ°āĻŸāĻŋ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ, āĻĒāĻžāĻāĻšāĻŸāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻ‡āĻ¨ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻāĻŦāĻ‚ YAML āĻāĻ° "āĻļā§āĻ§ā§" 45 āĻ˛āĻžāĻ‡āĻ¨ (āĻ¨āĻž āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ā§‡āĻ° āĻŽāĻžāĻ¨ āĻ…āĻ¨ā§āĻ¸āĻžāĻ°ā§‡) āĻāĻŦāĻ‚ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻœāĻŋāĻ¨āĻŋāĻ¸ āĻ•āĻžāĻœ āĻ•āĻ°āĻ›ā§‡:

  • āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ Kubernetes API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻĒāĻĄāĻ—ā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ (āĻ•āĻŋāĻ›ā§ āĻšā§āĻ¯āĻžāĻ• āĻ¸āĻš)
  • āĻ†āĻĒāĻ¨āĻŋ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻ§āĻžāĻ°āĻ• āĻ›āĻŦāĻŋ āĻ†āĻĒāĻ˛ā§‹āĻĄ āĻāĻŦāĻ‚ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨
  • āĻļā§āĻāĻŸāĻŋ āĻœā§€āĻŦāĻŋāĻ¤ āĻĨāĻžāĻ•ā§‡ āĻāĻŦāĻ‚ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻšāĻžāĻ˛ā§ āĻšāĻ¯āĻŧ
  • āĻāĻ•āĻ‡ āĻ¨ā§‹āĻĄā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĒāĻĄāĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻŋāĻ‚ āĻŦā§‡āĻļ āĻ­āĻžāĻ˛ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡
  • āĻ•āĻ¨āĻĢāĻŋāĻ—āĻŽā§āĻ¯āĻžāĻĒ, āĻ¸āĻŋāĻ•ā§āĻ°ā§‡āĻŸ āĻāĻŦāĻ‚ āĻ¸āĻšāĻœ āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœ āĻŽāĻžāĻ‰āĻ¨ā§āĻŸāĻŋāĻ‚ āĻ•āĻžāĻœ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻŋāĻ¤ āĻšāĻŋāĻ¸āĻžāĻŦā§‡

āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸āĻ•ā§‡ āĻ¯āĻž āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ‡ āĻĻāĻ°āĻ•āĻžāĻ°ā§€ āĻ•āĻ°ā§‡ āĻ¤ā§‹āĻ˛ā§‡ āĻ¤āĻžāĻ° āĻ…āĻ¨ā§‡āĻ• āĻ•āĻŋāĻ›ā§āĻ‡ āĻāĻ–āĻ¨āĻ“ āĻ…āĻ¨ā§āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤, āĻ¯ā§‡āĻŽāĻ¨:

  • āĻĒāĻĄ āĻļāĻŋāĻĄāĻŋāĻ‰āĻ˛āĻžāĻ°
  • āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖ/āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨
  • āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻ¨ā§‹āĻĄ
  • āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ° āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•
  • āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖ DNS
  • āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸ, āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž, āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•ā§€āĻ•āĻ°āĻŖ āĻāĻŦāĻ‚ āĻ•ā§āĻŦāĻžāĻ°āĻ¨ā§‡āĻŸāĻ¸ āĻ¯ā§‡ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻœāĻŋāĻ¨āĻŋāĻ¸āĻ—ā§āĻ˛āĻŋ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ†āĻ¸ā§‡ āĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻ•

āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻŽāĻ°āĻž āĻ†āĻ¸āĻ˛ā§‡ āĻ•āĻŋ āĻĒā§‡āĻ¯āĻŧā§‡āĻ›āĻŋ? Kubernetes API, āĻ¨āĻŋāĻœā§‡ āĻĨā§‡āĻ•ā§‡ āĻšāĻ˛āĻ›ā§‡, āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ‡ āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ āĻ§āĻžāĻ°āĻ• āĻ…āĻŸā§‹āĻŽā§‡āĻļāĻ¨. āĻāĻŸāĻŋ āĻ…āĻ¨ā§‡āĻ• āĻ•āĻŋāĻ›ā§ āĻ•āĻ°ā§‡ āĻ¨āĻž - āĻāĻŸāĻŋ API āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ° āĻāĻŦāĻ‚ āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻ°āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻœ - āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻ…āĻŸā§‹āĻŽā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻŽāĻžā§āĻœāĻ¸ā§āĻ¯āĻĒā§‚āĻ°ā§āĻŖ āĻĒāĻ°āĻŋāĻŦā§‡āĻļ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤

āĻŦāĻŋāĻ¨āĻžāĻŽā§‚āĻ˛ā§āĻ¯ā§‡āĻ° āĻ“āĻ¯āĻŧā§‡āĻŦāĻŋāĻ¨āĻžāĻ°ā§‡ āĻ•ā§‹āĻ°ā§āĻ¸āĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ†āĻ°āĻ“ āĻœāĻžāĻ¨ā§āĻ¨āĨ¤

āĻ†āĻ°āĻ“ āĻĒāĻĄāĻŧā§āĻ¨:

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨