Рубрики
kubernetes

kubernetes / minikube

ссылки:

www.youtube.com/watch?v=TwyhnBDOHPw
https://minikube.sigs.k8s.io/docs/handbook/
https://helm.sh/ru/docs/intro/install/

Примеры от selectel:
https://docs.selectel.ru/managed-kubernetes/clusters/connect-to-cluster/
https://docs.selectel.ru/managed-kubernetes/networks/set-up-ingress/
https://docs.selectel.ru/managed-kubernetes/networks/set-up-ingress/?install-ingress-controller=with-configuring-loadbalancer

Задачи Kubernetes:

0. Деплоймент
1. Самовосстановление
2. Управление
3. Масштабирование
4. Баланс трафика

Не задачи kubernetes:

Хранение данных
Хранение образов (registry)
Сборка образов
Сбор журналов и метрик

Общие понятия kubernetes:

master node - сервер или вм машина - головной центр управления - центр принятия решений
worker node - сервера или машины на которых запущены приложения, которыми управляет master noda

 master                    master                    master
  |                          |                         |
   --------------------------|--------------------------
  |                          |                         |
worker                    worker                      worker


В свою очередь в master node:
kubectl 
    |
api server --|-------------> scheduler
    |        | -----> etcd
    |
controller          
  manager


api server - именно с этим сервером абсолютно все общаются (you, etcd, scheduler, controller manager, node, pode, все и все) -
etcd - это база данных, ключ значение, в этой базе хранится все значения что мы делаем с kubernetes
scheduler - планировщик, тут принимается решения что куда деплоить
controller manager - запущенный процесс, который следит за тем что бы kubernetes это сделал

kubectl - через эту программу мы общаемся с "api server" (все управление kubernetes делается через нее)

controle plane - это общее название api server + etcd + scheduler + control manager



Deployment - это yaml файл в котором мы описывает что нам требуется от kubernetes 
ReplacaSet - подымает, следит за Pod (количество экземпляров, самовосстановление, желаемое состояние и т.д.)
Pod - собственно наши приложение (doker контейнер или контейнеры)



Трафик -> ingress controller -> node ->  kube-proxy (service.yaml) / kubelet -> pod 
ingress - внешний трафик
ingress controller - чаще всего это nginx, но также это может быть и haproxy и другое похожее ПО
service.yaml - собственно управляет как подключится к pod  (настройки для kube-proxy)

Просто файлы настроек:
deployment.yaml - для вашего приложения которое выбудете запускать в kubernetes
service.yaml - файл с настройками для вашего приложения которое задает настройки для вашего приложения в kube-proxy

kubelet - программа которая отвечает за разворачивание pod

StatefulSet - это приложения, которые не живут в контейнерах, например базы данных (postgres, kafka, redis, etc..)

DaemonSet - это приложения которое будет жить на каждой nod (например fluentd - сбор логов)


minikube

https://minikube.sigs.k8s.io/docs/start/?arch=%2Flinux%2Fx86-64%2Fstable%2Fbinary+download

curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64

minikube start - запуск kubernetes minikube
minikube dashboard - открыть дашборд minikube

kubectl

kubectl get nodes - показать доступные nod
kubectl get pods - показать запущенные pod
kubectl apply -f deployment.yaml - пример запуска приложения (в файле deployment.yaml настройки для нашего приложения для kubernetes)

Внешний kubernets:

0. Для внешних подключений к kubernetes:
export KUBECONFIG=$HOME/путь_до_конфига.yaml

1.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm inspect values ingress-nginx/ingress-nginx > values.yaml

2. 
Фрагмент манифеста с блоком annotations:
metadata:
  name: loadbalancer-name
  labels:
    app: nginx
  annotations:
    service.beta.kubernetes.io/openstack-internal-load-balancer: "true"


3. 
helm install ingress-nginx/ingress-nginx --generate-name -f values.yaml

Примеры файлов:

0. Создаем файл dokerfile, index.html, deployment.yaml, service.yaml:
cat > dockerfile << "EOF"
FROM nginx:alpine

# Копируем простую HTML страницу
COPY index.html /usr/share/nginx/html/

EXPOSE 80
EOF

cat > index.html << "EOF"
<!DOCTYPE html>
<html>
<head>
    <title>Hello World</title>
</head>
<body>
    <h1>Hello World from Kubernetes!</h1>
    <p>This is a simple web server running in a Docker container</p>
    <p>Server: <span id="server-info">Nginx</span></p>
    <p>Port: 80</p>
</body>
</html>
EOF


cat > deployment.yaml << "EOF"
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-world-app
  labels:
    app: hello-world
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-world
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
      - name: hello-world-container
        image: hello-world-app:latest
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "64Mi"
            cpu: "50m"
          limits:
            memory: "128Mi"
            cpu: "100m"
EOF



cat > service.yaml << "EOF"
apiVersion: v1
kind: Service
metadata:
  name: hello-world-service
spec:
  selector:
    app: hello-world
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 80
  type: LoadBalancer
EOF

Запуску:
docker build -t hello-world-app:latest .
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl get pods
Рубрики
kubernetes

k8s / k3s / kubernetes

debian 11 install k3s

0. Ставим пакеты:
apt install curl vim sudo 

1. Добавляем пользователя:
adduser k3s

2. Редактируем права:
visudo
------
k3s     ALL=(ALL) NOPASSWD: ALL
------

4. Установка k3s
su - k3s
export INSTALL_K3S_EXEC=" --no-deploy servicelb --no-deploy traefik"
KUBECTL=kubectl --kubeconfig ~/.kube/k3s-vm-config
curl -sfL https://get.k3s.io | sh -