Рубрики
Uncategorized

#047 Kubernetes — приложение для голосования (пример)

ВВЕДЕНИЕ Это часть 47 из путешествия это долгий путь (360 день), так что иди, пожалуйста … Помечено с Kubernetes, DevOps, Tutorial.

Devopsjourney (54 серия деталей)

Это часть 47 из путешествия это долгий путь (360 день), так что иди, пожалуйста, проверьте предыдущие детали, и если вам нужно идти со мной в путешествии, пожалуйста, следуйте, потому что я могу опубликовать более одного раза в 1 день Но, конечно, я буду публиковать ежедневно, по крайней мере, один 😍.

И я буду охватывать множество инструментов по мере продвижения дальше.

Исходные файлы можно найти здесь

Dockersamples/Пример Voting-App

Пример Docker Compose App

Отредактированные файлы можно найти в моем репо Github здесь

Omarelkhatibcs/Devopsjourney

Это репо, где я буду хранить все коды, используемые в нашем путешествии на dev.to

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

Сначала давайте посмотрим на диаграмму, голосование и результат находятся в интерфейсе, поэтому нам нужно получить доступ к ним извне кластера, поэтому нам нужна служба Nodport для каждого из них, чтобы получить к нему доступ из-за пределов кластера. Для Redis и Postgresdb нам нужна услуга кластера, потому что он все еще находится внутри кластера. Если мы посмотрим на исходный код работника, мы увидим, что он подключится к каждой базе данных, используя свои услуги, и обновите голоса от Redis до Postgres. Таким образом, технически никто не обращается к работнику, поэтому нам не нужна услуга для него. Давайте сначала посмотрите на файлы конфигурации. Моя цель от просмотра файлов — запомнить все, о чем мы говорим.

# db-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: db
  name: db
spec:
  replicas: 1
  selector:
    matchLabels:
      app: db
  template:
    metadata:
      labels:
        app: db
    spec:
      containers:
      - image: postgres:9.4
        name: postgres
        env:
        - name: POSTGRES_USER
          value: postgres
        - name: POSTGRES_PASSWORD
          value: postgres
        ports:
        - containerPort: 5432
          name: postgres
        volumeMounts:
        - mountPath: /var/lib/postgresql/data
          name: db-data
      volumes:
      - name: db-data
        emptyDir: {} 

Это развертывание, поэтому его можно увеличить или вниз, метаданные являются описательными данными о развертывании самого самого, пространство имен является темой следующей части:), Спецификация примет спецификации о развертывании, нам нужна 1 копия Этот селектор POD мы будем использовать его, чтобы иметь доступ к нему, шаблон примет конфигурацию POD без Apiversion и Kind. Это для развертывания то же самое для других развертываний. Теперь давайте посмотрим на услуги.

# db-service.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: db
  name: db
spec:
  type: ClusterIP
  ports:
  - name: "db-service"
    port: 5432
    targetPort: 5432
  selector:
    app: db

Он потребует типа кластера (разрешающий доступ только из внутреннего кластера) и добрый сервис, а также порт и порт цели, который в данном случае является портом PostgresDB.

# result-service.yml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: result
  name: result
spec:
  type: NodePort
  ports:
  - name: "result-service"
    port: 5001
    targetPort: 80
    nodePort: 31001
  selector:
    app: result

Это сервис Nodeport, так что она будет принять в качестве дополнительного Nodeport, который является портом всего узла.

Теперь давайте создадим все эти файлы YML. Поскольку они все расположены в одной папке, мы можем передать имя папки, и он создаст их все.

kubectl create -f app_047
kubectl get pods

Мой последний контейнер все еще находится в течение 52 минут, потому что у меня есть лучшая связь в мире. Если мы перейдем к приложению, мы можем взаимодействовать с ним, но оно не будет обновлять на странице результатов, потому что работник еще не готов. Давайте взглянем

minikube ip

Мой IP — 192.168.99.100, и если мы посмотрим на файлы конфигурации Nodeports 31000 и 31001 (Я также могу получить их от Kubernetes), чтобы мы могли получить доступ к приложению из 192.168.99.100:31000 и 192.168.99.100:31001

Когда я голосую слева, результаты еще не обновлены, потому что работник еще не готов.

Теперь, когда работник заканчивает строительство, он все еще не обновляется, давайте расследуем его.

kubectl logs db-6789fcc76c-hvrs6 | tail

(Я удаляю развертывания и запускаю их в ходе расследования, поэтому имена изменены) DB-6789FCC76C-HVRS6-это имя DB Pod Tail-это команда Linux получит последние несколько строк ввода.

Мы видим, что это скажем, ошибка пароля И это потому, что изображение устарело, мы можем исправить его, создав новый и подтолкнуть его к Docker, это займет время и много изменений. Так что я собираюсь это исправить. Давайте начнем

kubectl exec db-6789fcc76c-hvrs6 -- bash

Сейчас мы находимся в корне, давайте установим Vim и отредактируем pg_hba.conf

apt update && apt install vim 

После того, как у нас установлен VIM, давайте отредактируем наш файл

vim /var/lib/postgresql/data/pg_hba.conf

Перейдите к последней строке и измените MD5, чтобы доверять нажмите I, чтобы ввести режим редактирования в VIM. После редактирования его нажмите ESC: WQ, чтобы сохранить и уйти. Теперь давайте получить доступ к оболочке Postgres, используя

su - postgres

Давайте перезагрузим наши конфигурации базы данных, используя

psql
SELECT pg_reload_conf();
\q

и \ q использовался, чтобы уйти тогда

exit
exit

Выйдите из выхода на первое избрание и выйти, чтобы выйти из второго Bash xd XD

kubectl logs db-6789fcc76c-hvrs6

Если мы прокрутите вниз, мы увидим, что теперь он обновлен и работает, давайте перейдем в браузер. Теперь это обновлено поздравляем, у нас есть полное приложение, развернутое: D Мы также видим, как мы можем устранения устранения наше приложение, удивительно, не так ли?

Devopsjourney (54 серия деталей)

Оригинал: «https://dev.to/elkhatibomar/047-kubernetes-voting-app-example-4j1»