Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revisionBoth sides next revision
linux_faq:kubernetes_using_single_node_as_master_and_worker [2021/12/19 18:29] – [Ingress-controller] adminlinux_faq:kubernetes_using_single_node_as_master_and_worker [2022/04/23 17:26] – [Обновление kubernetes] admin
Line 56: Line 56:
   kubectl taint nodes --all node-role.kubernetes.io/master-   kubectl taint nodes --all node-role.kubernetes.io/master-
  
 +====== Настройка манифестов компонентво кубера на слабых маишинках ======
 +Я запускаю свой кластер в контейнере на сервере Proxmox,  на довольно слабой машинке, поэтому при старте компоненты кубера начинают отвечать очень нескоро. \\
 +Чтобы немного облегчить им жизнь и сделать поведение компонентов k8s более предсказуемым нужно увеличить таймауты **livenessProbe**, **readinessProbe** и **startupProbe** - в результате у сервисов будет больше времени чтобы прийти в норму при запуске/перезапуске и кластер будет вести себя стабильнее, особенно если в нем много полезной нагрузки. \\
 +Для этого - редактируем манифесты в директории **/etc/kubernetes/manifests/** и подкручиваем там значения до, например, таких: 
 +<code>
 +    livenessProbe:
 +      failureThreshold: 300
 +      initialDelaySeconds: 60
 +      periodSeconds: 15
 +      timeoutSeconds: 30
 +    readinessProbe:
 +      failureThreshold: 300
 +      periodSeconds: 15
 +      timeoutSeconds: 30
 +    startupProbe:
 +      failureThreshold: 300
 +      initialDelaySeconds: 60
 +      periodSeconds: 15
 +      timeoutSeconds: 30
 +</code>
 +И перезапускаем **kubelet**:
 +  sudo service kubelet restart
 ====== Изменение редактора kubectl edit ====== ====== Изменение редактора kubectl edit ======
   sudo awk -v line='export KUBE_EDITOR="/bin/nano"' 'FNR==NR && line==$0{f=1; exit} END{if (!f) print line >> FILENAME}' /etc/bash.bashrc   sudo awk -v line='export KUBE_EDITOR="/bin/nano"' 'FNR==NR && line==$0{f=1; exit} END{if (!f) print line >> FILENAME}' /etc/bash.bashrc
Line 106: Line 128:
 <code>  - --kubelet-insecure-tls</code> <code>  - --kubelet-insecure-tls</code>
 Без этого параметра metrics-server не запустится, а в логах будет примерно такое: Без этого параметра metrics-server не запустится, а в логах будет примерно такое:
-<<code>[unable to fully scrape metrics from node kub-worker01: unable to fetch metrics from node kub-sbl-apps-dev-worker01: Get "https://192.168.44.11:10250/stats/summary?only_cpu_and_memory=true": x509: cannot validate certificate for 192.168.44.11 because it doesn't contain any IP SANs </code>+<code>[unable to fully scrape metrics from node kub-worker01: unable to fetch metrics from node kub-sbl-apps-dev-worker01: Get "https://192.168.44.11:10250/stats/summary?only_cpu_and_memory=true": x509: cannot validate certificate for 192.168.44.11 because it doesn't contain any IP SANs </code>
 Все. Через некоторое время команды **kubectl top** начнут выдавать осмысленную информацию. \\ Все. Через некоторое время команды **kubectl top** начнут выдавать осмысленную информацию. \\
 Если этого не происходит, а в логах  Если этого не происходит, а в логах 
Line 126: Line 148:
 Проверяем возможность апгрейда: Проверяем возможность апгрейда:
   sudo kubeadm upgrade plan   sudo kubeadm upgrade plan
-Если у нас хост с **containerd** (без **docker**), то нужно учесть, что **kubeadm** понадобится **docker** для получения **images**. Поэтому временно ставим его: +Если у нас хост с **containerd** (без **docker**), то нужно проверить, что параметр **kubeadm.alpha.kubernetes.io/cri-socket** указывает не на **docker-shim**, а на сокет **containerd**. У меня так: 
-  sudo apt-get install docker.io+  kubeadm.alpha.kubernetes.io/cri-socket: /run/containerd/containerd.sock 
 +если этого не сделать - будет ошибка, поскольку **kubeadm** возьмет эту запись и будет пытаться работать через docker, которого нет
 +  error execution phase preflight: docker is required for container runtime: exec: "docker": executable file not found in $PATH
 Обновляем: Обновляем:
   sudo kubeadm upgrade apply v1.20.9   sudo kubeadm upgrade apply v1.20.9
Line 187: Line 211:
 В результате - в неймспейсе **ingress** появится сервис **nginx-ingress-nginx-controller**, у которого будет тип **LoadBalancer** и который получит указанный IP-адрес в локальной сети из диапазона, сконфигурированного для **metallb**. \\ В результате - в неймспейсе **ingress** появится сервис **nginx-ingress-nginx-controller**, у которого будет тип **LoadBalancer** и который получит указанный IP-адрес в локальной сети из диапазона, сконфигурированного для **metallb**. \\
 Теперь можно создавать **ingress**'ы, которые будут смотреть на сервисы внутри кластера и предоставлять к ним доступ. Пользователи будут посылать запросы на **ingress-controller**, а он, в свою очередь, - пересылать их на **ingress**'ы. Теперь можно создавать **ingress**'ы, которые будут смотреть на сервисы внутри кластера и предоставлять к ним доступ. Пользователи будут посылать запросы на **ingress-controller**, а он, в свою очередь, - пересылать их на **ingress**'ы.
 +==== Мониторинг nginx ingess ====
 +В кластере нужно развернуть **CRD** и оператор **prometheus**: https://wiki.autosys.tk/devops/prometheus_federation#%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0_prometheus \\
 +\\
 +**nginx-ingress-monitoring-values.yaml**
 +<code>
 +controller:
 +  metrics:
 +    port: 10254
 +    enabled: true
 +    service:
 +      annotations:
 +        prometheus.io/scrape: "true"
 +        prometheus.io/port: "10254"
 +      servicePort: 10254
 +      type: ClusterIP
  
 +    serviceMonitor:
 +      enabled: true
 +      additionalLabels:
 +        jobLabel: nginx-ingress
 +      namespace: "ingress"
 +      namespaceSelector:
 +        matchNames:
 +          - ingress
 +      scrapeInterval: 30s
 +
 +    prometheusRule:
 +      enabled: true
 +      namespace: ingress
 +      rules:
 +        - alert: NGINXConfigFailed
 +          expr: count(nginx_ingress_controller_config_last_reload_successful == 0) > 0
 +          for: 1s
 +          labels:
 +            severity: critical
 +          annotations:
 +            description: bad ingress config - nginx config test failed
 +            summary: uninstall the latest ingress changes to allow config reloads to resume
 +        - alert: NGINXCertificateExpiry
 +          expr: (avg(nginx_ingress_controller_ssl_expire_time_seconds) by (host) - time()) < 604800
 +          for: 1s
 +          labels:
 +            severity: critical
 +          annotations:
 +            description: ssl certificate(s) will expire in less then a week
 +            summary: renew expiring certificates to avoid downtime
 +        - alert: NGINXTooMany500s
 +          expr: 100 * ( sum( nginx_ingress_controller_requests{status=~"5.+"} ) / sum(nginx_ingress_controller_requests) ) > 5
 +          for: 1m
 +          labels:
 +            severity: warning
 +          annotations:
 +            description: Too many 5XXs
 +            summary: More than 5% of all requests returned 5XX, this requires your attention
 +        - alert: NGINXTooMany400s
 +          expr: 100 * ( sum( nginx_ingress_controller_requests{status=~"4.+"} ) / sum(nginx_ingress_controller_requests) ) > 5
 +          for: 1m
 +          labels:
 +            severity: warning
 +          annotations:
 +            description: Too many 4XXs
 +            summary: More than 5% of all requests returned 4XX, this requires your attention
 +</code>
 +
 +  helm upgrade --reuse-values -n ingress nginx ingress-nginx/ingress-nginx -f ./nginx-ingress-monitoring-values.yaml
 ===== Cert manager ===== ===== Cert manager =====
 https://docs.cert-manager.io/en/latest/tutorials/acme/quick-start/ https://docs.cert-manager.io/en/latest/tutorials/acme/quick-start/
Line 200: Line 288:
   --namespace cert-manager \   --namespace cert-manager \
   --create-namespace \   --create-namespace \
-  --version v1.5.4 +  --set installCRDs=true \ 
-  --set installCRDs=true+  --version v1.5.4
 </code> </code>
 https://docs.cert-manager.io/en/latest/tasks/issuers/index.html \\ https://docs.cert-manager.io/en/latest/tasks/issuers/index.html \\
  • linux_faq/kubernetes_using_single_node_as_master_and_worker.txt
  • Last modified: 2024/04/22 12:38
  • by admin