Артефакты для установки Istio компонентов#

Для установки Istio компонентов альтернативным способом с помощью Jenkins Job InstallerIstioSE (описанного в подразделе «Pipelines» раздела «Дополнительная документация» текущего документа) необходимы следующие артефакты:

  • Образ операционной системы, содержащий kubectl;

  • Дистрибутив, содержащий helm chart c шаблоном Kubernetes ресурса Job;

  • Стендозависимые параметры в каталоге проекта в репозитории стендозависимых параметров;

Образ операционной системы, содержащий kubectl#

Для сборки образа необходима следующая структура репозитория:

  • Каталог docker, в котором находится Dockerfile для сборки образа;

  • Каталог kubectl, в котором находится бинарный файл kubectl;

repo_structure1
Рисунок. Структура репозитория

Содержимое Dockerfile

# базовый образ
FROM registry.domain.ru/sbt_dev/ci90000051_synai_dev/istio_se_dev/base:1.12-dev
# копировать в рабочую директорию
COPY kubectl/kubectl /usr/local/bin
# полномочия на выполнение и версия kubectl
RUN chmod +x /usr/local/bin/kubectl \
&& kubectl version --client

Дистрибутив, содержащий helm chart c шаблоном Kubernetes ресурса Job#

Для сборки дистрибутива в репозитории необходим каталог со структурой helm chart. Каталог обязан содержать файл values.yaml (регулируется параметром helmValuesFileName в репозитории настроек SMDL). В этом файле необходимо наличие параметра component_type с типом компоненты: job (имя параметра и список допустимых значений регулируется соответствующими параметрами в репозитории настроек SMDL: componentTypeField и availableHelmComponentsType). В подкаталоге templates должен находиться шаблон Kubernetes ресурса Job - job.yaml

repo_structure2
Рисунок. Структура каталога с helm chart

Содержимое values.yaml

component_type: "job"
configPath: "/etc/config"

Содержимое job.yaml

kind: Job
apiVersion: batch/v1
metadata:
  name: {{ .Release.Name }}-job
  namespace: {{ .Release.Namespace }}
spec:
  template:
    spec:
      volumes:
        - name: configmap-volume
          configMap:
            name: {{ .Release.Name }}-configmap
            defaultMode: 0700
      serviceAccountName: {{ .Values.serviceAccountName }}
      imagePullSecrets:
        - name: {{ .Values.imagePullSecretName }}
      containers:
        - name: {{ .Release.Name }}-container
          image: {{ .Values.registry }}/sbt/ci90000017_synapse/ci90000017_synapse/rhel7-java-synapse-devopsk8s-ci90000017:0.1.0.3
          command: ["bin/bash", "-c"]
          args:
            - >
              date &&
              echo Hi!... &&
              kubectl apply -f {{ .Values.configPath }}
          volumeMounts:
            - name: configmap-volume
              mountPath: {{ .Values.configPath }}
              readOnly: true
      restartPolicy: Never

Стендозависимые параметры в каталоге проекта в репозитории стендозависимых параметров#

Стендозависимые параметры формируются, согласно структуре стендозависимых параметров (подробнее в "Структура исходного кода, конфигурации приложения" в разделe «Дополнительная документация» текущего документа)

sdp_structure
Рисунок. Структура стендозависимых параметров

Пример default.yaml

serviceAccountName: "sa-smdl-sy-devops-istio"
imagePullSecretName: "os-image-pull-secret"
registry: "registry.domain.ru"
configPath: "/etc/config"

Сборка образа и дистрибутива#

Сборка образа и дистрибутива осуществляется с помощью Jenkins Job SynapseBuilder (описанного в подразделе «Pipelines» раздела «Дополнительная документация» текущего документа). За публикацию в реестр образов и в репозиторий хранения артефактов отвечают флаги: needsPublishToRegistry, needsPublishToNexus.