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»