Я использую fabric8.io для оркестровки контейнеров приложений в Kubernetes. Я хочу создать службу, которая управляет модулем с определенной меткой на определенном порту. Есть ли конкретный пример API, который это делает. Я не нашел в примерах

https://github.com/fabric8io/kubernetes-client/blob/master/kubernetes-examples/src/main/java/io/fabric8/kubernetes/examples/FullExample.java#L75

Кажется, нет доступных javadocs ???

3
user_mda 27 Окт 2015 в 18:50

3 ответа

Лучший ответ

Клиент Kubernetes Fabric8 использует сгенерированную модель и DSL, который имеет точную структуру, что и конфигурация JSON и YAML.

Итак, чтобы создать экземпляр службы, который выглядит так:

 {
   "kind": "Service",
   "apiVersion": "v1",
   "metadata": {
       "name": "myservice"
   },
   "spec": {
       "ports": [
           {
              "protocol": "TCP",
              "port": 80,
              "targetPort": 8080,
          }
      ],
      "selector": {
          "key": "value1",
      },¬
      "portalIP": "172.30.234.134",
      "type": "ClusterIP",
  }

}

Вы можете использовать следующий код:

Service service = new ServiceBuilder()
          .withNewMetadata()
              .withName("myservice")
          .endMetadata()
          .withNewSpec()
            .addNewPort()
              .withProtocol("TCP")
              .withPort(80)
              .withNewTargetPort(8080)
            .endPort()
            .addToSelector("key1", "value1")
            .withPortalIP("172.30.234.134")
            .withType("ClusterIP")
          .endSpec()
          .build();

Если вам не нужно хранить ссылку на служебный объект, и вы просто хотите его создать, вы можете встроить его следующим образом:

client.services().createNew()
          .withNewMetadata()
              .withName("myservice")
          .endMetadata()
          .withNewSpec()
            .addNewPort()
              .withProtocol("TCP")
              .withPort(80)
              .withNewTargetPort(8080)
            .endPort()
            .addToSelector("key1", "value1")
            .withPortalIP("172.30.234.134")
            .withType("ClusterIP")
          .endSpec()
          .done();

Он даже более компактен, чем эквивалент JSON, потому что значение по умолчанию может быть зафиксировано, а также некоторые вещи, такие как селектор, могут быть дополнительно встроены в одну строку.

Это относится не только к Сервису, но и ко всем ресурсам Kubernetes / Openshift.

Если у вас есть JSON или YAML, вы можете легко загрузить их, предоставив клиенту входной поток:

Service service = client.services().load(inputStream).get();

Здесь есть больше возможностей, например, создание сервиса напрямую:

Service newService = client.services().load(inputStream).create();

Всегда полезно помнить, что структура всегда одна и та же, независимо от языка и формата. Практически все может быть встроено, поэтому завершение табуляции в вашей среде IDE может быть действительно полезным.

6
iocanel 2 Ноя 2015 в 16:55

Если вы не знаете тип ресурса (модуль, служба, развертывание и т. Д.), Который вы создаете, вы можете использовать

client.load(inputStream).createOrReplaceAnd();

Он создаст или обновит созданный ресурс.

ПРИМЕЧАНИЕ. Если вы определяете создание нескольких ресурсов в одном файле yaml и с последней версией клиента kubernetes, вы сможете создать только первый ресурс.

Используя панель управления kubernetes или kubectl, вы сможете создать несколько ресурсов, перечисленных в одном файле yaml.

0
Rishi Anand 22 Ноя 2017 в 07:22

Я использую ту же библиотеку, и вы правы, в отделе создания документов немного не хватает. Мне пришлось использовать Eclipse, чтобы изучить API вручную, потому что я тоже не мог найти никакого объяснения этому. Вот как это работает.

KubernetesClient client = new KubernetesClient(masterURL);
Service serv = (Service) KubernetesHelper.loadJson(serviceJson);
Service result = client.services().create(serv);

По сути, вы используете KubernetesClient для создания всех объектов. У него будут методы (службы, контроллеры репликации и т. Д.) Для каждого объекта и любые действия, связанные с ними. Вторая строка загружает ваш файл определения службы или String в объект Service. Затем вы используете клиент для создания объекта в Kubernetes.

Объект KubernetesHelper может загружать yaml или json. Вы также можете использовать объект ServiceBuilder для его программного построения.

РЕДАКТИРОВАТЬ: И, посмотрев назад ответы с тегами kubernetes, я обнаружил это в вопросе, который задает в основном то же самое: пример развертывания образа докера на кубернетах из java

3
Community 23 Май 2017 в 10:34