
Idag, onsdag, en ny version av Kubernetes â 1.16. I enlighet med traditionen för vĂ„r blogg berĂ€ttar vi, för tionde gĂ„ngen â vĂ„rt jubileum â om de mest betydelsefulla förĂ€ndringarna i den nya versionen.
Informationen som anvÀndes för att förbereda detta material har tagits frÄn , och relevanta Àrenden, pull requests samt Kubernetes Enhancement Proposals (KEP). SÄ lÄt oss börja! ..
Noder
Ett verkligt stort antal mÀrkbara nyheter (i alfa-version) presenteras pÄ nodsidan av K8s-kluster (Kubelet).
Först och frÀmst introduceras de sÄ kallade «» (Ephemeral Containers), som syftar till att förenkla felsökningsprocesser i poddar. Den nya mekanismen gör det möjligt att starta speciella containrar som körs i namnomrÄdet för befintliga poddar och lever under en kort tid. Deras syfte Àr att interagera med andra poddar och containrar för att lösa problem och felsöka. För denna funktion har ett nytt kommando implementerats kubectl debug, som liknar kubectl exec: men istÀllet för att starta en process i containern (som i fallet med exec) startar det en container i podden. Till exempel, detta kommando skulle koppla en ny container till podden:
kubectl debug -c debug-shell --image=debian target-pod -- bashDetaljer om de efemÀra containrarna (och exempel pÄ deras anvÀndning) finns i . Den nuvarande implementeringen (i K8s 1.16) Àr i alfa-version, och bland kriterierna för att gÄ över till beta-version anges "testning av Ephemeral Containers API i minst 2 releaser [Kubernetes]".
NB: I sin kÀrna och till och med i namnet pÄminner funktionen om den redan existerande pluginen , om vilken vi . Det förutses att utvecklingen av den separata externa pluginen kommer att upphöra med införandet av de efemÀra containrarna.
En annan innovation â â syftar till att tillhandahĂ„lla ett mekanism för att rĂ€kna overheadkostnader för poddar, som kan skilja sig avsevĂ€rt beroende pĂ„ den anvĂ€nda körmiljön (runtime). Som exempel tar författarna framhĂ„ller Kata Containers, vilka krĂ€ver att starta ett vĂ€rdkĂ€rna, kata-agent, init-system etc. NĂ€r overhead blir sĂ„ stort kan det inte ignoreras, vilket innebĂ€r att ett sĂ€tt att ta hĂ€nsyn till det för framtida kvotering, planering etc. behövs. För att implementera detta har PodSpec fĂ„tt ett fĂ€lt Overhead *ResourceList (matchas med data i RuntimeClass, om sĂ„dana anvĂ€nds).
En annan mĂ€rkbar nyhet Ă€r nodtopologihanteraren (Node Topology Manager), som syftar till att enhetliggöra tillvĂ€gagĂ„ngssĂ€ttet för finjustering av tilldelning av hĂ„rdvaruresurser för olika komponenter i Kubernetes. Denna initiativ har uppkommit pĂ„ grund av det vĂ€xande behovet hos olika moderna system (frĂ„n telekommunikation, maskininlĂ€rning, finanstjĂ€nster osv.) av högpresterande parallellberĂ€kningar och att minimera latens vid utförande av operationer, dĂ€r de anvĂ€nder avancerade funktioner hos CPU och hĂ„rdvaruacceleration. SĂ„dana optimeringar i Kubernetes har hittills uppnĂ„tts genom olika komponenter (CPU manager, Device manager, CNI), och nu tillkommer en enhetlig intern grĂ€nssnitt som enhetliggör tillvĂ€gagĂ„ngssĂ€ttet och förenklar anslutningen av nya liknande â sĂ„ kallade topology-aware â komponenter pĂ„ Kubelet-sidan. Mer information finns i .

Topologihanterarens komponentdiagram
NĂ€sta funktion Ă€r kontroll av behĂ„llare vid start (). Det Ă€r kĂ€nt att för behĂ„llare som tar lĂ„ng tid att starta Ă€r det svĂ„rt att fĂ„ aktuell status: de antingen "dödas" innan de verkligen börjar fungera, eller sĂ„ fastnar de i deadlock under lĂ„ng tid. Den nya kontrollen (aktiveras via en feature gate kallad StartupProbeEnabled) avbryter â eller snarare skjuter upp â effekten av andra kontroller tills podden har avslutat sin uppstart. Av denna anledning kallades funktionen ursprungligen . För poddar som startar lĂ„ngsamt kan statusfrĂ„gor göras med relativt korta tidsintervall.
Dessutom presenteras en förbÀttring för RuntimeClass direkt i beta-status, som lÀgger till stöd för "heterogena kluster". Med Àr det nu inte lÀngre nödvÀndigt att varje nod har stöd för varje RuntimeClass: för poddar kan RuntimeClass vÀljas utan att tÀnka pÄ klustrets topologi. Tidigare krÀvdes det att motsvarande regler angavs i NodeSelector och tolerations för att sÀkerstÀlla att poddar placerades pÄ noder med fullt stöd för vad de behöver. I beskrivs exempel pÄ anvÀndning och sjÀlvklart detaljerna kring implementeringen.
NĂ€tverk
TvÄ betydande nÀtverksfunktioner som först dök upp (i alpha-versionen) i Kubernetes 1.16 Àr:
- dubbel nĂ€tverksstack â IPv4/IPv6 â och den motsvarande "förstĂ„elsen" pĂ„ pod-, nod- och tjĂ€nstenivĂ„. Detta inkluderar IPv4-till-IPv4 och IPv6-till-IPv6 interaktion mellan poddar, frĂ„n poddar till externa tjĂ€nster, referensimplementationer (inom ramarna för Bridge CNI, PTP CNI och Host-Local IPAM), samt bakĂ„tkompatibilitet med Kubernetes-kluster som enbart anvĂ€nder IPv4 eller IPv6. Detaljer om implementationen finns i .
Exempel pÄ IP-adresser av tvÄ typer (IPv4 och IPv6) i en lista med poddar:
kube-master# kubectl get pods -o wide NAMN KLAR STATUS Ă TERSTARTADE Ă LDER IP NOD nginx-controller 1/1 Kör 0 20m fd00:db8:1::2,192.168.1.3 kube-minion-1 kube-master# - Ny API för Endpoint â . Det löser prestanda-/skaleringsproblem med den befintliga Endpoint API, som pĂ„verkar olika komponenter i control-plane (apiserver, etcd, endpoints-controller, kube-proxy). Den nya API:n kommer att lĂ€ggas till API-gruppen Discovery och kan hantera tiotusentals backend-endpointar pĂ„ varje tjĂ€nst i ett kluster med tusentals noder. För detta kommer varje Service att översĂ€ttas till N objekt
EndpointSlice, dÀr varje normalt har högst 100 endpointar (detta vÀrde Àr konfigurerbart). I EndpointSlice API:n kommer det Àven att finnas möjligheter för framtida utveckling: stöd för flera IP-adresser per pod, nya tillstÄnd för endpointar (inte baraRedoochNotReady), dynamisk delmÀngdning för endpointar.
Framsteg har gjorts till beta-versionen av den som presenterades i den senaste utgÄvan , kallad service.kubernetes.io/load-balancer-cleanup och kopplad till varje tjÀnst av typen LoadBalancer. Vid borttagning av en sÄdan tjÀnst förhindrar den faktiskt borttagning av resursen tills "stÀdningen" av alla relevanta lastbalanserarresurser Àr slutförd.
API Machinery
Den verkliga "stabiliseringens milstolpe" har registrerats inom Kubernetes API-server och dess interaktion. Mycket av detta har skett tack vare övergÄngen till stabil status för de som inte krÀver sÀrskild representation (CRD), som haft beta-status sedan lÄngt tillbaka, Kubernetes 1.7 (det vill sÀga juni 2017!). Samma stabilisering har ocksÄ kommit till de relaterade funktionerna:
- med
/statusoch/scaleför CustomResources; - versioner för CRD, baserat pÄ en extern webhook;
- (i K8s 1.15) standardvÀrden (defaulting) och automatisk borttagning av fÀlt (pruning) för CustomResources;
- tillÀmpning av OpenAPI v3-schema för skapande och publicering av OpenAPI-dokumentation, som anvÀnds för validering av CRD-resurser pÄ serversidan.
Ytterligare en mekanism som lĂ€nge har blivit vanligt för Kubernetes-administratörer: â har ocksĂ„ lĂ€nge haft beta-status (sedan K8s 1.9) och Ă€r nu officiellt stabil.
TvÄ andra funktioner har nÄtt beta-version: och .
Och den enda betydande nyheten i alpha-versionen var frĂ„n SelfLink â en speciell URI som representerar det angivna objektet och Ă€r en del av ObjectMeta och ListMeta (dvs. en del av varje objekt i Kubernetes). Varför avskaffas det? Motivationen âi enkelhetâ som att det saknas verkliga (oöverkomliga) anledningar för att detta fĂ€lt fortfarande ska existera. Mer formella anledningar Ă€r att optimera prestandan (genom att ta bort onödigt fĂ€lt) och förenkla arbetet för generic-apiserver, som Ă€r tvungen att hantera ett sĂ„dant fĂ€lt pĂ„ sĂ€rskilt sĂ€tt (detta Ă€r det enda fĂ€lt som sĂ€tts precis innan objektet serialiseras). Den verkliga âavskrivningenâ (inom beta-versionen) SelfLink kommer att ske med Kubernetes version 1.20, och den slutgiltiga â 1.21.
Databevarande
Det huvudsakliga arbetet inom lagring, precis som i tidigare versioner, observeras inom . De viktigaste förÀndringarna hÀr har varit:
- för första gÄngen (i alpha-versionen) stöd för CSI-pluginer för arbetsnoder med Windows: en aktuell metod för att arbeta med lagringslösningar som kommer att ersÀtta in-tree-pluginer i kÀrnan av Kubernetes och FlexVolume-pluginer frÄn Microsoft baserat pÄ Powershell;

Schema för implementation av CSI-pluginer i Kubernetes för Windows - att , presenterat i K8s 1.12, har nÄtt beta-version;
- en liknande âuppgraderingâ (frĂ„n alpha- till beta-version) har ocksĂ„ uppnĂ„tts med möjligheten att anvĂ€nda CSI för att skapa lokala temporĂ€ra volymer ().
Funktionen för volymkloning (anvÀndning av befintliga PVC som DataSource för att skapa nya PVC) har ocksÄ nu fÄtt beta-status.
SchemalÀggare
TvÄ mÀrkbara förÀndringar i schemalÀggningen (bÄda i alpha-version):
- â möjligheten att anvĂ€nda pods för ârĂ€ttvis fördelningâ av belastningar istĂ€llet för logiska enheter av applikationen (sĂ„som Deployment och ReplicaSet) och justeringen av denna fördelning (som ett strikt krav eller som en mjuk förutsĂ€ttning, dvs. prioritet). Denna funktion kommer att utöka de befintliga fördelningsmöjligheterna för schemalagda pods, som nu Ă€r begrĂ€nsade av alternativen
PodAffinityochPodAntiAffinity, vilket ger administratörer mer finjusterad kontroll över detta omrÄde, vilket i sin tur ger bÀttre tillgÀnglighet och optimerad resursanvÀndning. Mer information finns i . - AnvÀndning BestFit Policy pÄ RequestedToCapacityRatio Priority Function vid planering av poddar, vilket gör det möjligt att tillÀmpa ("container packing") bÄde för grundlÀggande resurser (processor, minne) och för utökade resurser (som GPU). Mer information finns i .

Planering av poddar: före anvÀndning av best fit policy (direkt via default scheduler) och med dess anvÀndning (genom scheduler extender)
Dessutom, möjligheten att skapa egna plugins för schemalÀggaren utanför huvudutvecklingstrÀdet för Kubernetes (out-of-tree).
Ăvriga förĂ€ndringar
Det kan ocksĂ„ nĂ€mnas i Kubernetes 1.16 initiativet för de existerande mĂ€tvĂ€rdena, eller mer exakt â i enlighet med som rör instrumentering av K8s. De bygger i huvudsak pĂ„ motsvarande . Inkonsekvenserna har uppstĂ„tt av olika anledningar (till exempel skapades vissa mĂ€tvĂ€rden innan aktuella instruktioner fanns), och utvecklarna har beslutat att det Ă€r dags att föra allt i linje med en gemensam standard, "i enlighet med resten av Prometheus-ekosystemet". Den aktuella implementeringen av detta initiativ har statuset alfa-version, som successivt kommer att uppgraderas i kommande versioner av Kubernetes till beta (1.17) och stabil (1.18).
Dessutom kan följande förÀndringar nÀmnas:
- Utveckling av stöd för Windows med Kubeadm-verktyget för detta operativsystem (alfa-version),
RunAsUserNameför Windows-containrar (alfa-version), stöd för Group Managed Service Account (gMSA) till beta-version, mount/attach för vSphere-volymer. - mekanism för data komprimering i API-svar. Tidigare anvÀndes en HTTP-filter för dessa ÀndamÄl, som satte upp vissa begrÀnsningar som hindrade dess aktivering som standard. Nu fungerar "transparent komprimering av förfrÄgningar": klienter som skickar
Accept-Encoding: gzipi rubriken fÄr ett gzip-komprimerat svar om dess storlek överstiger 128 KB. Klienter pÄ Go stöder automatiskt komprimering (skickar rÀtt rubrik), sÄ de kommer direkt att mÀrka en minskning av trafik. (För andra sprÄk kan smÄ justeringar krÀvas.) - att skala HPA upp/ned till noll poddar baserat pÄ externa mÀtvÀrden. Om skalning görs pÄ objekt/externa mÀtvÀrden kan man automatiskt skala till 0 repliker nÀr arbetslasterna Àr inaktiva för att spara resurser. Denna funktion bör vara sÀrskilt anvÀndbar vid situationer dÀr arbetare begÀr GPU-resurser och antalet olika typer av inaktiva arbetare överstiger antalet tillgÀngliga GPU:er.
- Ny kund â â för "generell" Ă„tkomst till objekt. Den Ă€r avsedd för att enkelt fĂ„ tag pĂ„ metadata (d.v.s. underavdelning
metadata) frÄn klusterresurser och utföra operationer sÄsom skrÀpinsamling och kvotering. - Kubernetes kan nu utan förÄldrade ("inbyggda" i tree) molnleverantörer (alpha-version).
- I verktyget kubeadm har den experimentella (alpha-version) möjligheten att applicera kustomize-patchar under operationer
init,joinochupgrade. Mer information om hur man anvĂ€nder flaggan--experimental-kustomize, finns i . - Ny endpoint för apiserver â , â som tillĂ„ter export av information om dess beredskap (readiness). Dessutom har API-servern fĂ„tt en flagga
--maximum-startup-sequence-duration, vilket tillÄter att reglera dess omstarter. - TvÄ funktioner för Azure har blivit stabila: stöd för (Availability Zones) och (RG). Dessutom har Azure lagt till:
- AAD och ADFS;
-
service.beta.kubernetes.io/azure-pip-nameför att ange offentlig IP för lastbalanseraren; - instÀllningar
LoadBalancerNameochLoadBalancerResourceGroup.
- AWS har fÄtt för EBS pÄ Windows och API-anrop för EC2
DescribeInstances. - Kubeadm migrerar nu sjÀlvstÀndigt BinÀrfiler
- etcd i den motsvarande Docker-bilden Àr vÀrldsexekverbara, vilket möjliggör körning av denna bild utan behov av root-behörighet. Dessutom har etcd-migrationsbilden slutat Cluster Autoscaler 1.16.0
- I Uppdateringar i den anvÀnda/beroende programvaran: Go 1.12.9, etcd 3.3.15, CoreDNS 1.6.2.
- Kubernetes 1.15: översikt över huvudnyheterna
P.S.
LÀs Àven i vÄr blogg:
- «»;
- «»;
- «»;
- «».
KĂ€lla: habr.com


