Kubernetes 1.17: негізгі инновацияларға шолу

Кеше, 9 желтоқсан орын алды Kubernetes келесі шығарылымы - 1.17. Біздің блог үшін қалыптасқан дәстүр бойынша біз жаңа нұсқадағы ең маңызды өзгерістер туралы айтамыз.

Kubernetes 1.17: негізгі инновацияларға шолу

Бұл материалды дайындау үшін пайдаланылған ақпарат ресми хабарландырудан алынған, Kubernetes жақсартуларды бақылау кестелері, CHANGELOG-1.17 және қатысты мәселелер, тарту сұраулары және Kubernetes жақсарту ұсыныстары (KEP). Сонымен, не жаңалық?..

Топологиядан хабардар маршруттау

Kubernetes қауымдастығы бұл мүмкіндікті ұзақ уақыт күтті - Топологияны білетін сервистік маршруттау. егер КЭП ол 2018 жылдың қазан айында басталады және ресми жақсарту — 2 жыл бұрын кәдімгі мәселелер (мысалы ол) - және тағы бірнеше жас үлкен...

Жалпы идея Kubernetes-те тұратын қызметтер үшін «жергілікті» маршруттауды енгізу мүмкіндігін беру болып табылады. Бұл жағдайда «жергілікті жер» «бір топологиялық деңгейді» білдіреді (топология деңгейі), ол болуы мүмкін:

  • қызметтер үшін бірдей түйін,
  • бірдей сервер сөресі,
  • сол аймақ
  • бірдей бұлт провайдері,
  • ...

Бұл мүмкіндікті пайдалану мысалдары:

  • бірнеше қолжетімділік аймақтары бар бұлттық қондырғылардағы трафикті үнемдеу (multi-AZ) - қараңыз. жаңа иллюстрация бір аймақтан, бірақ AWS-де әртүрлі AZ трафик мысалын пайдалану;
  • төмен өнімділік кідірісі/жақсы өткізу қабілеті;
  • әрбір үзіндідегі түйін туралы жергілікті ақпараты бар ортақ қызмет;
  • флюентті (немесе аналогтарды) журналдары жиналған қолданбалармен бір түйінге орналастыру;
  • ...

Топология туралы «білетін» мұндай маршруттауды желіге ұқсастығы деп те атайды. түйіннің жақындығы, подтүйінділік/антиаффинділік немесе пайда болды жақында емес Топологияны ескеретін көлемді жоспарлау (және Көлемді қамтамасыз ету). Ағымдағы іске асыру деңгейі ServiceTopology Kubernetes - альфа нұсқасы.

Мүмкіндік қалай жұмыс істейтіні және оны қалай пайдалануға болатыны туралы толық ақпаратты оқыңыз Бұл мақала авторлардың бірінен.

IPv4/IPv6 қос стекті қолдау

Айтарлықтай прогресс жазылған басқа желі мүмкіндігінде: бірінші рет енгізілген екі IP стектерін бір уақытта қолдау K8s 1.16. Атап айтқанда, жаңа шығарылым келесі өзгерістерді әкелді:

  • kube-проксиде жүзеге асырылды екі режимде де бір уақытта жұмыс істеу мүмкіндігі (IPv4 және IPv6);
  • в Pod.Status.PodIPs пайда болды төмен қарай API қолдауы (бір уақытта /etc/hosts енді олар хосттан IPv6 мекенжайын қосуды талап етеді);
  • қос стек қолдауы KIND (Kubernetes IN Docker) және kubeadm;
  • жаңартылған e2e сынақтары.

Kubernetes 1.17: негізгі инновацияларға шолу
Суреттер TIND түріндегі қос стек IPV4/IPv6 пайдалану

CSI бойынша прогресс

Тұрақты деп жарияланды топологияны қолдау CSI негізіндегі сақтау үшін, алғаш рет енгізілген K8s 1.12.

үшін бастама көлемдік плагиндерді CSI-ге көшіру - CSI миграциясы - бета нұсқасына жетті. Бұл мүмкіндік бар сақтау плагиндерін аудару үшін өте маңызды (ағаш ішінде) заманауи интерфейске (CSI, ағаштан тыс) Kubernetes соңғы пайдаланушыларына көрінбейді. Кластер әкімшілеріне тек CSI көшіру мүмкіндігін қосу қажет, содан кейін бар жағдайды растайтын ресурстар мен жұмыс жүктемелері «жұмыс істеуді» жалғастырады... бірақ Kubernetes ядросына енгізілген ескіргендердің орнына соңғы CSI драйверлерін пайдалану.

Қазіргі уақытта AWS EBS драйверлері үшін көшіру бета нұсқасында дайын (kubernetes.io/aws-ebs) және GCE PD (kubernetes.io/gce-pd). Басқа сақтау орындарының болжамдары келесідей:

Kubernetes 1.17: негізгі инновацияларға шолу

Біз K8 құрылғыларындағы «дәстүрлі» сақтауды қолдау CSI-ге қалай келгені туралы айттық Бұл мақала. Ал CSI көші-қонының бета күйіне өтуі арналған бөлек басылым жоба блогында.

Сонымен қатар, K1.17s 8 нұсқасында пайда болатын (альфа енгізу) CSI контекстіндегі тағы бір маңызды функционалдық Kubernetes 1.12 шығарылымында бета күйіне жетті (яғни әдепкі бойынша қосылған) - суреттерді жасау және олардан қалпына келтіру. Бета нұсқасына өту жолында Kubernetes Volume Snapshot-қа енгізілген өзгерістердің арасында:

  • CSI сыртқы суретті түсіру құралын екі контроллерге бөлу,
  • жою үшін құпия қосылды (жою құпиясы) көлемді суреттің мазмұнына аннотация ретінде,
  • жаңа аяқтаушы (финализатор) қалған қосылымдар болса, snapshot API нысанының жойылуын болдырмау үшін.

1.17 шығарылымы кезінде мүмкіндікке үш CSI драйвері қолдау көрсетеді: GCE Persistent Disk CSI Driver, Portworx CSI Driver және NetApp Trident CSI Driver. Оны енгізу және пайдалану туралы толығырақ ақпаратты мына жерден табуға болады осы жарияланымның блогта.

Бұлттық провайдердің белгілері

Автоматты түрде белгілейді пайдаланылатын бұлт провайдеріне байланысты жасалған түйіндер мен көлемдерге тағайындалады, Kubernetes-те бета нұсқасы ретінде өте ұзақ уақыт бойы қол жетімді болды - K8s 1.2 шығарылғаннан бері (2016 жылдың сәуірі!). Олардың ұзақ уақыт бойы кең таралғанын ескере отырып, әзірлеушілер шешті, мүмкіндікті тұрақты (GA) деп жариялау уақыты келді.

Сондықтан олардың барлығы тиісінше қайта аталды (топология бойынша):

  • beta.kubernetes.io/instance-typenode.kubernetes.io/instance-type
  • failure-domain.beta.kubernetes.io/zonetopology.kubernetes.io/zone
  • failure-domain.beta.kubernetes.io/regiontopology.kubernetes.io/region

... бірақ бұрынғы атауларымен әлі де қол жетімді (кері үйлесімділік үшін). Дегенмен, барлық әкімшілерге ағымдағы белгілерге ауысу ұсынылады. Қатысты құжаттама K8s жаңартылды.

kubeadm құрылымдық шығысы

Алғаш рет альфа нұсқасында ұсынылды kubeadm утилитасы үшін құрылымдық шығыс. Қолдау көрсетілетін пішімдер: JSON, YAML, Go үлгісі.

Бұл мүмкіндікті іске асыруға мотивация (сәйкес КЭП) бұл:

Kubernetes-ті қолмен орналастыруға болатынымен, бұл операцияның іс жүзінде (де-юре болмаса) стандарты kubeadm пайдалану болып табылады. Terraform сияқты танымал жүйелерді басқару құралдары Kubernetes орналастыру үшін kubeadm-ге сүйенеді. Cluster API үшін жоспарланған жақсартулар kubeadm және cloud-init көмегімен Kubernetes жүктеуге арналған құрастырылатын пакетті қамтиды.

Құрылымдық шығыссыз тіпті ең зиянсыз өзгерістер Terraform, Cluster API және kubeadm нәтижелерін пайдаланатын басқа бағдарламалық құралды бұзуы мүмкін.

Біздің жақын жоспарларымызға келесі kubeadm пәрмендері үшін қолдау (құрылымдық шығыс түрінде) кіреді:

  • alpha certs
  • config images list
  • init
  • token create
  • token list
  • upgrade plan
  • version

Пәрменге JSON жауабының иллюстрациясы kubeadm init -o json:

{
  "node0": "192.168.20.51:443",
  "caCrt": "sha256:1f40ff4bd1b854fb4a5cf5d2f38267a5ce5f89e34d34b0f62bf335d74eef91a3",
  "token": {
    "id":          "5ndzuu.ngie1sxkgielfpb1",
    "ttl":         "23h",
    "expires":     "2019-05-08T18:58:07Z",
    "usages":      [
      "authentication",
      "signing"
    ],
    "description": "The default bootstrap token generated by 'kubeadm init'.",
    "extraGroups": [
      "system:bootstrappers:kubeadm:default-node-token"
    ]
  },
  "raw": "Rm9yIHRoZSBhY3R1YWwgb3V0cHV0IG9mIHRoZSAia3ViZWFkbSBpbml0IiBjb21tYW5kLCBwbGVhc2Ugc2VlIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2FrdXR6LzdhNjg2ZGU1N2JmNDMzZjkyZjcxYjZmYjc3ZDRkOWJhI2ZpbGUta3ViZWFkbS1pbml0LW91dHB1dC1sb2c="
}

Басқа инновацияларды тұрақтандыру

Жалпы, Kubernetes 1.17 шығарылымы « ұранымен өтті.Тұрақтылық" Бұған ондағы көптеген мүмкіндіктердің болуы көмектесті (олардың жалпы саны). 14) GA мәртебесін алды. Олардың арасында:

Басқа өзгерістер

Kubernetes 1.17-дегі инновациялардың толық тізімі, әрине, жоғарыда аталғандармен шектелмейді. Міне, басқалары (және толық тізім үшін қараңыз ШАНГЕЛОГ):

  • Соңғы шығарылымда ұсынылған мүмкіндік бета нұсқасына жетті RunAsUserName терезелер үшін;
  • ұқсас өзгеріс түскен EndpointSlice API (сонымен қатар K8s 1.16 нұсқасынан бастап), бірақ әзірге бұл шешім Endpoint API өнімділігін/масштабтауын жақсарту үшін әдепкі бойынша қосылмаған;
  • қосқыштар енді кластер жұмысы үшін өте маңызды құруға болады аттар кеңістігінде ғана емес kube-system (толық ақпарат алу үшін құжаттаманы қараңыз Priority Class тұтынуын шектеңіз);
  • kubelet үшін жаңа опция - --reserved-cpus — жүйе үшін резервтелген орталық процессорлар тізімін нақты анықтауға мүмкіндік береді;
  • үшін kubectl logs ұсынылды жаңа ту --prefix, журналдың әрбір жолына қосқыштың және бастапқы контейнердің атын қосу;
  • в label.Selector қосылды RequiresExactMatch;
  • kube-dns ішіндегі барлық контейнерлер қазір жүгіріп жатыр аз артықшылықтармен;
  • гиперкуб жеке GitHub репозиторийіне бөлінген және енді Kubernetes шығарылымдарына қосылмайды;
  • өте жақсартылған өнімділік UDP емес порттарға арналған kube-прокси.

Тәуелділіктің өзгеруі:

  • kubeadm ішіне енгізілген CoreDNS нұсқасы 1.6.5;
  • crictl нұсқасы v1.16.1 дейін жаңартылды;
  • CSI 1.2.0;
  • т.б. 3.4.3;
  • Соңғы тексерілген Docker нұсқасы 19.03 дейін жаңартылды;
  • Kubernetes 1.17 құру үшін қажетті ең төменгі Go нұсқасы 1.13.4.

PS

Біздің блогта да оқыңыз:

Ақпарат көзі: www.habr.com

пікір қалдыру