
В процессе запуска очередного небольшого проекта на kubernetes у меня накопилось немного небольших заметок которыми я с радостью с вами поделюсь. Возможно они кому-то и пригодятся.
Резервное копирование баз данных Mysql сервера запущенного в POD-е
В принципе так можно и любую команду выполнить.
$ kubectl exec mysql-787fcf954-z5vk2 -- mysqldump --all-databases --password=xxxPasswordxxx > ./base_mysql_dump.sql
Создание секрета для хранения ключей и сертификатов для https Ingress
# kubectl create secret tls prod-pikur-art --key /etc/letsencrypt/live/pikur.art/privkey.pem --cert /etc/letsencrypt/live/pikur.art/fullchain.pem --namespace pikur-art-web
В виде Yaml-описания.
apiVersion: v1
data:
tls.crt: Base64 cert
tls.key: Base64.key
kind: Secret
metadata:
name: prod-pikur-art
namespace: pikur-art-web
type: kubernetes.io/tls
Модификация сервисов LoadBalancer и Ingress для работы с несколькими внешними адресами
Ingress
# kubectl patch svc ingress-nginx-controller -n ingress-nginx -p '{"spec": {"type": "LoadBalancer", "externalIPs":["185.173.93.43","185.133.42.139"]}}'
NodePort
# kubectl patch svc postgresql-nodeport -n databases -p '{"spec": {"type": "LoadBalancer", "externalIPs":["185.173.93.43","185.133.42.139"]}}'
Копирование файла с хоста в POD
# kubectl cp ./dump.sql mysql-5d56cdff4b-vms9j:/tmp/
Проброс портов
Проброс портов до POD-а
$ kubectl port-forward pods/wordpress-5f77f77f6d-6l9mj 8080:80
Проброс портов до сервиса
$ kubectl port-forward service/service-wordpress 8080:80
Внутренняя DNS-адресация в рамках кластера Kubernetes
Внутри пода смотрим какие DNS-имена предоставляет наш кластер.
# cat /etc/resolv.conf
search anton-c-web-stage.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.96.0.10
options ndots:5
Для доступа к сервису service-wordpress в namespace anton-c-web-stage получается адрес:
# nslookup service-wordpress.anton-c-web-stage.svc.cluster.local
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: service-wordpress.anton-c-web-stage.svc.cluster.local
Address: 10.105.154.136
;; Got recursion not available from 10.96.0.10
Для доступа к сервису mysql в namespace databases получается адрес:
# nslookup mysql.databases.svc.cluster.local
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: mysql.databases.svc.cluster.local
Address: 10.102.93.55
;; Got recursion not available from 10.96.0.10
Пример Ingress-контроллера
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wordpress-ingress
namespace: anton-c-web-stage
annotations:
nginx.ingress.kubernetes.io/proxy-buffer-size: "32k"
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/proxy-connect-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-body-size: "512m"
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/from-to-www-redirect: "true"
spec:
tls:
- secretName: prod-anton-c
rules:
- host: "stage.anton-c.ru"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service-wordpress
port:
number: 80