Kubernetes - Kubus
Kubernetes, známý také jako K8s, je open-source systém pro automatizované deploymenty, škálování a správu kontejnerizovaných aplikací.
Přístup
Platforma je určena pro primárně pro menší skupiny skupiny, které vyžadují individuální přístup nebo dlouhý běh specifických cloud native služeb.
Pro získání přistupu zasílejte následující informace na adresu metasupport@rt.cesnet.cz
- Název skupiny a její členové,
- průvodní zpráva,
- požadavky na zdroje.
Webovová konzole běží na adrese https://dashboard.kubus.metacentrum.cz/. Token pro CLI je možné získat zde https://kube-config.kubus.meta.zcu.cz/.
HW
- 2x Intel(R) Xeon(R) Silver 4214 CPU @ 2.20GHz (12 jader kazdy)
- 256G RAM, 3T storage
Služby v clusteru
- https://kubernetes.github.io/ingress-nginx/
- https://cert-manager.io/docs/ cluster-issuer
letsencrypt-prod
(omezený počet žádostí)letsencrypt-staging
(pro testovací učely)
- storageclass
csi-rbd-sc
(default) - ceph-rbd poskytnuté z DUlonghorn
- lokální storage kubernetes nodů
- loadbalancer dedikované IP
- 78.128.242.77-78.128.242.88
Základní konzolové operace
Lze použít imperativní i deklarativní správu objektů. Popíšeme pouze deklarativní přistup.
kubectl get all # vypise vsechny objekty v namespace kubectl get pod # vypise vsechny pody kubectl create -f object.yaml # vyrobi objekt podle definice v souboru kubectl apply -f object.yaml # aplikuje zmeny v objektu, nebo ho vyrobi, pokud neexistuje kubectl diff -f object.yaml # vypise zmeny v souboru oproti aktualnimu stavu kubectl logs pod-id # vypise logy podu kubectl decribe pod pod-id # vypise metadata k podu
Příklady
nginx.yaml
--- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 lifecycle: postStart: exec: command: ["/bin/sh", "-c", "echo $HOSTNAME > /usr/share/nginx/html/hostname.html"]
pvc.yaml
--- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: rbd-pvc1 spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 5Gi
service.yaml
--- apiVersion: v1 kind: Service metadata: name: service1 spec: selector: app: nginx ports: - protocol: TCP port: 80
ingress.yaml
--- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: service1 annotations: cert-manager.io/cluster-issuer: letsencrypt-prod spec: ingressClassName: nginx tls: - hosts: - service1.kubus.meta.zcu.cz secretName: service1-tls defaultBackend: service: name: service1 port: number: 80 rules: - host: service1.kubus.meta.zcu.cz http: paths: - path: / pathType: Prefix backend: service: name: service1 port: number: 80
Tipy
kompose
Pro překlad Vašich existujících docker-compose.yaml
zkuste použít nástroj kompose
kustomization
Pokud potřebujete stagovat deployment, použijte nástroj kustomize
https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/
Do adresáře projektu deploymentu vytvořte soubor kustomization.yaml
s obsahem:
namespace: my-namespace namePrefix: devel- bases: - nginx.yaml - service.yaml - ingress.yaml
kubectl apply -k ./ # aplikuje zmeny v objektech, nebo je vyrobi, pokud neexistuji kubectl diff -k ./ # vypise zmeny v definicich oproti aktualnimu stavu