В этом уроке мы рассмотрим, как собираются услуги и развертывания, и веб -приложение WordPress работает.
К концу этого урока у нас будет
После создания объектов службы и развертывания я нашел еще одну серьезную проблему. Я скептически относился к тому, написать ли это или написать вместе с решением проблемы. Тем не менее, я хотел показать это, поскольку я верил, что мы хотим понять, какую цель удовлетворяет каждый отдельный компонент.
Шуш! Шуш! Вернемся к нашей теме. Поскольку мы понимаем стручки, развертывания и услуги, я перейду к манифестной части.
DB-Service.yaml
---
apiVersion: v1
kind: Service
metadata:
name: wpdb-service
labels:
app: wordpress
type: db-service
spec:
selector:
app: wordpress
type: db
ports:
- protocol: TCP
port: 3306
targetPort: 3306
clusterIP: None
.spec.selector Вы видите выше, будет соответствовать .spec.template.metadata.labels — что создает связь между сервисом и стручками в развертывании
DB-развертка. YAML
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-db
labels:
app: wordpress
type: db-deployment
spec:
replicas: 2
selector:
matchLabels:
app: wordpress
type: db
template:
metadata:
name: wordpress-db
labels:
app: wordpress
type: db
spec:
containers:
- name: wordpress-db-container
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: DEVOPS1
- name: MYSQL_DATABASE
value: wpdb
- name: MYSQL_USER
value: wpuser
- name: MYSQL_PASSWORD
value: DEVOPS12345
ports:
- containerPort: 3306
name: mysql
В верхнем DB-развертании. YAML всегда будут созданы и поддерживаются 2 реплики DB POD. .spec.selector.matchlabels и .spec.template.metadata.labels должен соответствовать развертыванию для поддержания стручков. Мы прошли переменные среды для настройки базы данных, и мы будем использовать их для подключения к WordPress для подключения к БД.
Ниже я объединил услугу и развертывание для приложения WordPress в одном YAML.
App.yaml
---
apiVersion: v1
kind: Service
metadata:
name: app-service
labels:
app: wordpress
type: app-service
spec:
selector:
app: wordpress
type: app
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-app
labels:
app: wordpress
type: wordpress-deployment
spec:
replicas: 3
selector:
matchLabels:
app: wordpress
type: app
template:
metadata:
name: wordpress-app
labels:
app: wordpress
type: app
spec:
containers:
- name: wordpress-app
image: wordpress
env:
- name: WORDPRESS_DB_HOST
value: wpdb-service
- name: WORDPRESS_DB_NAME
value: wpdb
- name: WORDPRESS_DB_USER
value: wpuser
- name: WORDPRESS_DB_PASSWORD
value: DEVOPS12345
ports:
- containerPort: 80
name: wordpress
В разделе ENV контейнер WordPress для WordPress_db_host Я дал название сервиса БД, которая является WPDB-Service (найдено в метаданных сервисах БД). Другие переменные среды совпадают с соответствующими переменными ENV контейнера MySQL.
Как только эти Yamls применяются, давайте проверим это.
kubectl get pods NAME READY STATUS RESTARTS AGE wordpress-app-556fbb7c44-67frw 1/1 Running 0 2d12h wordpress-app-556fbb7c44-mkh75 1/1 Running 0 2d12h wordpress-app-556fbb7c44-t4m4m 1/1 Running 0 2d12h wordpress-db-d9949b65d-6d2xr 1/1 Running 0 101m wordpress-db-d9949b65d-jk7sb 1/1 Running 0 101m kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE wordpress-app 3/3 3 3 2d12h wordpress-db 2/2 2 2 102m kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE app-service LoadBalancer 10.101.181.25580:30195/TCP 2d12h kubernetes ClusterIP 10.96.0.1 443/TCP 4d1h wpdb-service ClusterIP 10.111.171.206 3306/TCP 25h
Мы видим, что стручки и развертывания работают и работают. В Сервисе (приложение-сервис) я отмечаю, что приложение работает на порту 30195.
Теперь я могу получить доступ к веб -приложению через свой браузер — набрав любое из имени сервера узлов (мастера или двух работников) с портом.
Предполагая, что имя узла — ABC.DEF.com, а порт, как видно выше, 30195, тип abc.def.com:30195
Я могу получить доступ к веб -приложению и могу увидеть
Если переменные среды WordPress и стручков MySQL не совпадают надлежащим образом, между двумя стручками не будет никакой связи, и, следовательно, мы увидим ниже:
Возвращаясь, я закончил начальную настройку или конфигурацию WordPress и пытаюсь войти в систему
Вуаля, у меня есть проблема, о которой я говорил в начале. Я снова отправлен на ту же страницу.
Я копался и обнаружил, что среди двух стручков это случайным образом выбирает один. Итак, причина, по которой я вернул меня, заключалась в том, что когда я пытался войти в систему, он перешел в другой стручок. Теперь, если бы стручки были подключены к хранилищу и установили его, фактические данные, доступные обеими стручками, будут одинаковыми.
Нам нужно решение, чтобы исправить это, которое мы рассмотрим на следующий пост в серии.
На более легкой ноте мы смогли бы достичь того же самого с стручками и услугами, а не в развертывании.
Но это не решает необходимости использования Kubernetes. Любая нормальная связь с контейнером с использованием Docker будет казаться чем -то подобным.
Оригинал: «https://dev.to/preethamsathyamurthy/kubernetes-services-and-deployments-coming-together-4cld»