Förutsättningar
Det första du behöver är tillgång till ett Kubernetes-kluster. Du kan skapa en med Minikube eller använda Docker för Windows eller Docker för Mac som båda kommer med en enda nod Kubernetes-distribution som du kan aktivera i Dockers inställningar.
Du måste också ha lite kunskap om Kubernetes på förhand. Här är en riktigt bra utgångspunkt.
Skapa Pods
Vanligtvis skapar vi pods med en yaml-fil som anger vilken containeravbild som ska användas, vilka portar som ska exponeras, etc. Här är en enkel fil för att skapa en nginx-pod.
apiVersion: v1snäll: Pod
metadata:
namn: nginx-1
märka:
app: webbserver
spec:
behållare:
- namn: nginx
bild: nginx: 1.7.9
hamnar:
- containerPort: 80
Spara den under namnet nginx-pod.yaml i en katalog och kör sedan kommandot inifrån samma katalog:
$ kubectl skapa -f ./ nginx-pod.yaml## Kontrollera att podden skapas genom att köra:
$ kubectl få skida
Du kommer att märka att en enda pod heter “Nginx-1” är igång. Men du kan inte skala denna enda pod. Löpning kubectl skapa igen kommer att ge dig ett fel sedan namnet nginx-1 kan inte återanvändas igen.
Kubernetes har gett möjligheten att skapa pods till högre abstraktioner som Implementeringar och ReplicaSets. Vilka skapar pods från en given podmall som anger vilka bilder som ska användas, vilka portar som ska exponeras i var och en av de nya podsna, etc, men inget för specifikt om en enda pod. ReplicaSet (och Deployments, också) gå sedan till att skapa nya pods, ge varje ny pod ett unikt namn samt en icke-unik etikett som hjälper ReplicaSet att hålla reda på de pods som skapades från en given mall.
ReplicaSet säkerställer att vid ett visst ögonblick alltid ett visst antal pods av en viss etikett är igång. Om till exempel en nod går ner är det ReplicaSet att skapa fler pods över andra noder för att kompensera för förlusten. För att skriva en repliksats yaml-fil skulle vi följa mönstret som att skriva en pod. Den kommer att ha en API-version (appar / v1), en typ (ReplicaSet) och ett namn i metadata. Själva replikset kan ha etiketter, men vi kommer att hålla sakerna enkla för tillfället och bara ge det ett unikt namn my-replicaset.
Vi behöver sedan flytta från metadata avsnitt till kött av materia spec. Här ger vi antalet replikationer vi vill ha under avsnittet repliker. Sedan ger vi denna ReplicaSet a väljare som skulle användas för att matcha en etikett, säg, app till ett värde, säg, webbserver, bland de skott som för närvarande körs. Om det finns färre av dessa pods skapar det pods enligt den givna mallen och lägger till samma etikett till dessa nya pods. Om det finns fler pods än vad som krävs, raderas några.
Att specificera en mall som skulle fungera som bas för att skapa nya pods är det mest involverade steget. Den här mallen har inget namn, eftersom replikaset skapar ett nytt namn för varje ny pod som skapas. Det kommer dock att ha etiketter, och du kan märka att samma etikett app = webserver som mallen har väljs via väljare parameter i replikspecifikationen.
apiVersion: appar / v1typ: ReplicaSet
metadata:
namn: my-replicaset
spec:
repliker: 3
väljare:
matchLabels:
app: webbserver
mall:
metadata:
etiketter:
app: webbserver
spec:
behållare:
- namn: nginx
bild: nginx: 1.7.9
hamnar:
- containerPort: 80
Spara den här filen som nginx-replicaset.yaml och skapa replikset med kommandot:
$ kubectl skapa -f nginx-replik.yamlEftersom vi tidigare skapat en pod med samma etikett app = webserver, replicaset skulle bara skapa ytterligare två pods. Du kan lista alla kapslar med kommandot:
$ kubectl få skidaNAMN KLAR STATUS ÅTERSTART Åldern
my-replicaset-nmvt9 1/1 Running 0 9s
my-replicaset-xf9mx 1/1 Running 0 9s
nginx-1 1/1 Running 0 28s
Varje skida har ett unikt namn som är kopplat till dem. Liksom den allra första podden vi skapade hade ett namn nginx-1. Du kan försöka ta bort den här med kommandot:
$ kubectl ta bort pod nginx-1$ kubectl få skida
NAMN KLAR STATUS ÅTERSTART Åldern
my-replicaset-nmvt9 1/1 Running 0 1m
my-replicaset-pkn4q 1/1 Running 0 22s
my-replicaset-xf9mx 1/1 Running 0 1m
Du kommer att märka att Controller ReplicaSet nästan omedelbart skapade en ny pod för att ersätta den vi tog bort. Således säkerställer att antalet löpande pods, med etikett app = webserver är alltid 3, som anges i vårt repliksetmanifest ovan.
Du får mycket kontroll tack vare etiketter och väljare. Du kan sprida skivorna vidare över flera noder med hjälp av nodeSelectors, som används för att fördela ett visst antal skivor på vissa noder.
Vad replikserver inte tillåter är uppdateringar. Om en nyare version av din app, säg, nginx: 1.8 kommer, du måste ta bort den här repliken och skapa en ny med den bilden som nämns i replikasets yaml-manifest. Det är här begreppet distributioner är till nytta. Det inkluderar idén om replikserier och utökas genom att ge ytterligare stöd för att uppdatera dina appar. Nu när du är bekväm med replikserier kan det vara en bra idé att titta på Kubernetes Deployments.
Referenser
- Skapa Pods
- Skapa ReplicaSets