Uživatelské nástroje

Nástroje pro tento web


navody:vps:vpsadminos:kubernetes

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verze
Předchozí verze
Poslední revizeObě strany příští revize
navody:vps:vpsadminos:kubernetes [2020/11/23 23:43] snajpanavody:vps:vpsadminos:kubernetes [2021/10/29 11:52] – [Master] comment euro
Řádek 1: Řádek 1:
 ====== Kubernetes na vpsAdminOS ====== ====== Kubernetes na vpsAdminOS ======
 +<note important>Tento návod funguje iba pre Kubernetes 1.22.3 a staršie</note>
 ===== Prerekvizity ===== ===== Prerekvizity =====
-  * VPS musí bežať na vpsAdminOS na kerneli min. 5.9.10. V čase písania návodu je dostupný tento kernel iba na staging node+  * VPS musí bežať na vpsAdminOS na kerneli min. 5.9.10. V čase písania návodu je dostupný tento kernel iba na staging node (nebo Brno)
   * Postup je odskúšaný na fresh minimal Ubuntu 20.04   * Postup je odskúšaný na fresh minimal Ubuntu 20.04
   * Používame latest vanilla kubernetes   * Používame latest vanilla kubernetes
-  * Ako networking používame flannel s host-gw s internou sietou 10.244.0.0/16+  * Ako networking používame flannel s host-gw s internou sietou 10.244.0.0/16, na novejsim mi fungovala jen vxlan
   * Kubernetes si chce šahať do /sys a /proc. Hodnoty máme vo vpsAdminOS správne pre vpsAdminOS, preto mu iba nafakeujeme dané súbory aby si tam sám mohol zapísať. Vytvoríme aj fake service v systemd, aby sa pri štarte systému dané súbory správne namapovali.    * Kubernetes si chce šahať do /sys a /proc. Hodnoty máme vo vpsAdminOS správne pre vpsAdminOS, preto mu iba nafakeujeme dané súbory aby si tam sám mohol zapísať. Vytvoríme aj fake service v systemd, aby sa pri štarte systému dané súbory správne namapovali. 
   * **Inštalačný skript je rovnaký pre master aj worker nody**   * **Inštalačný skript je rovnaký pre master aj worker nody**
Řádek 48: Řádek 49:
 mount --bind overcommit_memory /proc/sys/vm/overcommit_memory mount --bind overcommit_memory /proc/sys/vm/overcommit_memory
  
-echo "Filename            Type     Size  Used  Priority" > swaps 
-mount --bind swaps /proc/swaps 
 mkdir block mkdir block
 mount -o bind block/ /sys/block/ mount -o bind block/ /sys/block/
 mount --make-rshared / mount --make-rshared /
- 
-mkdir -p netfilter/nf_log 
-mount --bind netfilter /proc/sys/net/netfilter/ 
-echo 327680 > netfilter/hashsize 
- 
-echo 1310720 > netfilter/nf_conntrack_max 
- 
-mkdir nf_conntrack_parameters 
-echo N > nf_conntrack_parameters/acct 
-echo 512 > nf_conntrack_parameters/expect_hashsize 
-echo 16384 > nf_conntrack_parameters/hashsize 
-echo N > nf_conntrack_parameters/nf_conntrack_helper 
-echo N > nf_conntrack_parameters/tstamp 
-chmod 666 -R nf_conntrack_parameters 
-chown nobody:nogroup -R nf_conntrack_parameters 
-mount -o bind nf_conntrack_parameters /sys/module/nf_conntrack/parameters/ 
 EOF EOF
  
Řádek 125: Řádek 108:
  
 wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
-sed -i 's/vxlan/host-gw/g' kube-flannel.yml+sed -i 's/vxlan/host-gw/g' kube-flannel.yml # Tento krok jsem musel preskocit, aby mit to fungovalo na Brnenskem VPS
 kubectl apply -f kube-flannel.yml kubectl apply -f kube-flannel.yml
 </code> </code>
Řádek 171: Řádek 154:
 vps3   Ready    master   32m   v1.19.4 vps3   Ready    master   32m   v1.19.4
 vps4   Ready    <none>   21m   v1.19.4 vps4   Ready    <none>   21m   v1.19.4
 +</code>
 +
 +== Post deploy nastaveni ==
 +=== Instalace Loadbalanceru ===
 +Je treba zmenit strictARP na true, viz https://metallb.universe.tf/installation/
 +<code>
 +kubectl edit configmap -n kube-system kube-proxy
 +
 +kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.3/manifests/namespace.yaml
 +kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.3/manifests/metallb.yaml
 +</code>
 +
 +Config pro loadbalancer
 +
 +<code>
 +apiVersion: v1
 +kind: ConfigMap
 +metadata:
 +  namespace: metallb-system
 +  name: config
 +data:
 +  config: |
 +    address-pools:
 +    - name: default
 +      protocol: layer2
 +      addresses:
 +      - apiVersion: v1
 +kind: ConfigMap
 +metadata:
 +  namespace: metallb-system
 +  name: config
 +data:
 +  config: |
 +    address-pools:
 +    - name: default
 +      protocol: layer2
 +      addresses:
 +      - 37.205.x.x/32 # IP addressa
 +</code>
 +
 +=== Ingress ===
 +U ingresu je treba zmenit servisu, co bere adresu z routeru, z NodePort na ClusterIP
 +
 +<code>
 +kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.4/deploy/static/provider/baremetal/deploy.yaml
 +kubectl edit service -n ingress-nginx ingress-nginx-controller
 +# edit type: NodePort -> type: LoadBalancer
 +</code>
 +
 +=== Cert manager ===
 +Pro automaticke vystavovani certifikatu
 +<code>
 +kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.6.0/cert-manager.yaml
 +</code>
 +
 +Nasledne je treba vytvorit issuer:
 +<code>
 +kind: ClusterIssuer
 +metadata:
 +  name: letsencrypt-prod
 +  namespace: cert-manager
 +spec:
 +  acme:
 +    # The ACME server URL
 +    server: https://acme-v02.api.letsencrypt.org/directory
 +    # Email address used for ACME registration
 +    email: email@email.com
 +    # Name of a secret used to store the ACME account private key
 +    privateKeySecretRef:
 +      name: letsencrypt-prod
 +    # Enable the HTTP-01 challenge provider
 +    solvers:
 +    - http01:
 +        ingress:
 +          class: nginx
 +</code>
 +
 +=== Dashboard ===
 +Pro otestovani muzeme nainstalovat napr dashboard.
 +
 +<code>
 +kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
 +</code>
 +
 +Dodatecne role + ingress pro dashboard
 +<code>
 +apiVersion: v1
 +kind: ServiceAccount
 +metadata:
 +  name: admin-user
 +  namespace: kubernetes-dashboard
 +---
 +apiVersion: rbac.authorization.k8s.io/v1
 +kind: ClusterRoleBinding
 +metadata:
 +  name: admin-user
 +roleRef:
 +  apiGroup: rbac.authorization.k8s.io
 +  kind: ClusterRole
 +  name: cluster-admin
 +subjects:
 +- kind: ServiceAccount
 +  name: admin-user
 +  namespace: kubernetes-dashboard
 +---
 +apiVersion: networking.k8s.io/v1
 +kind: Ingress
 +metadata:
 +  name: dashboard
 +  namespace: kubernetes-dashboard
 +  annotations:
 +    kubernetes.io/ingress.class: "nginx"
 +    cert-manager.io/cluster-issuer: "letsencrypt-prod"
 +    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
 +spec:
 +  tls:
 +  - hosts:
 +    - k8s.domain.tld
 +    secretName: k8s.domain.tld
 +  rules:
 +  - host: k8s.domain.tld
 +    http:
 +      paths:
 +      - path: /
 +        pathType: Prefix
 +        backend:
 +          service:
 +            name: kubernetes-dashboard
 +            port:
 +              number: 443
 </code> </code>