kubernetesAan de slag met kubernetes


Opmerkingen

Kubernetes is een open-sourceplatform voor het automatiseren van de implementatie, schaling en operaties van applicatiecontainers over clusters van hosts en biedt container-centrische infrastructuur.

Met Kubernetes kunt u snel en efficiënt reageren op de vraag van de klant:

  • Implementeer uw applicaties snel en voorspelbaar.
  • Schaal uw applicaties meteen.
  • Nieuwe functies naadloos uitrollen.
  • Optimaliseer het gebruik van uw hardware door alleen de middelen te gebruiken die u nodig hebt.

Waarom heb ik Kubernetes nodig en wat kan dit?

Kubernetes kunnen applicatiecontainers plannen en uitvoeren op clusters van fysieke of virtuele machines. Kubernetes stelt ontwikkelaars echter ook in staat om 'het snoer door te snijden' naar fysieke en virtuele machines, van een hostcentrische infrastructuur naar een containercentrische infrastructuur, die alle voordelen en voordelen biedt die inherent zijn aan containers. Kubernetes biedt de infrastructuur om een echt op de container gerichte ontwikkelomgeving te bouwen.

Kubernetes voldoet aan een aantal gemeenschappelijke behoeften van toepassingen die in productie worden uitgevoerd, zoals:

  • co-lokaliseren van helperprocessen, faciliteren van samengestelde applicaties en behoud van het één-applicatie-per-container model,
  • montage opslagsystemen,
  • geheimen verspreiden,
  • applicatie gezondheid controle,
  • replicerende applicatie-instanties,
  • horizontaal automatisch schalen,
  • naamgeving en ontdekking,
  • taakverdeling,
  • rollende updates,
  • resource monitoring,
  • logboektoegang en opname,
  • ondersteuning voor introspectie en foutopsporing, en
  • identiteit en autorisatie.

Dit biedt de eenvoud van Platform as a Service (PaaS) met de flexibiliteit van Infrastructure as a Service (IaaS) en vergemakkelijkt portabiliteit tussen infrastructuuraanbieders.

versies

Versie Publicatiedatum
1.7 2017/06/28
1.6 2017/02/22
1.5 2016/12/13
1.4 2016/09/26
1.3 2016/07/06
1.2 2016/03/17
1.1 2015/09/09
1.0 2015/07/18

Configureer kubectl

Een Kubernetes-cluster wordt bestuurd met behulp van de opdracht kubectl . De methode voor het configureren van kubectl afhankelijk van waar Kubernetes is geïnstalleerd.

Google Cloud (Container Engine)

Kubectl installeren met behulp van de Google Cloud SDK:

gcloud components install kubectl
 

Kubectl configureren om een bestaand Kubernetes-cluster in Container Engine te besturen:

gcloud container clusters get-credentials $CLUSTER_NAME
 

Minikube

Bij het gebruik van minikube moet het binaire kubectl handmatig worden gedownload en in het pad worden geplaatst.

# Version of Kubernetes.
K8S_VERSION=$(curl -sS https://storage.googleapis.com/kubernetes-release/release/stable.txt)
# Operating System. Can be one of {linux, darwin}
GOOS=linux
# Architecture. Can be one of {386, amd64, arm64, ppc641e}
GOARCH=amd64

# Download and place in path.
curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/${K8S_VERSION}/bin/${GOOS}/${GOARCH}/kubectl
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
 

Het minikube-binaire bestand configureert kubectl automatisch bij het starten van een cluster.

minikube start
# kubectl is now ready to use!
 

Hallo Wereld

Zodra uw Kubernetes-cluster actief is en kubectl is geconfigureerd, kunt u uw eerste applicatie met een paar stappen uitvoeren. Dit kan worden gedaan met behulp van de gebiedende commando's waarvoor geen configuratiebestanden nodig zijn.

Om een applicatie uit te voeren, moet u een implementatienaam ( bootcamp ), de locatie van de containerafbeelding ( docker.io/jocatalin/kubernetes-bootcamp:v1 ) en de poort ( 8080 ) docker.io/jocatalin/kubernetes-bootcamp:v1

$ kubectl run bootcamp --image=docker.io/jocatalin/kubernetes-bootcamp:v1 --port=8080
 

Bevestig dat het werkte met:

$ kubectl get deployments
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
bootcamp               1         1         1            1         6s
 

Om uw applicatie te ontmaskeren en van buitenaf toegankelijk te maken:

$ kubectl expose deployment/bootcamp --type="LoadBalancer" --port 8080
 

Bevestig dat het werkte met:

$ kubectl get services
NAME                  CLUSTER-IP   EXTERNAL-IP         PORT(S)    AGE
kubernetes            10.0.0.1     <none>              443/TCP    3m
bootcamp              10.3.245.61  104.155.111.170     8080:32452/TCP   2m
 

Gebruik voor toegang tot de services het externe IP-adres en de applicatiepoort, bijvoorbeeld als volgt:

$ export EXTERNAL_IP=$(kubectl get service bootcamp --output=jsonpath='{.status.loadBalancer.ingress[0].ip}')
$ export PORT=$(kubectl get services --output=jsonpath='{.items[0].spec.ports[0].port}')
$ curl "$EXTERNAL_IP:$PORT"
Hello Kubernetes bootcamp! | Running on: bootcamp-390780338-2fhnk | v=1
 

Hetzelfde kan handmatig worden gedaan met de gegevens in:

$ kubectl describe service bootcamp
Name:                   bootcamp
Namespace:              default
Labels:                 run=bootcamp
Selector:               run=bootcamp
Type:                   LoadBalancer
IP:                     10.3.245.61
LoadBalancer Ingress:   104.155.111.170
Port:                   <unset> 8080/TCP
NodePort:               <unset> 32452/TCP
Endpoints:              10.0.0.3:8080
... events and details left out ....

$ export NODE=104.155.111.170
$ export PORT=8080
 

Zodra dit werkt, kunt u uw toepassing opschalen met:

$ kubectl scale deployments/bootcamp --replicas=4
 

En controleer het resultaat met:

$ kubectl get deployments
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
bootcamp               4         4         4            4         30s

$ curl "$EXTERNAL_IP:$PORT"
Hello Kubernetes bootcamp! | Running on: bootcamp-390780338-2fhnk | v=1
$ curl "$EXTERNAL_IP:$PORT"
Hello Kubernetes bootcamp! | Running on: bootcamp-390780338-gmtv5 | v=1
 

Let op de veranderende pod-ID.

Om een nieuwe applicatieversie uit te drukken, voert u het volgende uit:

kubectl set image deployments/bootcamp bootcamp=jocatalin/kubernetes-bootcamp:v2
 

En bevestig het met:

$ curl "$EXTERNAL_IP:$PORT"
Hello Kubernetes bootcamp! | Running on: bootcamp-284539476-gafwev3 | v=2
 

Opruimen is eindelijk klaar met:

$ kubectl delete deployment bootcamp
$ kubectl delete service bootcamp
 

Installeer op Google Cloud

Kubernetes werd oorspronkelijk ontwikkeld door Google om hun Container Engine aan te drijven. Als zodanig zijn Kubernetes-clusters een eersteklas burger bij Google.

Voor het maken van een Kubernetes-cluster in de container-engine is de opdracht gcloud van de Google Cloud SDK vereist. Gebruik een van de volgende opties om deze opdracht lokaal te installeren:

  • gebruik het interactieve installatieprogramma (de eenvoudigste manier voor de nieuwkomers):
curl https://sdk.cloud.google.com | bash
exec -l $SHELL
gcloud init
 
curl -Lo gcloud-sdk.tar.gz https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-142.0.0-linux-x86_64.tar.gz
tar xvf ./gcloud-sdk.tar.gz
./google-cloud-sdk/install.sh
gcloud init
 

Nadat gcloud is geïnstalleerd, maakt u een Kubernetes-cluster met:

# Give our cluster a name
CLUSTER_NAME=example-cluster

# Number of machines in the cluster.
NUM_NODES=3
    
gcloud container clusters create $CLUSTER_NAME --num_nodes=$NUM_VMS
 

Minikube installeren

Minikube maakt een lokaal cluster van virtuele machines om Kubernetes op uit te voeren. Het is de eenvoudigste methode om uw handen vuil te maken met Kubernetes op uw lokale machine.

Documentatie voor Minikube is te vinden op http://kubernetes.io/docs/getting-started-guides/minikube/

Voorwaarden

Voer de juiste opdracht uit om te controleren of ondersteuning voor virtualisatie is ingeschakeld. De opdracht zal iets uitvoeren als virtualisatie is ingeschakeld.

# On Linux
cat /proc/cpuinfo | grep 'vmx\|svm'
# On OSX
sysctl -a | grep machdep.cpu.features | grep VMX
 

Installatie

Minikube is een enkelvoudig binair getal. De installatie is dus net zo eenvoudig als het downloaden van het binaire bestand en het op uw pad plaatsen.

# Specify the version of minikube to download.
# Latest version can be retrieved from 
# https://github.com/kubernetes/minikube/releases
VERSION=v0.16.0

# If on Linux
OS=linux  
# If on OSX
# OS=darwin

# URL to download minikube binary from
URL=https://storage.googleapis.com/minikube/releases/$VERSION/minikube-$OS-amd64

# Download binary and place in path.
curl -Lo minikube $URL 
chmod +x minikube 
sudo mv minikube /usr/local/bin/
 

Gebruik

Om een nieuw cluster te starten:

minikube start
 

Hiermee wordt een nieuw cluster van lokale virtuele machines gemaakt met Kubernetes al geïnstalleerd en geconfigureerd.

U kunt het Kubernetes-dashboard openen met:

minikube dashboard
 

Minikube maakt een gerelateerde context voor kubectl die kan worden gebruikt met:

kubectl config use-context minikube
 

Eenmaal klaar kunnen de lokale Kubernetes worden gebruikt:

kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
kubectl expose deployment hello-minikube --type=NodePort
curl $(minikube service hello-minikube --url)
 

Om het lokale cluster te stoppen:

minikube stop
 

Om het lokale cluster te verwijderen, wordt na het aanmaken een nieuw IP-adres toegewezen:

minikube delete
 

Kubectl op opdrachtregel

Nadat u een lopend cluster hebt, kunt u dit beheren met de opdracht kubectl . De meeste opdrachten die u kunt krijgen met de opdracht kubectl --help , maar ik laat u de meest voorkomende opdrachten zien voor het beheren en verkrijgen van informatie over uw cluster, knooppunten, pods, services en labels.


Voor informatie over het cluster kunt u de volgende opdracht gebruiken

kubectl cluster-info
 

Het toont u het lopende adres en de poort.


Voor het verkrijgen van korte informatie over de knooppunten, pods, services, enz. Of andere bronnen die een plaats in het cluster hebben gekregen, kunt u de volgende opdracht gebruiken

kubectl get {nodes, pods, services, ...}
 

De uitvoer meestal één regel per resource.


Voor een gedetailleerde beschrijving van de bronnen kunt u de describe voor de kubectl

kubectl describe {nodes, pods, ...}
 

De ingezette apps zijn alleen zichtbaar in het cluster, dus als u de uitvoer van buiten het cluster wilt krijgen, moet u een route tussen de terminal en het kubernetes-cluster maken.

kubectl proxy
 

Het opent een API, waar we alles uit het cluster kunnen halen. Als u de naam van de pods wilt verkrijgen om informatie over te krijgen, moet u de volgende opdracht gebruiken:

kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'
 

Het geeft de pods weer voor later gebruik.

curl http://localhost:8001/api/v1/proxy/namespaces/default/pods/{pod_name}/
 

Twee andere veel voorkomende opdracht is het ophalen van logboeken en het uitvoeren van een opdracht vanuit / in de container-app.

kubectl logs {pod_name}
kubectl exec {pod_name} {command}
 

Het voltooien van tabs voor uw shell kan worden gedaan met:

source <(kubectl completion zsh)   # if you're using zsh
source <(kubectl completion bash)  # if you're using bash
 

of meer programmatisch:

source <(kubectl completion "${0/-/}")