Рубрики
Uncategorized

Kubernetes Services и развертывания собираются вместе

В этом уроке мы рассмотрим, как собираются услуги и развертывания, и слово … Tagged с учебником, Kubernetes, DevOps.

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