В этом уроке мы рассмотрим, как собираются услуги и развертывания, и веб -приложение 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»