Kubernetes 1.14: үндсэн инновацийн тойм

Kubernetes 1.14: үндсэн инновацийн тойм

Өнөө шөнө болох болно Kubernetes-ийн дараагийн хувилбар - 1.14. Манай блогт зориулж бий болсон уламжлалын дагуу бид энэхүү гайхамшигтай Нээлттэй эхийн бүтээгдэхүүний шинэ хувилбарын гол өөрчлөлтүүдийн талаар ярьж байна.

Энэ материалыг бэлтгэхэд ашигласан мэдээллийг эндээс авсан болно Kubernetes сайжруулалтыг хянах хүснэгтүүд, ӨӨРЧЛӨЛТ-1.14 болон холбогдох асуудлууд, татах хүсэлт, Kubernetes Enhancement Proposals (KEP).

SIG кластерийн амьдралын мөчлөгийн чухал танилцуулгаас эхэлцгээе: динамик бүтэлгүйтлийн кластерууд Kubernetes (эсвэл илүү нарийвчлалтайгаар, өөрөө зохион байгуулсан HA байршуулалт) одоо байна үүсгэж болно танил (нэг зангилааны кластерын контекст) командуудыг ашиглах kubeadm (init и join). Товчхондоо, үүний тулд:

  • кластерт ашигласан гэрчилгээг нууцад шилжүүлсэн;
  • K8s кластер дотор etcd кластер ашиглах боломжийн хувьд (жишээ нь өмнө нь байсан гадаад хамаарлаас ангижрах) etcd-оператор;
  • Гадны ачаалал тэнцвэржүүлэгчийн санал болгож буй тохиргоог баримтжуулсан бөгөөд энэ нь алдааг тэсвэрлэх чадвартай тохиргоог хангадаг (ирээдүйд энэ хамаарлыг арилгахаар төлөвлөж байгаа боловч энэ үе шатанд биш).

Kubernetes 1.14: үндсэн инновацийн тойм
kubeadm ашиглан бүтээсэн Kubernetes HA кластерын архитектур

Хэрэгжилтийн талаарх дэлгэрэнгүй мэдээллийг эндээс авах боломжтой дизайны санал. Энэ функц нь үнэхээр удаан хүлээгдэж байсан: альфа хувилбар нь K8s 1.9-д буцаж ирэх төлөвтэй байсан боловч одоо л гарч ирсэн.

API

баг apply ерөнхийдөө ярих тунхаглалын объектын удирдлага өнгөрчээ нь kubectl apiserver дээр. Хөгжүүлэгчид өөрсдөө ийм байдлаар шийдвэрээ товч тайлбарлав kubectl apply - Kubernetes дахь тохиргоотой ажиллах үндсэн хэсэг боловч "энэ нь алдаануудаар дүүрэн бөгөөд засахад хэцүү" тул энэ функцийг хэвийн байдалд оруулж, хяналтын хавтгайд шилжүүлэх шаардлагатай байна. Өнөөдөр байгаа асуудлуудын энгийн бөгөөд тодорхой жишээнүүд:

Kubernetes 1.14: үндсэн инновацийн тойм

Хэрэгжилтийн талаар дэлгэрэнгүй мэдээлэл байна КЕП. Одоогийн бэлэн байдал нь альфа (Кубернетесийн дараагийн хувилбарт бета хувилбар руу шилжихээр төлөвлөж байна).

Альфа хувилбарт ашиглах боломжтой боломж OpenAPI v3 схемийг ашиглан CustomResources-д зориулсан OpenAPI баримт бичгийг үүсгэх, нийтлэх (CR) нь (сервер талын) K8-ийн хэрэглэгчийн тодорхойлсон нөөцийг баталгаажуулахад ашиглагддаг (CustomResourceDefinition, CRD). CRD-д зориулсан OpenAPI-г нийтлэх нь үйлчлүүлэгчдэд (жишээ нь: kubectl) баталгаажуулалтыг өөрийн талд (дотор kubectl create и kubectl apply) ба схемийн дагуу баримт бичгийг гаргах (kubectl explain). Дэлгэрэнгүй - дотор КЕП.

Өмнө нь байгаа бүртгэлүүд одоо нээгдэж байна тугтай O_APPEND (гэхдээ үгүй O_TRUNC) зарим тохиолдолд логоо алдахаас сэргийлж, эргэлтэнд зориулсан гадаад хэрэгслүүдээр логуудыг тайрахад хялбар болгох.

Мөн Kubernetes API-ийн хүрээнд үүнийг тэмдэглэж болно PodSandbox и PodSandboxStatus нэмсэн талбар runtime_handler тухай мэдээллийг бүртгэх RuntimeClass хонхорцог (энэ тухай текстээс дэлгэрэнгүй уншина уу Kubernetes 1.12 хувилбар, энэ анги альфа хувилбар хэлбэрээр гарч ирсэн) болон Элсэлтийн Вэб дэгээ дээр хэрэгжүүлсэн ямар хувилбаруудыг тодорхойлох чадвар AdmissionReview тэд дэмждэг. Эцэст нь, Элсэлтийн Webhooks дүрэм одоо байна хязгаарлаж болно нэрийн орон зай болон кластерын хүрээгээр тэдгээрийн ашиглалтын цар хүрээ.

Хадгалах

PersistentLocalVolumes, гарснаас хойш бета статустай байсан K8s 1.10, зарлалаа тогтвортой (GA): энэ функцийн хаалгыг цаашид идэвхгүй болгохоо больсон бөгөөд Kubernetes 1.17 дээр устгах болно.

Боломж гэж нэрлэгддэг орчны хувьсагчдыг ашиглан Доош чиглэсэн API (жишээ нь, pod нэр) гэж холбогдсон сангуудын нэр subPath, боловсруулсан - шинэ талбар хэлбэрээр subPathExpr, энэ нь одоо хүссэн лавлах нэрийг тодорхойлоход хэрэглэгддэг. Энэ функц нь анх Kubernetes 1.11-д гарч ирсэн боловч 1.14-т альфа хувилбарын төлөвт байсан.

Kubernetes-ийн өмнөх хувилбарын нэгэн адил идэвхтэй хөгжиж буй CSI (Container Storage Interface)-д олон чухал өөрчлөлтүүдийг оруулсан болно:

CSI

Боломжтой болсон (альфа хувилбарын нэг хэсэг болгон) дэмжлэг CSI ботьуудын хэмжээг өөрчлөх. Үүнийг ашиглахын тулд та дуудагдсан функцийн хаалгыг идэвхжүүлэх хэрэгтэй ExpandCSIVolumes, түүнчлэн тодорхой CSI драйвер дээр энэ үйлдлийг дэмжих дэмжлэг байгаа эсэх.

Альфа хувилбар дахь CSI-ийн өөр нэг онцлог - боломж pod техникийн үзүүлэлт доторх CSI эзлэхүүнийг шууд (жишээ нь PV/PVC ашиглахгүйгээр) лавлана уу. Энэ CSI-г зөвхөн зайнаас мэдээлэл хадгалах хэрэгсэл болгон ашиглах хязгаарлалтыг арилгана, тэдэнд дэлхийн хаалгыг нээж байна орон нутгийн түр зуурын эзэлхүүн. Хэрэглэхийн тулд (баримт бичгийн жишээ) идэвхжүүлсэн байх ёстой CSIInlineVolume онцлог хаалга.

CSI-тай холбоотой Kubernetes-ийн "дотоод" хэсэгт мөн ахиц дэвшил гарсан бөгөөд энэ нь эцсийн хэрэглэгчдэд (системийн администраторуудад) тийм ч харагдахгүй байна ... Одоогоор хөгжүүлэгчид хадгалах залгаас бүрийн хоёр хувилбарыг дэмжихээс өөр аргагүйд хүрч байна: нэг - "д хуучин арга", K8s кодын дотор (мод дотор), хоёр дахь нь - шинэ CSI-ийн нэг хэсэг болгон. (жишээлбэл, энэ талаар дэлгэрэнгүй уншина уу энд). Энэ нь CSI өөрөө тогтворжиж байгаа тул шийдвэрлэх шаардлагатай ойлгомжтой хүндрэлүүдийг үүсгэдэг. Үүний улмаас дотоод (мод доторх) залгаасуудын API-г зүгээр л цуцалж болохгүй холбогдох Kubernetes бодлого.

Энэ бүхэн альфа хувилбарт хүрэхэд хүргэсэн шилжих үйл явц дотоод залгаасын код, CSI залгаасуудад мод доторх хэлбэрээр хэрэгжсэн бөгөөд үүний ачаар хөгжүүлэгчдийн санаа зоволт нь тэдний залгаасуудын нэг хувилбарыг дэмжихээс багасч, хуучин API-уудтай нийцтэй байдал хэвээр үлдэх бөгөөд тэдгээрийг ердийн хувилбарт хуучирсан гэж зарлах боломжтой. Kubernetes-ийн дараагийн хувилбар (1.15) гэхэд үүлэн үйлчилгээ үзүүлэгчийн бүх залгаасуудыг шилжүүлж, хэрэгжилт нь бета статусыг хүлээн авч, K8s суулгацуудад анхдагчаар идэвхжих болно. Дэлгэрэнгүйг үзнэ үү дизайны санал. Энэ нүүдэл бас үр дүнд хүрсэн алдаа тодорхой үүл үйлчилгээ үзүүлэгчдийн (AWS, Azure, GCE, Cinder) тодорхойлсон эзлэхүүний хязгаараас.

Нэмж дурдахад CSI бүхий блок төхөөрөмжүүдийн дэмжлэг (CSIBlockVolume) шилжүүлсэн бета хувилбар руу.

Зангилаа/Кубелет

Альфа хувилбарыг танилцууллаа шинэ төгсгөлийн цэг зориулагдсан Kubelet-д гол нөөцийн хэмжүүрүүдийг буцаана. Ерөнхийдөө Кубелет өмнө нь cAdvisor-аас контейнер ашиглалтын статистик мэдээллийг хүлээн авч байсан бол одоо энэ өгөгдөл нь CRI (Container Runtime Interface)-ээр дамжуулан контейнерийн ажиллах орчны орчноос ирдэг боловч Docker-ын хуучин хувилбаруудтай ажиллахад нийцтэй байдал мөн хадгалагдсаар байна. Өмнө нь Kubelet-д цуглуулсан статистик мэдээллийг REST API-ээр илгээдэг байсан бол одоо төгсгөлийн цэг нь /metrics/resource/v1alpha1. Хөгжүүлэгчдийн урт хугацааны стратеги байна Kubelet-ийн өгсөн хэмжүүрүүдийн багцыг багасгах явдал юм. Дашрамд хэлэхэд эдгээр хэмжүүрүүд өөрсдөө одоо тэд дууддаг "үндсэн хэмжигдэхүүн" биш, харин "нөөцийн хэмжигдэхүүн" бөгөөд "Cpu, санах ой зэрэг нэгдүгээр зэрэглэлийн нөөц" гэж тодорхойлсон.

Маш сонирхолтой нюанс: Prometheus форматыг ашиглах янз бүрийн тохиолдлуудтай харьцуулахад gRPC төгсгөлийн цэгийн гүйцэтгэлийн тодорхой давуу талыг үл харгалзан (доорх жишиг үзүүлэлтүүдийн аль нэгний үр дүнг харна уу), Зохиогчид энэхүү хяналтын системийг нийгэмд тодорхой удирдаж байсан тул Prometheus-ийн текстийн форматыг илүүд үздэг.

“gRPC нь гол хяналтын шугам хоолойтой нийцэхгүй байна. Төгсгөлийн цэг нь зөвхөн хэмжигдэхүүнийг Metrics Server-д хүргэх эсвэл түүнтэй шууд нэгдсэн хяналтын бүрэлдэхүүн хэсгүүдэд хэрэгтэй болно. Metrics Server дээр кэш ашиглах үед Prometheus текст форматын гүйцэтгэл хангалттай сайн нийгэмд Prometheus-ийг өргөнөөр үрчилж авснаар бид Prometheus-ийг gRPC-ээс илүүд үзэх хэрэгтэй. OpenMetrics формат илүү тогтвортой болмогц бид proto-д суурилсан форматаар gRPC гүйцэтгэлд хандах боломжтой болно."

Kubernetes 1.14: үндсэн инновацийн тойм
Хэмжилтийн шинэ Kubelet төгсгөлийн цэгт gRPC болон Prometheus форматыг ашиглах гүйцэтгэлийн харьцуулсан тестүүдийн нэг. График болон бусад дэлгэрэнгүй мэдээллийг эндээс авах боломжтой КЕП.

Бусад өөрчлөлтүүдийн дунд:

  • Кубелет одоо (нэг удаа) зогсоохыг хичээдэг дахин эхлүүлэх болон устгах үйлдлүүдийн өмнө үл мэдэгдэх төлөвт байгаа контейнер.
  • Хэрэглэхдээ PodPresets одоо init сав руу нэмсэн энгийн савтай ижил мэдээлэл.
  • Кубелет ашиглаж эхэлсэн usageNanoCores CRI статистикийн үйлчилгээ үзүүлэгчээс болон Windows дээрх зангилаа болон контейнерийн хувьд нэмсэн сүлжээний статистик.
  • Үйлдлийн систем болон архитектурын мэдээллийг шошгон дээр тэмдэглэсэн kubernetes.io/os и kubernetes.io/arch Зангилааны объектууд (бета хувилбараас GA руу шилжүүлсэн).
  • Под дахь контейнеруудад зориулсан системийн хэрэглэгчийн тодорхой бүлгийг тодорхойлох чадвар (RunAsGroup, онд гарч ирэв K8s 1.11) дэвшилтэт бета хувилбараас өмнө (өгөгдмөлөөр идэвхжсэн).
  • du болон cAdvisor-д ашигласан олох, сольсон on Go хэрэгжилт.

CLI

Cli-runtime болон kubectl-д нэмсэн -k-тэй нэгтгэх туг тохируулах (Дашрамд хэлэхэд, түүний хөгжлийг одоо тусдаа репозиторт хийж байна), i.e. тусгай kustomization сангаас нэмэлт YAML файлуудыг боловсруулах (тэдгээрийг ашиглах талаар дэлгэрэнгүйг үзнэ үү КЕП):

Kubernetes 1.14: үндсэн инновацийн тойм
Энгийн файлын хэрэглээний жишээ тохируулга (kustomize-ийн илүү төвөгтэй хэрэглээг дотор нь хийх боломжтой давхцал)

Үүнээс гадна:

  • Нэмсэн шинэ баг kubectl create cronjob, нэр нь өөрөө ярьдаг.
  • В kubectl logs одоо та чадна нэгтгэх тугнууд -f (--follow урсгалын лог) болон -l (--selector шошгоны асуулгын хувьд).
  • кубектл заасан зэрлэг картаар сонгосон файлуудыг хуулах.
  • Багийнханд kubectl wait нэмсэн туг --all заасан нөөцийн төрлийн нэрийн талбар дахь бүх нөөцийг сонгох.

Бусад

Дараах чадварууд тогтвортой (GA) статусыг авсан:

  • ReadinessGate, хонгилын бэлэн байдалд харгалзан үзсэн нэмэлт нөхцөлийг тодорхойлохын тулд pod-ийн тодорхойлолтод ашигласан;
  • Том хуудасны дэмжлэг (онцлогын хаалга гэж нэрлэдэг HugePages);
  • CustomPodDNS;
  • PriorityClass API Pod Priority & Preemption.

Kubernetes 1.14-д оруулсан бусад өөрчлөлтүүд:

  • Өгөгдмөл RBAC бодлого нь API хандалтыг зөвшөөрөхгүй discovery и access-review баталгаажуулалтгүй хэрэглэгчид (баталгаагүй).
  • Албан ёсны CoreDNS дэмжлэг баталгаажсан Зөвхөн Линукс, тиймээс үүнийг (CoreDNS) кластерт байрлуулахдаа kubeadm ашиглах үед зангилаанууд зөвхөн Линукс дээр ажиллах ёстой (энэ хязгаарлалтад nodeSelectors ашигладаг).
  • Өгөгдмөл CoreDNS тохиргоо одоо байна ашигладаг урагшлах залгаас проксины оронд. Мөн CoreDNS дээр нэмсэн ReadinessProbe нь тохирох (үйлчилгээнд бэлэн биш) pods дээр ачааллыг тэнцвэржүүлэхээс сэргийлдэг.
  • kubeadm-д, үе шатууд дээр init буюу upload-certs, боломжтой болсон Шинэ удирдлагын онгоцыг kubeadm-certs нууцтай холбоход шаардагдах гэрчилгээг ачаална уу (туг ашиглана уу. --experimental-upload-certs).
  • Windows суулгацын альфа хувилбар гарч ирэв дэмжлэг gMSA (Group Managed Service Account) - Active Directory дахь тусгай дансуудыг контейнерт ашиглах боломжтой.
  • G.C.E-ийн хувьд идэвхжүүлсэн etcd болон kube-apiserver хооронд mTLS шифрлэлт.
  • Ашигласан/хамааралтай програм хангамжийн шинэчлэлтүүд: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, kubeadm дахь Docker 18.09 дэмжлэгтэй, хамгийн бага дэмжигдсэн Docker API хувилбар нь одоо 1.26 байна.

PS

Мөн манай блог дээрээс уншина уу:

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх