Differences
This shows you the differences between two versions of the page.
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/07/16 08:39] – [Обновление kubernetes] admin | linux_faq:kubernetes_using_single_node_as_master_and_worker [2022/03/10 14:43] – [Мониторинг nginx ingess] admin | ||
---|---|---|---|
Line 56: | Line 56: | ||
kubectl taint nodes --all node-role.kubernetes.io/ | kubectl taint nodes --all node-role.kubernetes.io/ | ||
+ | ====== Настройка манифестов компонентво кубера на слабых маишинках ====== | ||
+ | Я запускаю свой кластер в контейнере на сервере Proxmox, | ||
+ | Чтобы немного облегчить им жизнь и сделать поведение компонентов k8s более предсказуемым нужно увеличить таймауты **livenessProbe**, | ||
+ | Для этого - редактируем манифесты в директории **/ | ||
+ | < | ||
+ | livenessProbe: | ||
+ | failureThreshold: | ||
+ | initialDelaySeconds: | ||
+ | periodSeconds: | ||
+ | timeoutSeconds: | ||
+ | readinessProbe: | ||
+ | failureThreshold: | ||
+ | periodSeconds: | ||
+ | timeoutSeconds: | ||
+ | startupProbe: | ||
+ | failureThreshold: | ||
+ | initialDelaySeconds: | ||
+ | periodSeconds: | ||
+ | timeoutSeconds: | ||
+ | </ | ||
+ | И перезапускаем **kubelet**: | ||
+ | sudo service kubelet restart | ||
====== Изменение редактора kubectl edit ====== | ====== Изменение редактора kubectl edit ====== | ||
sudo awk -v line=' | sudo awk -v line=' | ||
Line 106: | Line 128: | ||
< | < | ||
Без этого параметра metrics-server не запустится, | Без этого параметра metrics-server не запустится, | ||
- | << | + | < |
Все. Через некоторое время команды **kubectl top** начнут выдавать осмысленную информацию. \\ | Все. Через некоторое время команды **kubectl top** начнут выдавать осмысленную информацию. \\ | ||
Если этого не происходит, | Если этого не происходит, | ||
Line 165: | Line 187: | ||
#helm install stable/ | #helm install stable/ | ||
helm upgrade --install nginx -n ingress ingress-nginx/ | helm upgrade --install nginx -n ingress ingress-nginx/ | ||
- | --set controller.service.type=LoadBalancer, | + | --set controller.service.type=LoadBalancer, |
--set controller.addHeaders." | --set controller.addHeaders." | ||
--set controller.addHeaders." | --set controller.addHeaders." | ||
Line 178: | Line 200: | ||
helm upgrade --install nginx -n ingress ingress-nginx/ | helm upgrade --install nginx -n ingress ingress-nginx/ | ||
--set controller.service.type=LoadBalancer \ | --set controller.service.type=LoadBalancer \ | ||
- | --set controller.service.externalTrafficPolicy=Local \ | + | --set controller.service.externalTrafficPolicy=Cluster |
--set controller.service.loadBalancerIP=192.168.77.160 \ | --set controller.service.loadBalancerIP=192.168.77.160 \ | ||
--set controller.addHeaders." | --set controller.addHeaders." | ||
Line 187: | Line 209: | ||
В результате - в неймспейсе **ingress** появится сервис **nginx-ingress-nginx-controller**, | В результате - в неймспейсе **ingress** появится сервис **nginx-ingress-nginx-controller**, | ||
Теперь можно создавать **ingress**' | Теперь можно создавать **ingress**' | ||
+ | ==== Мониторинг nginx ingess ==== | ||
+ | В кластере нужно развернуть **CRD** и оператор **prometheus**: | ||
+ | \\ | ||
+ | **nginx-ingress-monitoring-values.yaml** | ||
+ | < | ||
+ | controller: | ||
+ | metrics: | ||
+ | port: 10254 | ||
+ | enabled: true | ||
+ | service: | ||
+ | annotations: | ||
+ | prometheus.io/ | ||
+ | prometheus.io/ | ||
+ | servicePort: | ||
+ | type: ClusterIP | ||
+ | |||
+ | serviceMonitor: | ||
+ | enabled: true | ||
+ | additionalLabels: | ||
+ | jobLabel: nginx-ingress | ||
+ | namespace: " | ||
+ | namespaceSelector: | ||
+ | matchNames: | ||
+ | - ingress | ||
+ | scrapeInterval: | ||
+ | |||
+ | 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: | ||
+ | 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: | ||
+ | summary: renew expiring certificates to avoid downtime | ||
+ | - alert: NGINXTooMany500s | ||
+ | expr: 100 * ( sum( nginx_ingress_controller_requests{status=~" | ||
+ | for: 1m | ||
+ | labels: | ||
+ | severity: warning | ||
+ | annotations: | ||
+ | description: | ||
+ | summary: More than 5% of all requests returned 5XX, this requires your attention | ||
+ | - alert: NGINXTooMany400s | ||
+ | expr: 100 * ( sum( nginx_ingress_controller_requests{status=~" | ||
+ | for: 1m | ||
+ | labels: | ||
+ | severity: warning | ||
+ | annotations: | ||
+ | description: | ||
+ | summary: More than 5% of all requests returned 4XX, this requires your attention | ||
+ | </ | ||
+ | helm upgrade --reuse-values -n ingress nginx -f ./ | ||
===== Cert manager ===== | ===== Cert manager ===== | ||
https:// | https:// | ||
Line 200: | Line 286: | ||
--namespace cert-manager \ | --namespace cert-manager \ | ||
--create-namespace \ | --create-namespace \ | ||
- | --version v1.4.0 \ | + | --version v1.5.4 \ |
--set installCRDs=true | --set installCRDs=true | ||
</ | </ | ||
Line 216: | Line 302: | ||
# certificates, | # certificates, | ||
email: mike@autosys.tk | email: mike@autosys.tk | ||
- | server: https:// | + | server: https:// |
privateKeySecretRef: | privateKeySecretRef: | ||
# Secret resource used to store the account' | # Secret resource used to store the account' | ||
Line 245: | Line 331: | ||
< | < | ||
https:// | https:// | ||
+ | https:// | ||
Итак, у нас установлен **MetalLB**, | Итак, у нас установлен **MetalLB**, | ||
В результате, | В результате, | ||
Line 277: | Line 364: | ||
В результате, | В результате, | ||
\\ | \\ | ||
- | Теперь нужно сконфигурировать **ACME Issuer** - это сущность, | + | Теперь нужно сконфигурировать **ACME Issuer** - это сущность, |
- | < | + | https:// |
+ | < | ||
+ | kubectl apply -f - << EOF | ||
+ | apiVersion: cert-manager.io/ | ||
kind: ClusterIssuer | kind: ClusterIssuer | ||
metadata: | metadata: | ||
name: letsencrypt | name: letsencrypt | ||
- | namespace: cert-manager | ||
spec: | spec: | ||
acme: | acme: | ||
Line 288: | Line 377: | ||
# Let's Encrypt will use this to contact you about expiring | # Let's Encrypt will use this to contact you about expiring | ||
# certificates, | # certificates, | ||
- | email: | + | email: |
- | server: https:// | + | server: https:// |
privateKeySecretRef: | privateKeySecretRef: | ||
- | # Secret resource used to store the account' | + | # Secret resource |
- | name: letsencrypt-cert-issuer-account-key | + | name: letsencrypt-issuer-account-key |
# Add a single challenge solver, HTTP01 using nginx | # Add a single challenge solver, HTTP01 using nginx | ||
solvers: | solvers: | ||
Line 298: | Line 387: | ||
ingress: | ingress: | ||
class: nginx | class: nginx | ||
+ | EOF | ||
</ | </ | ||
После того, как создан **Issuer** (в данном случае - **ClusterIssuer** с именем **letsencrypt**) можно добавить в манифест ингресса информацию о нем. Редактируем ресурс **Ingress** и приводим секцию **annotations** к виду: | После того, как создан **Issuer** (в данном случае - **ClusterIssuer** с именем **letsencrypt**) можно добавить в манифест ингресса информацию о нем. Редактируем ресурс **Ingress** и приводим секцию **annotations** к виду: |