Introduzione a Kubernetes Kops per principianti
Pubblicato: 2021-06-13Impariamo a conoscere Kops, uno strumento operativo di Kubernetes.
Kubernetes è uno degli strumenti DevOps più popolari grazie al suo straordinario sistema di orchestrazione dei contenitori e alle sue funzionalità. Ma sebbene Kubernetes offra così tante funzionalità, configurare un cluster Kubernetes da zero è doloroso. È qui che entra in gioco Kops.
Con Kops, è un gioco da ragazzi creare un cluster Kubernetes su provider cloud come AWS, Google Cloud, ecc. Semplifica la configurazione di un cluster Kubernetes e in questo articolo discuterò di questo fantastico strumento.
Cos'è Kops?
Kops, noto anche come operazioni Kubernetes, è un progetto Kubernetes ufficiale open source, che consente di creare, mantenere, aggiornare e distruggere un cluster Kubernetes di livello produttivo a disponibilità elevata. Fornisce l'infrastruttura cloud anche a seconda del requisito. Gli sviluppatori di Kops lo descrivono come kubectl per i cluster Kubernetes.
Kops viene utilizzato principalmente nella distribuzione di cluster AWS e GCE Kubernetes. Kops supporta ufficialmente solo AWS, altri provider cloud come DigitalOcean, GCE e OpenStack sono in fase beta.
Se hai già lavorato su kubectl, ti sentirai a tuo agio lavorando su Kops. Kops fornisce comandi per creare, ottenere, aggiornare ed eliminare cluster. Inoltre, Kops sa come applicare le modifiche ai cluster esistenti poiché utilizza la configurazione dichiarativa. Con Kops, puoi anche scalare su e giù per un cluster Kubernetes.
Di seguito sono elencate le caratteristiche di Kops:
- Distribuisce i master Kubernetes con disponibilità elevata
- Gli aggiornamenti del cluster in sequenza sono supportati
- Automatizza il provisioning dei cluster AWS e GCE Kubernetes
- Gestisce i componenti aggiuntivi del cluster
- Completamento automatico del comando nella riga di comando
- Genera configurazioni CloudFormation e Terraform
- Supporta il modello di sincronizzazione dello stato per i cicli di prova e l'idempotenza automatica
- Crea gruppi di istanze per supportare cluster eterogenei
Installazione di Kops
Di seguito sono riportati semplici passaggi per installare Kops su un ambiente Linux. Sto usando Ubuntu 20.x.
Innanzitutto, scarica Kops dal pacchetto delle versioni. Il comando seguente scarica l'ultimo pacchetto di Kops.
geekflare@ip-170-11-26-119:~$ curl -Lo kops https://github.com/kubernetes/kops/releases/download/$(curl -s https://api.github.com/repos/kubernetes/kops/releases/latest | grep tag_name | cut -d '"' -f 4)/kops-linux-amd64 Saving to: 'kops-linux-amd64' 100%[=========================================================================================================================================================================>] 81,964,000 8.37MB/s in 7.1s 2021-06-10 16:23:19 (7.84 MB/s) - 'kops-linux-amd64' saved [81964000/81964000]Devi fornire il permesso eseguibile per il file kops che hai scaricato e spostarlo nella directory /usr/local/bin/.
geekflare@ip-170-11-26-119:~$ sudo chmod +x kops-linux-amd64 geekflare@ip-170-11-26-119:~$ sudo mv kops-linux-amd64 /usr/local/bin/kopsL'installazione è completata. Ora puoi eseguire il comando kops per verificare l'installazione.
geekflare@ip-170-11-26-119:~$ kops kops is Kubernetes ops. kops is the easiest way to get a production grade Kubernetes cluster up and running. We like to think of it as kubectl for clusters. kops helps you create, destroy, upgrade and maintain production-grade, highly available, Kubernetes clusters from the command line. AWS (Amazon Web Services) is currently officially supported, with GCE and VMware vSphere in alpha support. Usage: kops [command] Available Commands: completion Output shell completion code for the given shell (bash or zsh). create Create a resource by command line, filename or stdin. delete Delete clusters,instancegroups, or secrets. describe Describe a resource. edit Edit clusters and other resources. export Export configuration. get Get one or many resources. import Import a cluster. replace Replace cluster resources. rolling-update Rolling update a cluster. toolbox Misc infrequently used commands. update Update a cluster. upgrade Upgrade a kubernetes cluster. validate Validate a kops cluster. version Print the kops version information. Flags: --alsologtostderr log to standard error as well as files --config string config file (default is $HOME/.kops.yaml) -h, --help help for kops --log_backtrace_at traceLocation when logging hits line file:N, emit a stack trace (default :0) --log_dir string If non-empty, write log files in this directory --logtostderr log to standard error instead of files (default false) --name string Name of cluster --state string Location of state storage --stderrthreshold severity logs at or above this threshold go to stderr (default 2) -v, --v Level log level for V logs --vmodule moduleSpec comma-separated list of pattern=N settings for file-filtered logging Use "kops [command] --help" for more information about a command.Controlla la versione di Kops per assicurarti che Kops sia installato correttamente.
geekflare@ip-170-11-26-119:~$ kops version Version 1.20.1 (git-5a27dad)Diamo ora un'occhiata ad alcuni importanti comandi Kops che sono ampiamente utilizzati dagli amministratori per eseguire operazioni Kubernetes.
Comandi Kops
Di seguito sono riportati i comandi Kops ampiamente utilizzati che devi conoscere.
i kop creano
Il comando kops create viene utilizzato per registrare un cluster.
Sintassi: kops crea il cluster <clustername>
Ci sono molti altri parametri come zona, regione, tipo di istanza, numero di nodi, ecc., che puoi aggiungere in aggiunta al comando predefinito.
aggiornamento kops
Il comando kops update viene utilizzato per aggiornare il cluster con la specifica del cluster specificata.
Sintassi: kops update cluster –name <clustername>
Puoi eseguire questo comando nella modalità di anteprima per essere più sicuro e, una volta che l'output di anteprima corrisponde alle tue aspettative, puoi eseguire il comando con il flag –yes per applicare le modifiche al cluster.
kops ottenere
Il comando kops get viene utilizzato per elencare tutti i cluster.
Sintassi: kops ottiene i cluster
kops elimina
Il comando kops delete viene utilizzato per eliminare un cluster specifico dal registro e tutte le risorse cloud assegnate a quel cluster.
Sintassi: kops delete cluster –name <clustername>
Proprio come l'aggiornamento, puoi eseguire questo comando anche in modalità anteprima.
aggiornamento progressivo di kops
Il comando kops rolling-update viene utilizzato per aggiornare un cluster Kubernetes in modo che corrisponda alle specifiche cloud e kops.
Sintassi: kops aggiornamento in sequenza cluster –name <clustername>
Proprio come l'aggiornamento, puoi eseguire questo comando anche in modalità anteprima.
kops convalida
Il comando kops validate convalida se il cluster che hai creato è attivo o meno. Ad esempio, se i pod e i nodi sono nello stato in sospeso, il comando validate restituirà che il cluster non è ancora integro.
Sintassi: kops validate cluster –wait <specified_time>
Questo comando attenderà e convaliderà il cluster per il tempo specificato. Quindi, se vuoi convalidare il cluster per cinque minuti, esegui il comando con 5m secondo il tempo specificato.
Era tutto sui fondamenti di Kops, lascia che ora ti mostri come creare un cluster Kubernetes su AWS usando Kops.
Configura Kubernetes su AWS utilizzando Kops
Prima di iniziare con i passaggi indicati di seguito, questi sono alcuni prerequisiti:
- Ubuntu 20.04
- AWS CLI
- AWS Configura
Installazione di kubectl
In primo luogo, installerò kubectl.
Kubectl viene utilizzato per eseguire i comandi della riga di comando sui cluster Kubernetes. Scarica un pacchetto kubectl.
geekflare@ip-170-11-26-119:~$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 39.6M 100 39.6M 0 0 6988k 0 0:00:07 0:00:07 --:--:-- 6988kÈ necessario fornire l'autorizzazione eseguibile al file scaricato e spostarlo nella directory /usr/local/bin/.
geekflare@ip-170-11-26-119:~$ chmod +x ./kubectl geekflare@ip-170-11-26-119:~$ sudo mv ./kubectl /usr/local/bin/kubectlCrea secchio S3
Dopo aver installato e configurato l'AWS CLI nella tua macchina Linux, sarai in grado di eseguire i comandi aws . Ho aws cli installato sul mio sistema Ubuntu, quindi fammi eseguire un semplice comando che elencherà tutti i bucket in S3.
geekflare@ip-170-11-26-119:~$ aws s3 lsSarà vuoto perché al momento non ho alcun bucket s3. Fammi controllare se qualche istanza ec2 è in esecuzione.
geekflare@ip-170-11-26-119:~$ aws ec2 describe-instances { "Reservations": [] }Ciò significa che nessuna istanza ec2 è in esecuzione al momento.
Ora devi creare un bucket s3 in cui Kops salverà tutte le informazioni sullo stato del cluster. Qui sto creando un bucket s3 nella regione us-west-2 con il nome geekkops-bucket-1132. Puoi utilizzare LocationConstraint per evitare qualsiasi errore con la regione.
geekflare@ip-170-11-26-119:~$ aws s3api create-bucket --bucket geekkops-bucket-1132 --region us-west-2 --create-bucket-configuration LocationConstraint=us-west-2 { "Location": "http://geekkops-bucket-1132.s3.amazonaws.com/" } Se elenco di nuovo il aws s3 bucket , otterrò il bucket che ho appena creato.
geekflare@ip-170-11-26-119:~$ aws s3 ls 2021-06-10 16:30:13 geekkops-bucket-1132Esegui il comando seguente per abilitare la versione per il bucket s3.
geekflare@ip-170-11-26-119:~$ aws s3api put-bucket-versioning --bucket geekkops-bucket-1132 --versioning-configuration Status=EnabledGenera chiave
Genera la chiave ssh per la quale verrà utilizzata da Kops per l'accesso al cluster e la generazione della password.
geekflare@ip-170-11-26-119:~$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ubuntu/.ssh/id_rsa. Your public key has been saved in /home/ubuntu/.ssh/id_rsa.pub. The key fingerprint is: SHA256:fH4JCBXMNRqzk1hmoK+cXmwSFaeBsuGBA5IWMkNuvq0 geekflare@ip-170-11-26-119 The key's randomart image is: +---[RSA 2048]----+ |O=. .++Xoo | |B++ .. @o* . | |.= =. = = | |ooooo | | . . . S o | | o. = o . . | | . .= + . o | | .. + . | | E . | +----[SHA256]-----+Esporta variabili d'ambiente
Esponi il nome del cluster e il bucket s3 come variabili di ambiente. Questo sarà applicabile solo per la sessione corrente. Sto usando il suffisso '.k8s.local' perché non sto usando alcun DNS preconfigurato.

geekflare@ip-170-11-26-119:~$ export KOPS_CLUSTER_NAME=geekdemo1.k8s.local geekflare@ip-170-11-26-119:~$ export KOPS_STATE_STORE=s3://geekkops-bucket-1132Crea il cluster
Utilizzare il comando kops create per creare il cluster. Di seguito sono riportati i parametri che sto utilizzando per creare un cluster Kubernetes su AWS utilizzando Kops:
-
--clouddice al provider di servizi cloud che sto utilizzando -
--zonesè la zona in cui verrà distribuita l'istanza del cluster -
--node-countè il numero di nodi da distribuire nel cluster Kubernetes -
--node-sizee--master-sizesono i tipi di istanza ec2, sto usando le micro istanze -
--nameè il nome del cluster
geekflare@ip-170-11-26-119:~$ kops create cluster --cloud=aws --zones=eu-central-1a --node-count=1 --node-size=t2.micro --master-size=t2.micro --name=${KOPS_CLUSTER_NAME} I0216 16:35:24.225238 4326 subnets.go:180] Assigned CIDR 172.20.32.0/19 to subnet eu-central-1a I0216 16:35:24.068088 4326 create_cluster.go:717] Using SSH public key: /home/ubuntu/.ssh/id_rsa.pub Previewing changes that will be made: I0216 16:35:24.332590 4326 apply_cluster.go:465] Gossip DNS: skipping DNS validation I0216 16:35:24.392712 4326 executor.go:111] Tasks: 0 done / 83 total; 42 can run W0216 16:35:24.792113 4326 vfs_castore.go:604] CA private key was not found I0216 16:35:24.938057 4326 executor.go:111] Tasks: 42 done / 83 total; 17 can run I0216 16:35:25.436407 4326 executor.go:111] Tasks: 59 done / 83 total; 18 can run I0216 16:35:25.822395 4326 executor.go:111] Tasks: 77 done / 83 total; 2 can run I0216 16:35:25.823088 4326 executor.go:111] Tasks: 79 done / 83 total; 2 can run I0216 16:35:26.406919 4326 executor.go:111] Tasks: 81 done / 83 total; 2 can run I0216 16:35:27.842148 4326 executor.go:111] Tasks: 83 done / 83 total; 0 can run LaunchTemplate/master-eu-central-1a.masters.geekdemo1.k8s.local AssociatePublicIP true HTTPPutResponseHopLimit 1 HTTPTokens optional IAMInstanceProfile name:masters.geekdemo1.k8s.local id:masters.geekdemo1.k8s.local ImageID 099720109477/ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-20210119.1 InstanceType t2.micro RootVolumeSize 64 RootVolumeType gp2 RootVolumeEncryption false RootVolumeKmsKey SSHKey name:kubernetes.geekdemo1.k8s.local-3e:19:92:ca:dd:64:d5:cf:ff:ed:3a:92:0f:40:d4:e8 id:kubernetes.geekdemo1.k8s.local-3e:19:92:ca:dd:64:d5:cf:ff:ed:3a:92:0f:40:d4:e8 SecurityGroups [name:masters.geekdemo1.k8s.local] SpotPrice Tags {k8s.io/cluster-autoscaler/node-template/label/kubernetes.io/role: master, k8s.io/cluster-autoscaler/node-template/label/kops.k8s.io/instancegroup: master-eu-central-1a, k8s.io/role/master: 1, kops.k8s.io/instancegroup: master-eu-central-1a, Name: master-eu-central-1a.masters.geekdemo1.k8s.local, KubernetesCluster: geekdemo1.k8s.local, kubernetes.io/cluster/geekdemo1.k8s.local: owned, k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/master: } Subnet/eu-central-1a.geekdemo1.k8s.local ShortName eu-central-1a VPC name:geekdemo1.k8s.local AvailabilityZone eu-central-1a CIDR 172.20.32.0/19 Shared false Tags {KubernetesCluster: geekdemo1.k8s.local, kubernetes.io/cluster/geekdemo1.k8s.local: owned, SubnetType: Public, kubernetes.io/role/elb: 1, Name: eu-central-1a.geekdemo1.k8s.local} VPC/geekdemo1.k8s.local CIDR 172.20.0.0/16 EnableDNSHostnames true EnableDNSSupport true Shared false Tags {kubernetes.io/cluster/geekdemo1.k8s.local: owned, Name: geekdemo1.k8s.local, KubernetesCluster: geekdemo1.k8s.local} VPCDHCPOptionsAssociation/geekdemo1.k8s.local VPC name:geekdemo1.k8s.local DHCPOptions name:geekdemo1.k8s.local Must specify --yes to apply changes Cluster configuration has been created. Suggestions: * list clusters with: kops get cluster * edit this cluster with: kops edit cluster geekdemo1.k8s.local * edit your node instance group: kops edit ig --name=geekdemo1.k8s.local nodes-eu-central-1a * edit your master instance group: kops edit ig --name=geekdemo1.k8s.local master-eu-central-1a Finally configure your cluster with: kops update cluster --name geekdemo1.k8s.local --yes –adminEsegui il comando kops get per vedere se il cluster è stato creato.
geekflare@ip-170-11-26-119:~$ kops get cluster NAME CLOUD ZONES geekdemo1.k8s.local aws eu-central-1aAggiorna il cluster
Per applicare le specifiche del cluster specificate al cluster, eseguire il comando kops update.
geekflare@ip-170-11-26-119:~$ kops update cluster --name geekdemo1.k8s.local --yes --admin I0216 16:38:16.800767 4344 apply_cluster.go:465] Gossip DNS: skipping DNS validation I0216 16:38:16.919282 4344 executor.go:111] Tasks: 0 done / 83 total; 42 can run W0216 16:38:17.343336 4344 vfs_castore.go:604] CA private key was not found I0216 16:38:18.421652 4344 keypair.go:195] Issuing new certificate: "etcd-clients-ca" I0216 16:38:18.450699 4344 keypair.go:195] Issuing new certificate: "etcd-peers-ca-main" I0216 16:38:19.470785 4344 keypair.go:195] Issuing new certificate: "etcd-manager-ca-main" I0216 16:38:19.531852 4344 keypair.go:195] Issuing new certificate: "etcd-peers-ca-events" I0216 16:38:19.551601 4344 keypair.go:195] Issuing new certificate: "apiserver-aggregator-ca" I0216 16:38:19.571834 4344 keypair.go:195] Issuing new certificate: "etcd-manager-ca-events" I0216 16:38:19.592090 4344 keypair.go:195] Issuing new certificate: "master" W0216 16:38:19.652894 4344 vfs_castore.go:604] CA private key was not found I0216 16:38:19.653013 4344 keypair.go:195] Issuing new certificate: "ca" I0216 16:38:24.344075 4344 executor.go:111] Tasks: 42 done / 83 total; 17 can run I0216 16:38:24.306125 4344 executor.go:111] Tasks: 59 done / 83 total; 18 can run I0216 16:38:26.189798 4344 executor.go:111] Tasks: 77 done / 83 total; 2 can run I0216 16:38:26.190464 4344 executor.go:111] Tasks: 79 done / 83 total; 2 can run I0216 16:38:26.738600 4344 executor.go:111] Tasks: 81 done / 83 total; 2 can run I0216 16:38:28.810100 4344 executor.go:111] Tasks: 83 done / 83 total; 0 can run I0216 16:38:29.904257 4344 update_cluster.go:313] Exporting kubecfg for cluster kops has set your kubectl context to geekdemo1.k8s.local Cluster is starting. It should be ready in a few minutes. Suggestions: * validate cluster: kops validate cluster --wait 10m * list nodes: kubectl get nodes --show-labels * ssh to the master: ssh -i ~/.ssh/id_rsa [email protected] * the ubuntu user is specific to Ubuntu. If not using Ubuntu please use the appropriate user based on your OS. * read about installing addons at: https://kops.sigs.k8s.io/operations/addons.Se controlli immediatamente che i nodi Kubernetes siano in esecuzione o meno, riceverai un errore. Devi essere un po' paziente e attendere qualche minuto (5-10) fino alla creazione del cluster.
geekflare@ip-170-11-26-119:~$ kubectl get nodes Unable to connect to the server: dial tcp: lookup api-geekdemo1-k8s-local-dason2-1001342368.eu-central-1.elb.amazonaws.com on 127.0.0.53:53: no such hostConvalida il cluster
Sto eseguendo il comando di convalida per 5 minuti per verificare se il cluster è attivo e integro o meno. Nell'output di convalida, sarai in grado di vedere i dettagli del nodo quando sono attivi.
geekflare@ip-170-11-26-119:~$ kops validate cluster --wait 5m Validating cluster geekdemo1.k8s.local INSTANCE GROUPS NAME ROLE MACHINETYPE MIN MAX SUBNETS master-eu-central-1a Master t2.micro 1 1 eu-central-1a nodes-eu-central-1a Node t2.micro 1 1 eu-central-1aElenca i nodi e i pod
Ora esegui il comando seguente per verificare se tutti i nodi sono pronti e in esecuzione. Puoi vedere che sia il master che il nodo sono pronti.
geekflare@ip-170-11-26-119:~$ kubectl get nodes NAME STATUS ROLES AGE VERSION ip-173-19-35-156.eu-central-1.compute.internal Ready master 10m v1.20.1 ip-172-36-23-149.eu-central-1.compute.internal Ready node 5m38s v1.20.1Puoi controllare tutti i pod in esecuzione nel cluster Kubernetes.
geekflare@ip-170-11-26-119:~$ kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system dns-controller-8d8889c4b-xp9dl 1/1 Running 0 8m26s kube-system etcd-manager-events-ip-173-19-35-156.eu-central-1.compute.internal 1/1 Running 0 10m kube-system etcd-manager-main-ip-173-19-35-156.eu-central-1.compute.internal 1/1 Running 0 10m kube-system kops-controller-9skdk 1/1 Running 3 6m51s kube-system kube-apiserver-ip-173-19-35-156.eu-central-1.compute.internal 2/2 Running 0 10m kube-system kube-controller-manager-ip-173-19-35-156.eu-central-1.compute.internal 1/1 Running 6 10m kube-system kube-dns-696cb84c7-g8nhb 3/3 Running 0 4m27s kube-system kube-dns-autoscaler-55f8f75459-zlxbr 1/1 Running 0 7m18s kube-system kube-proxy-ip-173-19-35-156.eu-central-1.compute.internal 1/1 Running 0 10m kube-system kube-proxy-ip-172-36-23-149.eu-central-1.compute.internal 1/1 Running 0 7m2s kube-system kube-scheduler-ip-173-19-35-156.eu-central-1.compute.internal 1/1 Running 5 10mElimina il cluster
Proprio come la creazione di un cluster Kubernetes, l'eliminazione di un cluster Kubernetes utilizzando Kops è molto semplice. Questo comando kops delete rimuoverà tutte le risorse cloud del cluster e il registro del cluster stesso.
geekflare@ip-170-11-26-119:~$ kops delete cluster --name geekdemo1.k8s.local --yes TYPE NAME ID autoscaling-config master-eu-central-1a.masters.geekdemo1.k8s.local lt-0cc11aec1943204e4 autoscaling-config nodes-eu-central-1a.geekdemo1.k8s.local lt-0da65d2eaf6de9f5c autoscaling-group master-eu-central-1a.masters.geekdemo1.k8s.local master-eu-central-1a.masters.geekdemo1.k8s.local autoscaling-group nodes-eu-central-1a.geekdemo1.k8s.local nodes-eu-central-1a.geekdemo1.k8s.local dhcp-options geekdemo1.k8s.local dopt-0403a0cbbfbc0c72b iam-instance-profile masters.geekdemo1.k8s.local masters.geekdemo1.k8s.local iam-instance-profile nodes.geekdemo1.k8s.local nodes.geekdemo1.k8s.local iam-role masters.geekdemo1.k8s.local masters.geekdemo1.k8s.local iam-role nodes.geekdemo1.k8s.local nodes.geekdemo1.k8s.local instance master-eu-central-1a.masters.geekdemo1.k8s.local i-069c73f2c23eb502a instance nodes-eu-central-1a.geekdemo1.k8s.local i-0401d6b0d4fc11e77 iam-instance-profile:nodes.geekdemo1.k8s.local ok load-balancer:api-geekdemo1-k8s-local-dason2 ok iam-instance-profile:masters.geekdemo1.k8s.local ok iam-role:masters.geekdemo1.k8s.local ok instance:i-069c73f2c23eb502a ok autoscaling-group:nodes-eu-central-1a.geekdemo1.k8s.local ok iam-role:nodes.geekdemo1.k8s.local ok instance:i-0401d6b0d4fc11e77 ok autoscaling-config:lt-0cc11aec1943204e4 ok autoscaling-config:lt-0da65d2eaf6de9f5c ok autoscaling-group:master-eu-central-1a.masters.geekdemo1.k8s.local ok keypair:key-0d82g920j421b89dn ok Deleted kubectl config for geekdemo1.k8s.local Deleted cluster: "geekdemo1.k8s.local"Conclusione
Spero che questo articolo su Kops sia stato utile e che tu debba imparare qualcosa di nuovo oggi. Kops è uno strumento fantastico per lavorare con Kubernetes sul cloud. Quindi vai avanti e prova i passaggi menzionati in questo articolo e configura il tuo cluster Kubernetes su AWS utilizzando Kops.
