Kubernetes, també anomenat K8s, és un sistema de codi obert que s'utilitza per automatitzar la implementació, l'escalat i la gestió d'aplicacions en contenidors. Proporciona un marc per executar sistemes distribuïts. És molt útil implementar una aplicació del costat del servidor amb una alta fiabilitat, poc temps d'inactivitat i un equilibri de càrrega excel·lent.
En aquest tutorial, et mostrem com configurar un clúster de Kubernetes d'un sol node a Ubuntu 20.04.
Requisits
- Un servidor al núvol que executi Ubuntu 20.04 amb 4 GB de RAM.
- Una contrasenya de root configurada al teu servidor.
Comencem!
Instal·la Snapd
Primer, hauràs d'instal·lar Snapd per instal·lar MicroK8s al teu sistema. Pots fer-ho amb l'ordre següent:
# apt-get install snapd -yUn cop instal·lat, exporta el camí de Snapd i activa'l amb l'ordre següent:
# echo 'export PATH=$PATH:/snap/bin' >> ~/.bashrc
# source ~/.bashrcQuan hagis acabat, pots passar al pas següent.
Instal·la MicroK8s
MicroK8s és una distribució de Kubernetes potent, lleugera i fiable preparada per a producció. S'utilitza per configurar i administrar el clúster de Kubernetes.
Pots instal·lar-lo amb el gestor de paquets Snap tal com es mostra a continuació:
# snap install microk8s --classicQuan la instal·lació hagi acabat, comprova l'estat de MicroK8s amb l'ordre següent:
# microk8s.status --wait-readyHauries d'obtenir el resultat següent:
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
addons:
enabled:
ha-cluster # Configura l'alta disponibilitat al node actual
disabled:
ambassador # Passarel·la d'API i Ingress d'Ambassador
cilium # SDN, ràpida amb una política de xarxa completa
dashboard # El tauler de control de Kubernetes
dns # CoreDNS
fluentd # Registre i monitoratge d'Elasticsearch-Fluentd-Kibana
gpu # Habilitació automàtica de Nvidia CUDA
helm # Helm 2 - el gestor de paquets per a Kubernetes
helm3 # Helm 3 - gestor de paquets de Kubernetes
host-access # Permet que els Pods es connectin als serveis de l'amfitrió sense problemes
ingress # Controlador Ingress per a l'accés extern
istio # Serveis bàsics de la malla de serveis d'Istio
jaeger # Operador Jaeger de Kubernetes amb la seva configuració senzilla
keda # Escalat automàtic basat en esdeveniments sobre Kubernetes
knative # El marc de treball Knative sobre Kubernetes.
kubeflow # Kubeflow per facilitar els desplegaments de ML
linkerd # Linkerd és una malla de serveis per a Kubernetes i altres marcs de treball
metallb # Equilibrador de càrrega per al teu clúster de Kubernetes
metrics-server # K8s Metrics Server per accedir a les mètriques dels serveis mitjançant l'API
multus # Multus CNI permet connectar diverses interfícies de xarxa als pods
portainer # Portainer UI per al teu clúster de Kubernetes
prometheus # Operador Prometheus per al monitoratge i el registre
rbac # Control d'accés basat en rols per a l'autorització
registry # Registre privat d'imatges exposat a localhost:32000
storage # Classe d'emmagatzematge; assigna emmagatzematge des del directori de l'amfitrió
traefik # Controlador Ingress de traefik per a l'accés extern
Habilita el tauler de control de Kubernetes
Per defecte, tots els complements estan deshabilitats. Per tant, hauràs de habilitar el tauler de serveis bàsics de Kubernetes i kube-dns.
Pots fer-ho amb l'ordre següent:
# microk8s.enable dashboard dnsHauries d'obtenir el resultat següent:
Enabling DNS
Applying manifest
serviceaccount/coredns created
configmap/coredns created
deployment.apps/coredns created
service/kube-dns created
clusterrole.rbac.authorization.k8s.io/coredns created
clusterrolebinding.rbac.authorization.k8s.io/coredns created
Restarting kubelet
DNS is enabled
Ara comprova el desplegament d'aquests complements amb l'ordre següent:
# microk8s.kubectl get pods --all-namespacesHauries de veure el resultat següent:
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system metrics-server-8bbfb4bdb-c5rf8 1/1 Running 0 4m39s
kube-system calico-kube-controllers-847c8c99d-bp8mp 1/1 Running 0 9m20s
kube-system calico-node-ftb5n 1/1 Running 1 9m20s
kube-system kubernetes-dashboard-7ffd448895-88hnf 1/1 Running 0 4m35s
kube-system dashboard-metrics-scraper-6c4568dc68-868tr 1/1 Running 0 4m35s
kube-system coredns-86f78bb79c-9jlzx 1/1 Running 0 4m34s
Hauràs d'esperar uns minuts perquè tots els pods estiguin en estat "EN EJECUCIÓN".
Recupera l'usuari administrador i la contrasenya de Kubernetes
Primer, busca l'adreça IP interna del teu servidor amb l'ordre següent:
# hostname -IHauries d'obtenir el resultat següent:
69.87.218.121 10.1.89.0A continuació, recupera el nom d'usuari d'admin i la contrasenya amb l'ordre següent:
# microk8s.configHauries d'obtenir el resultat següent:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURBVENDQWVtZ0F3SUJBZ0lKQU1iaWp6RENQR09ETUEwR0NTcUdTSWIzRFFFQkN3VUFNQmN4RlRBVEJnTlYKQkFNTURERXdMakUxTWk0eE9ETXVNVEFlRncweU1UQXlNVEV3TWpRMU1qZGFGdzB6TVRBeU1Ea3dNalExTWpkYQpNQmN4RlRBVEJnTlZCQU1NRERFd0xqRTFNaTR4T0RNdU1UQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCkFEQ0NBUW9DZ2dFQkFNN2tTNWR2NXRJZjB4QlI4VzJ3MWZZTzVqVm1KUmNwM3NNOUpkNnB1Qjg0R0lsSkRiaGQKTUJiMjgxaXYrM3hERXNDOHNLM2RQNVR0Qld3eGdCaUNYOERuN0orVVZra09vblA4VFlzNWxBWEFRMEZLb3BHVgpleHhiQTlySlA1RFNKT1VhOVlSd2VNcFl3ODY2MkM4cE9lOW1uWFE3VS9BcStYWlA2Nk0vWjVsbVQrSldIUHY2ClRKN2lHc2tPMTZtSE5LQnVsS0xHaWg2MEhvN2I2K0ZqOGRYOGNSd2EwUi9rOVl3TmNKbEtoeUtGNittYmxpQ2UKQ2cvci9BOXllWUZLeWhZZUFkVVIveGJIbGhFc2xmQnVJYlJvb01lN3p4cXIwamZwWUVYSE1mWFNzaFMrY0s2cApmRXFZWjNLMzlURVA3c21xQTBEcHZmM21sVHFIYkc4STlBOENBd0VBQWFOUU1FNHdIUVlEVlIwT0JCWUVGSlNBCkROUUwrZW5JYVBtdlorREFZK094WGcwZk1COEdBMVVkSXdRWU1CYUFGSlNBRE5RTCtlbklhUG12WitEQVkrT3gKWGcwZk1Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUVCeDhrUkNzaHc1THpFeApwWjNwRnh1cGR3RW1PZndHbjM5RDZXdnRKUHZhOUNMRzNaenRDQitxT3pXanIzcDBSZmoxZE9KQkYvd3djUmFiCncyNHZ2QjBHZVJkTzUrWldiNGxZRno5cmx5UFdmMVM0OUZSeEM5czFaY3FqeTEvcGxiMm5FdjJHSlNhVkNrZzkKUXpwbW1ZVHFwaWoxSWV0Tk5JRG1hTXZBVHBJRUxmd2R0aUxRbHFJR1JKSzRiemJoZHdXSlUvVmd4Z2k0YlplbApGOGhWbTZSNy9KMnpKc1A0K0Q5aVVlZG9YZ3YreElOc1pXdnZJaHFJNHhodDdQZzEwd3hBYm0zVk0rY3hrRjF3ClVVcE1BRHI2WjB3ZkRqYTV2MWcwTmNQazAyMk5HRkhTb3AzTk5ySVZ2QkdvRHcxdm5vY3g0Y3o5cHlkSGlXaUcKRkZWeDBaQT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
server: https://69.87.218.121:16443
name: microk8s-cluster
contexts:
- context:
cluster: microk8s-cluster
user: admin
name: microk8s
current-context: microk8s
kind: Config
preferences: {}
users:
- name: admin
user:
token: TnR2VVZaRXJHY2xMSXNTK0E0eit2NSs0ek5Zam85YWEzemQrMlJlUVg2OD0K
També pots recuperar el nom d'usuari i la contrasenya d'administrador del fitxer següent:
# cat /var/snap/microk8s/current/credentials/known_tokens.csvHauries d'obtenir el resultat següent:
TnR2VVZaRXJHY2xMSXNTK0E0eit2NSs0ek5Zam85YWEzemQrMlJlUVg2OD0K,admin,admin,"system:masters"
TmZEdC9xRGNMTkl1cFN3V1NoTzl2UmlHU2l6ZFd0cFRXeDkybndWcnljTT0K,system:kube-proxy,kube-proxy
V2kyeVVtdjVkdFRKcFBJOXNFZVpjUkZZUVQ1cmV2WnloRG80NW00ZGlnYz0K,system:node:ubuntu2004,kubelet-0,"system:nodes"
QXBma2JxeFRQZDJ0amthaGpiNGxuNy9OZVdPYmtDYVFVall5MEhTUFhtTT0K,system:kube-controller-manager,controller
N3cyTmkzbXJqUzU5WU9RdWtVVzAwQ0NqN2dsd3FJNkZ6NWs4NFhWSmJYUT0K,system:kube-scheduler,scheduler
Ara pots verificar l'estat del clúster amb l'ordre següent:
# microk8s.kubectl cluster-infoHauries d'obtenir el resultat següent:
Kubernetes control plane is running at https://127.0.0.1:16443
Metrics-server is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
CoreDNS is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
Crea un desplegament
A continuació, implementarem una aplicació de microbot al clúster de Kubernetes. Per implementar una aplicació de microbot, executa l'ordre següent:
# microk8s.kubectl create deployment microbot --image=dontrebootme/microbot:v1Un cop desplegat, ho pots comprovar amb l'ordre següent:
# microk8s.kubectl get pods --all-namespacesHauries d'obtenir el resultat següent:
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system metrics-server-8bbfb4bdb-c5rf8 1/1 Running 0 14m
kube-system calico-kube-controllers-847c8c99d-bp8mp 1/1 Running 0 19m
kube-system calico-node-ftb5n 1/1 Running 1 19m
kube-system kubernetes-dashboard-7ffd448895-88hnf 1/1 Running 0 14m
kube-system dashboard-metrics-scraper-6c4568dc68-868tr 1/1 Running 0 14m
kube-system coredns-86f78bb79c-9jlzx 1/1 Running 0 14m
default microbot-5f5499d479-vjt5d 1/1 Running 0 20s
Ara pots escalar el desplegament amb l'ordre següent:
# microk8s.kubectl scale deployment microbot --replicas=5A continuació, verifica totes les rèpliques amb l'ordre següent:
# microk8s.kubectl get pods -n defaultHauries d'obtenir el resultat següent:
NAME READY STATUS RESTARTS AGE
microbot-5f5499d479-vjt5d 1/1 Running 0 56s
microbot-5f5499d479-qtmbd 1/1 Running 0 15s
microbot-5f5499d479-tzdvl 1/1 Running 0 15s
microbot-5f5499d479-422cc 1/1 Running 0 15s
microbot-5f5499d479-mq7mn 1/1 Running 0 15s
Ara, exposa la implementació amb l'ordre següent:
# microk8s.kubectl expose deployment microbot --type=NodePort --port=80 --name=microbot-serviceA continuació, confirma el desplegament amb l'ordre següent:
# microk8s.kubectl get all --all-namespacesHauries de veure el resultat següent:
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system pod/metrics-server-8bbfb4bdb-c5rf8 1/1 Running 0 15m
kube-system pod/calico-kube-controllers-847c8c99d-bp8mp 1/1 Running 0 20m
kube-system pod/calico-node-ftb5n 1/1 Running 1 20m
kube-system pod/kubernetes-dashboard-7ffd448895-88hnf 1/1 Running 0 15m
kube-system pod/dashboard-metrics-scraper-6c4568dc68-868tr 1/1 Running 0 15m
kube-system pod/coredns-86f78bb79c-9jlzx 1/1 Running 0 15m
default pod/microbot-5f5499d479-vjt5d 1/1 Running 0 102s
default pod/microbot-5f5499d479-qtmbd 1/1 Running 0 61s
default pod/microbot-5f5499d479-tzdvl 1/1 Running 0 61s
default pod/microbot-5f5499d479-422cc 1/1 Running 0 61s
default pod/microbot-5f5499d479-mq7mn 1/1 Running 0 61s
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default service/kubernetes ClusterIP 10.152.183.1 443/TCP 20m
kube-system service/metrics-server ClusterIP 10.152.183.211 443/TCP 15m
kube-system service/kubernetes-dashboard ClusterIP 10.152.183.62 443/TCP 15m
kube-system service/dashboard-metrics-scraper ClusterIP 10.152.183.248 8000/TCP 15m
kube-system service/kube-dns ClusterIP 10.152.183.10 53/UDP,53/TCP,9153/TCP 15m
default service/microbot-service NodePort 10.152.183.138 80:32163/TCP 14s
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kube-system daemonset.apps/calico-node 1 1 1 1 1 kubernetes.io/os=linux 20m
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system deployment.apps/metrics-server 1/1 1 1 15m
kube-system deployment.apps/calico-kube-controllers 1/1 1 1 20m
kube-system deployment.apps/kubernetes-dashboard 1/1 1 1 15m
kube-system deployment.apps/dashboard-metrics-scraper 1/1 1 1 15m
kube-system deployment.apps/coredns 1/1 1 1 15m
default deployment.apps/microbot 5/5 5 5 102s
NAMESPACE NAME DESIRED CURRENT READY AGE
kube-system replicaset.apps/metrics-server-8bbfb4bdb 1 1 1 15m
kube-system replicaset.apps/calico-kube-controllers-847c8c99d 1 1 1 20m
kube-system replicaset.apps/kubernetes-dashboard-7ffd448895 1 1 1 15m
kube-system replicaset.apps/dashboard-metrics-scraper-6c4568dc68 1 1 1 15m
kube-system replicaset.apps/coredns-86f78bb79c 1 1 1 15m
default replicaset.apps/microbot-5f5499d479 5 5 5 102s
Com pots veure, el servei Microbot s'inicia i escolta al port 32163.
Pots verificar-ho amb l'ordre següent:
# curl http://localhost:32163Hauries de veure el resultat següent:
<!DOCTYPE html>
<html>
<style type=“text/css”>
.centered
{
text-align:center;
margin-top:0px;
margin-bottom:0px;
padding:0px;
}
</style>
<body>
<p class=“centered”><img src=“microbot.png” alt=“microbot”/></p>
<p class=“centered”>Container hostname: microbot-5f5499d479-qtmbd</p>
</body>
</html>També hi pots accedir mitjançant l'URL http://su-servidor-ip:32163/. Hauries de veure la pàgina següent:
Si vols aturar el clúster en qualsevol moment, executa l'ordre següent:
# microk8s.stop Pots tornar a iniciar-lo amb l'ordre següent:
# microk8s.startConclusió
Enhorabona! Has configurat correctament un clúster de Kubernetes d'un sol node amb MicroK8s.
Ara pots desplegar i escalar la teva aplicació al clúster de Kubernetes.