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»