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/22 08:49] tomsnavody: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.10-rc4. 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+  * 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. 
   * **Inštalačný skript je rovnaký pre master aj worker nody**   * **Inštalačný skript je rovnaký pre master aj worker nody**
  
Řádek 16: Řádek 18:
 apt-get update apt-get update
 apt-get install -y docker-ce iptables arptables ebtables apt-get install -y docker-ce iptables arptables ebtables
- 
  
 wget -q https://storage.googleapis.com/golang/getgo/installer_linux wget -q https://storage.googleapis.com/golang/getgo/installer_linux
Řádek 22: Řádek 23:
 ./installer_linux ./installer_linux
 source /root/.bash_profile source /root/.bash_profile
- 
  
 update-alternatives --set iptables /usr/sbin/iptables-legacy update-alternatives --set iptables /usr/sbin/iptables-legacy
Řádek 49: Řá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 126: Řá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 135: Řádek 117:
 </code> </code>
  
 +Vysledok by mal vyzerat cca:
 +<code>
 +# kubectl --namespace=kube-system get pods
 +NAME                               READY   STATUS    RESTARTS   AGE
 +coredns-f9fd979d6-f9v99            1/1     Running            12m
 +coredns-f9fd979d6-v7w2x            1/1     Running            12m
 +etcd-vps3                          1/1     Running            12m
 +kube-apiserver-vps3                1/1     Running            12m
 +kube-controller-manager-vps3       1/    Running            12m
 +kube-flannel-ds-zbc47              1/1     Running            12m
 +kube-proxy-7zvc5                   1/    Running            12m
 +kube-scheduler-vps3                1/1     Running            12m
 +</code>
 +
 +=== Master ako worker ===
 Ak chceme aby aj master node slúžil ako worker, môžeme ho pridať: Ak chceme aby aj master node slúžil ako worker, môžeme ho pridať:
 <code> <code>
Řádek 153: Řádek 150:
 Na master node môžeme sledovať stav nodov: Na master node môžeme sledovať stav nodov:
 <code> <code>
-kubectl get nodes+kubectl get nodes 
 +NAME   STATUS   ROLES    AGE   VERSION 
 +vps3   Ready    master   32m   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>