Eilen 9. joulukuuta seuraava Kubernetesin julkaisu - 1.17. Blogillemme syntyneen perinteen mukaisesti puhumme merkittävimmistä muutoksista uudessa versiossa.

Tämän materiaalin valmistuksessa käytetyt tiedot on otettu virallisesta tiedotteesta, , ja niihin liittyvät ongelmat, vetopyynnöt ja Kubernetes Enhancement Proposals (KEP). Mikä on uutta?..
Topologiatietoinen reititys
Kubernetes-yhteisö on odottanut tätä ominaisuutta pitkään - Topologiatietoinen palvelun reititys. jos se on peräisin lokakuussa 2018, ja virallinen — 2 vuotta sitten, tavanomaiset ongelmat (Kuten ) - ja vielä muutaman vuoden vanhempi...
Yleisideana on tarjota mahdollisuus toteuttaa "paikallinen" reititys Kubernetesissa sijaitseville palveluille. "Paikallisuus" tarkoittaa tässä tapauksessa "samaa topologista tasoa" (topologian taso), joka voi olla:
- palveluille identtinen solmu,
- sama palvelinteline,
- samalla alueella
- sama pilvipalveluntarjoaja,
- ...
Esimerkkejä tämän ominaisuuden käytöstä:
- säästöt liikenteessä pilviasennuksissa, joissa on useita käytettävyysvyöhykkeitä (multi-AZ) - katso. käyttämällä esimerkkiä liikenteestä samalta alueelta, mutta eri AZ:illa AWS:ssä;
- alhaisempi suoritusviive / parempi suorituskyky;
- jaettu palvelu, jolla on paikallista tietoa kunkin sirpaleen solmusta;
- fluentd:n (tai analogien) sijoittaminen samaan solmuun sovellusten kanssa, joiden lokit kerätään;
- ...
Tällaista reititystä, joka "tietää" topologiasta, kutsutaan myös verkkoaffiniteetiksi - analogisesti , tai ilmestyi (ja ). Toteutuksen nykyinen taso ServiceTopology Kubernetesissa - alfa-versio.
Lue lisätietoja ominaisuuden toiminnasta ja siitä, kuinka voit jo käyttää sitä yhdeltä kirjoittajista.
Kaksipinoinen IPv4/IPv6-tuki
Merkittävää edistystä toisessa verkkoominaisuudessa: kahden IP-pinon samanaikainen tuki, joka otettiin ensimmäisen kerran käyttöön vuonna . Erityisesti uusi julkaisu toi seuraavat muutokset:
- kube-välityspalvelimessa mahdollisuus toimia samanaikaisesti molemmissa tiloissa (IPv4 ja IPv6);
- в
Pod.Status.PodIPstuki alaspäin suuntautuvalle API:lle (samaan aikaan kuin/etc/hostsnyt he vaativat isäntäkonetta lisäämään IPv6-osoitteen); - kahden pinon tuki (Kubernetes IN Docker) ja ;
- päivitetyt e2e-testit.

käyttämällä kaksoispinoa IPV4/IPv6 in KIND
CSI:n edistyminen
Julistettu vakaaksi CSI-pohjaista tallennustilaa varten, esiteltiin ensimmäisen kerran vuonna .
Aloite varten volyymilaajennusten siirto CSI:hen - - saavutettu beta-versio. Tämä ominaisuus on kriittinen olemassa olevien tallennuslaajennusten kääntämisessä (puussa) moderniin käyttöliittymään (CSI, puun ulkopuolinen) näkymätön Kubernetesin loppukäyttäjille. Klusterin järjestelmänvalvojien tarvitsee vain ottaa käyttöön CSI-siirto, minkä jälkeen nykyiset tilalliset resurssit ja työkuormat jatkavat "vain toimimista"... mutta käyttämällä uusimpia CSI-ajureita Kubernetes-ytimeen sisältyvien vanhentuneiden sijaan.
Tällä hetkellä AWS EBS -ajureiden siirto on valmis beta-versiossa (kubernetes.io/aws-ebs) ja GCE PD (kubernetes.io/gce-pd). Muiden varastotilojen ennusteet ovat seuraavat:

Puhuimme siitä, kuinka "perinteinen" tallennustuki K8:ssa tuli CSI:lle . Ja CSI-siirtymisen beta-tilaan siirtyminen on omistettu projektin blogissa.
Lisäksi toinen merkittävä CSI:n toiminnallisuus, joka on peräisin (alfa-toteutus) K1.17s 8:sta, saavutti beta-tilan (eli oletuksena käytössä) Kubernetes 1.12 -julkaisussa - ja toipuminen niistä. Kubernetes Volume Snapshot -sovellukseen betajulkaisun yhteydessä tehdyt muutokset:
- jakamalla ulkoisen CSI-snapshotterin sivuvaunun kahdeksi ohjaimeksi,
- lisätty poistettava salaisuus (poistosalaisuus) huomautuksena tilavuuden tilannekuvan sisällölle,
- uusi viimeistelijä (viimeistely) estääksesi tilannekuvan API-objektin poistamisen, jos yhteyksiä on jäljellä.
Julkaisuhetkellä 1.17 ominaisuutta tukee kolme CSI-ohjainta: GCE Persistent Disk CSI Driver, Portworx CSI Driver ja NetApp Trident CSI Driver. Lisätietoja sen toteutuksesta ja käytöstä löytyy osoitteesta blogissa.
Pilvipalveluntarjoajan tunnisteet
Merkitsee automaattisesti määritetty luotuille solmuille ja taltioille käytetyn pilvipalveluntarjoajan mukaan, ovat olleet saatavilla Kubernetesissa beta-versiona erittäin pitkään - K8s 1.2:n julkaisusta lähtien (Huhtikuu 2016!). Koska niitä on käytetty laajasti niin pitkään, kehittäjät , että on aika julistaa ominaisuus vakaaksi (GA).
Siksi ne kaikki nimettiin uudelleen vastaavasti (topologian mukaan):
-
beta.kubernetes.io/instance-type→node.kubernetes.io/instance-type -
failure-domain.beta.kubernetes.io/zone→topology.kubernetes.io/zone -
failure-domain.beta.kubernetes.io/region→topology.kubernetes.io/region
... mutta ovat edelleen saatavilla vanhoilla nimillään (taaksepäin yhteensopivuuden vuoksi). Kaikkia järjestelmänvalvojia suositellaan kuitenkin vaihtamaan nykyisiin tarroihin. K8s on päivitetty.
Kubeadm:n strukturoitu tulos
Esitetty alfaversiona ensimmäistä kertaa . Tuetut muodot: JSON, YAML, Go-malli.
Motivaatio tämän ominaisuuden käyttöönotolle (mukaan ) On:
Vaikka Kubernetes voidaan ottaa käyttöön manuaalisesti, tämän toiminnon de facto (jos ei de jure) standardi on käyttää kubeadm-ohjelmaa. Suositut järjestelmänhallintatyökalut, kuten Terraform, luottavat kubeadmiin Kubernetesin käyttöönotossa. Cluster API:n suunniteltuja parannuksia ovat muunnettavissa oleva paketti Kubernetes-käynnistystä varten kubeadmin ja cloud-initin kanssa.
Ilman strukturoitua tulostusta, jopa ensisilmäyksellä vaarattomat muutokset voivat rikkoa Terraformin, Cluster API:n ja muut ohjelmistot, jotka käyttävät kubeadmin tuloksia.
Lähisuunnitelmiimme kuuluu tuki (strukturoidun tulosteen muodossa) seuraaville kubeadm-komentoille:
-
alpha certs -
config images list -
init -
token create -
token list -
upgrade plan -
version
Kuva JSON-vastauksesta komentoon 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="
}Muiden innovaatioiden vakauttaminen
Yleensä Kubernetes 1.17:n julkaisu tapahtui mottona "pysyvyys" Tätä helpotti se, että monet siinä olevat ominaisuudet (niiden kokonaismäärä on 14) sai GA-tilan. Heidän joukossa:
- "merkintä" solmut tiettyjen ehtojen mukaan (), esiintyi ;
- - uudentyyppiset tapahtumat, joilla on otsikko, että kaikki objektit ovat tiettyyn versioon asti (
resourceVersion) on jo käsitelty kellolla; - (oletus) mukautetuille resursseille;
- pod-prosessin nimiavaruudessa;
-
ScheduleDaemonSetPods- käyttämällä kube-scheduleria (DaemonSet-ohjaimen sijaan); - volyymien lukumäärästä solmutyypistä riippuen;
- hakemistonimille, jotka on asennettu muodossa
subPath; - erikoistuneeseen Lease API:hen;
- "finalisaattorin suojaus" () kuormituksen tasapainottajille (tarkista vastaavat palveluresurssit ennen LoadBalancer-resurssien poistamista);
- suorituskykyä työskennellessäsi useiden kellojen kanssa tarkkailemalla identtisiä objektijoukkoja – saavutetaan välttämällä samojen objektien toistuva sarjoittaminen jokaiselle tarkkailijalle.
Muut muutokset
Täydellinen luettelo Kubernetes 1.17:n innovaatioista ei tietenkään rajoitu yllä lueteltuihin. Tässä on joitain muita (ja täydellisempi luettelo, katso ):
- Viime julkaisussa esitetty ominaisuus on saavuttanut beta-version ;
- samanlainen muutos EndpointSlice API (myös K8s 1.16:sta), mutta toistaiseksi tämä Endpoint API:n suorituskykyä/skaalautuvuutta parantava ratkaisu ei ole oletusarvoisesti käytössä.
- podit ovat nyt kriittisiä klusterin toiminnalle ei vain nimitiloissa
kube-system(katso lisätietoja dokumentaatiosta ); - uusi vaihtoehto kubeletille - — voit määrittää nimenomaisesti luettelon järjestelmälle varatuista prosessoreista;
- varten
kubectl logsuusi lippu--prefix, lisäämällä pod- ja lähdesäiliön nimen jokaiselle lokin riville; - в
label.SelectorRequiresExactMatch; - kaikki kontit kube-dns:ssä vähemmän etuoikeuksia;
- erotettu erilliseen GitHub-tietovarastoon, eikä sitä enää sisällytetä Kubernetes-julkaisuihin;
- paljon kube-välityspalvelin ei-UDP-porteille.
Riippuvuusmuutokset:
- kubeadmin sisältämä CoreDNS-versio on 1.6.5;
- crictl-versio päivitetty versioon 1.16.1;
- CSI 1.2.0;
- etcd 3.4.3;
- Viimeisin testattu Docker-versio päivitetty versioon 19.03;
- Kubernetes 1.17:n rakentamiseen vaadittava Go-versio on vähintään 1.13.4.
PS.
Lue myös blogistamme:
- «";
- «";
- «";
- «'.
Lähde: will.com
