K3s — установка Stateful приложения с базой данных
24 мая 2023
22 минуты
Наш эксперт Михаил Сергеев подготовил подробный материал (в двух форматах: статья и видеоурок), в этом уроке:
K3s - это легковесный дистрибутив Kubernetes, разработанный компанией Rancher Labs. K3s был создан для того, чтобы предоставить простой и удобный способ установки, использования и управления Kubernetes.
K3s потребляет меньше оперативной памяти и меньше CPU, чем полноценная установка Kubernetes. Он имеет небольшой размер (устанавливается всего за 30 секунд одной командой и сразу готов к работе) и может быть запущен на различных устройствах, например, Raspberry Pi. K3s можно легко масштабировать на несколько нод (node).


Также выкладываю ссылку на список Ингрессов — смотреть
Теперь установим Nginx с помощью заранее подготовленного скрипта.
####### INSTALL Nginx HELM
mkdir /home/ms/helms -p
cd /home/ms/helms
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm pull ingress-nginx/ingress-nginx
tar zxf ingress-nginx-4.6.0.tgz
rm ingress-nginx-4.6.0.tgz -f
cp ingress-nginx/values.yaml ingress-nginx-values.yaml
vi ingress-nginx-values.yaml
helm upgrade --install ingress-nginx -f ingress-nginx-values.yaml ingress-nginx/
kubectl patch svc ingress-nginx-controller -p '{"spec":{"externalTrafficPolicy":"Local"}}'
k edit cm ingress-nginx-controller
data:
use-forwarded-headers: 'true'
kr ingress-nginx-controller
#############################
Затем устанавливаем cert-manager, также с помощью заранее подготовленного скрипта.
####### INSTALL CERTMANAGER HELM
mkdir /home/ms/helms -p
cd /home/ms/helms
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm pull jetstack/cert-manager
tar zxf cert-manager-*.tgz
rm cert-manager-*.tgz -f
cp cert-manager/values.yaml cert-manager-values.yaml
helm upgrade --install cert-manager -f cert-manager-values.yaml cert-manager/ --set installCRDs=true
mkdir /home/ms/ci/ -p
cd /home/ms/ci
cat << \EOF > cert-manager-issuer.yaml
---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
email: mail@msergeev.ru
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
EOF
ka cert-manager-issuer.yaml
#############################
Ещё есть такая вещь, как Portainer — это платформа для управления доставкой контейнерных приложений, которая может использоваться для управления средами Docker, Docker Swarm, Kubernetes и ACI. С помощью неё через веб-интерфейс можно управлять кластером Kubernetes, смотреть логи подов, зайти в консоль. Ему будет необходим Volumes в котором будут храниться его данные.
Volumes — инструмент, отключающий привязку данных к жизненному циклу контейнера, позволяя получить доступ к контейнерным данным в любой момент. Таким образом, сделанные в контейнерах записи остаются доступными после уничтожения содержавшего их контейнера и могут повторно использоваться в других.
####### INSTALL PORTAINER mkdir /data/ -p chmod 777 -R /data/ mkdir -p /data/volumes/portainer chmod 777 /data/volumes/portainer mkdir /home/ms/pvc -p cd /home/ms/pvc cat << \EOF > portainerpv.yml --- kind: PersistentVolume apiVersion: v1 metadata: name: portainer namespace: default labels: type: local spec: storageClassName: local-path capacity: storage: 20Gi accessModes: - ReadWriteOnce hostPath: path: "/data/volumes/portainer" ... EOF ka portainerpv.yml cd /home/ms/pvc cat << \EOF > portainerpvc.yml --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: portainer namespace: default spec: storageClassName: local-path accessModes: - ReadWriteOnce resources: requests: storage: 20Gi ... EOF ka portainerpvc.yml mkdir /home/ms/helms -p cd /home/ms/helms ### portainer helm repo add portainer https://portainer.github.io/k8s/ helm repo update helm pull portainer/portainer tar zxf portainer-* rm portainer-* -f cp portainer/values.yaml portainer-values.yaml vi portainer-values.yaml #### !!!!! Change NodePort to ClusterIP cd /home/ms/helms helm upgrade --install portainer -f portainer-values.yaml portainer/ mkdir /home/ms/ingress/ -p cd /home/ms/ingress cat << \EOF > portainer-ingress.yaml --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: portainer-ingress namespace: default annotations: nginx.ingress.kubernetes.io/whitelist-source-range: 78.47.67.129/32 cert-manager.io/cluster-issuer: letsencrypt-prod spec: rules: - host: portainer.194.126.162.54.sslip.io http: paths: - path: / pathType: Prefix backend: service: name: portainer port: number: 9000 ingressClassName: nginx tls: - hosts: - portainer.194.126.162.54.sslip.io secretName: portainer-ssl EOF ka portainer-ingress.yaml url: portainer.194.126.162.54.sslip.io login: ms pass: Cfeg65vd3rDSer3tr34111111111ddf ####################################
Она устанавливается автоматически совместно с WordPress из одного хелма (helm). Почитать её описание можно на официальном сайте https://mariadb.org/.