Kubernetes соединяют обслуживание и развертывание - PullRequest
0 голосов
/ 11 апреля 2020

Мне интересно, что нужно указать в отдельном развертывании, чтобы иметь доступ к развертыванию / службе БД. Вот развертывание / служба БД:

apiVersion: v1
kind: Service
metadata:
  name: oracle-db
  labels:
    app: oracle-db
spec:
  ports:
  - name: oracle-db
    port: 1521
    protocol: TCP
    targetPort: 1521
  selector:
    app: oracle-db
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: oracle-db-depl
  labels:
    app: oracle-db
spec:
  selector:
    matchLabels:
      app: oracle-db
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: oracle-db
    spec:
      containers:
      - name: oracle-db
        image: oracledb:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 1521
        env:
          ...

Как именно указать соединение в отдельном развертывании? Указывать ли где-нибудь имя службы oracle -db? Пока в контейнере я указываю containerPort.

Ответы [ 2 ]

2 голосов
/ 11 апреля 2020

Если другое развертывание приложения находится в том же пространстве имен, вы можете обратиться к службе oracle по oracle-db. Вот пример приложения для печати слов, использующего oracle.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: frontend
    spec:
      containers:
      - image: wordpress:4.8-apache
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: oracle-db
        ports:
        - containerPort: 80
          name: wordpress

. Как видите, oracle сервис упоминается oracle-db как переменная окружения.

Если служба находится в другом пространстве имен, чем развертывание приложения, вы можете ссылаться на нее как oracle-db.namespacename.svc.cluster.local

https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/

1 голос
/ 11 апреля 2020

Сервисы в Kubernetes - это «абстрактный способ представить приложение, работающее на наборе модулей, в качестве сетевой службы». ( документация k8s )

Вы можете получить доступ к вашему модулю по его IP-адресу и порту, который ему предоставил Kubernetes, но это не очень хорошая практика, так как блоки могут использовать d ie и еще один. будет создан (если контролируется Deployment / ReplicaSet). Когда будет создан новый, будет использоваться новый IP-адрес, и все в вашем приложении начнет давать сбой.

Чтобы решить эту проблему, вы можете выставить свой Pod, используя Сервис (как вы уже сделали), и используйте service-name:service-port назначенный Сервису для доступа к вашему Pod. В этом случае, даже если Pod умирает и создается новый, Kubernetes будет продолжать пересылать трафик c на правильный Pod.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...