Skip to content

mcdodik20008/k8s-test

Repository files navigation

Включаем кубер в настройках доккера

  • Enable Kubernetes

Устанавливаем kubectl

winget install -e --id Kubernetes.kubectl

проверяем установку

kubectl version --client

Еще можно чекнуть ~/.kube

Настраиваем UI

Kubernetes Dashboard

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

Dashboard требует аутентификации. Создадим пользователя с ролью ClusterAdmin. dashboard-admin.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin
  namespace: kubernetes-dashboard

И применим его

kubectl apply -f dashboard-admin.yaml

Выдадим ему роли dashboard-admin-role.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin
  namespace: kubernetes-dashboard

Применим его

kubectl apply -f dashboard-admin-role.yaml

Получим токен для входа

kubectl -n kubernetes-dashboard create token admin

Прокидываем порт

kubectl proxy

и подключаемся

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

Можно подключить отображение метрик подов (пока не подключал)

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

Разберемся с имагесами

Нужно залогиниться в доккере

docker login

Создать образы - можно использовать мой компоуз файл docker-compose.yml docker-compose build --no-cache, только подмени в images мой ник на свой

image: mcdodik2008/k8s-mastery-frontend

да и вообще создай репозитории в доккер хабе с таким же именем, как и имагесы контейнеров и лупани

docker push mcdodik2008/k8s-mastery-frontend

Имагесы должны появиться в доккер хабе, тогда кубернатес сможет их выкачать и запустить (у меня не получилось подсунуть ему локальные образы)

У нас есть образы, давай запилим подик

Под для фронтенда

frontend.yaml

apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
    - name: frontend
      image: mcdodik2008/k8s-mastery-frontend
      ports:
        - containerPort: 80

Заходим в UI и чекаем жива ли пода или пишем

kubectl get pods

Если пода жива, то давай прокинем порт из кубера в наружу, например займем 88 порт

kubectl port-forward -n default frontend 88:80

Давайте перед входом во фронтс добавим лоад балансер

Лоадбалансер

frontend-lb-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: frontend-lb
spec:
  type: LoadBalancer
  ports:
    - port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: frontend

применим манифест, теперь на 80 порту у нас сидит лоадбалансер и переадресует запрос в наш фронтенд на 80 порт. Прокидывать порт уже не нужно.

Деплоймент юниты

Дак как же масштабировать подики frontend-dep.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
spec:
  selector:
    matchLabels:
      app: frontend
  replicas: 3
  minReadySeconds: 15
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
        - name: frontend
          image: mcdodik2008/k8s-mastery-frontend:latex
          imagePullPolicy: Always
          ports:
            - containerPort: 80
kubectl apply -f frontend-dep.yaml

Предположим нам нужно поменять что-то на фронтсе Обновляем образ в доккер хабе Меняем версию образа в файлике переапплаим деплоймент юнит Желаетльео использовать флаг --record что бы он запомнил предыдущую версию

kubectl apply -f frontend-dep.yaml --record

Можно чекнуть историю

kubectl rollout status deployment frontend

Откатить версию можно так

kubectl rollout undo deployment frontend --to-revision=1

Раскатим все остальные депы (logic-dep, webapp-dep)

лоадбалансер для webapp

apiVersion: v1
kind: Service
metadata:
  name: web-app-lb
spec:
  type: LoadBalancer
  ports:
    - port: 81
      protocol: TCP
      targetPort: 8080
  selector:
    app: web-app

и роут для обращения к логике

apiVersion: v1
kind: Service
metadata:
  name: logic
spec:
  ports:
    - port: 80
      protocol: TCP
      targetPort: 5000
  selector:
    app: logic

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published