Gitlab CI - K8s - Развертывание

Просто просматриваю это руководство по gitlab и k8s gitlab-k8s-cd, но моя сборка не работает в этой части:

- kubectl delete secret registry.gitlab.com
- kubectl create secret docker-registry registry.gitlab.com --docker-server=https://registry.gitlab.com --docker-username=<my_username> --docker-password=$REGISTRY_PASSWD --docker-email=<my_email>

Хотя я не совсем уверен, какой пароль необходим для --docker-password, я создал токен API в gitlab для своего пользователя и использую его в безопасных переменных.

Это ошибка:

$ gcloud container clusters get-credentials deployment
Fetching cluster endpoint and auth data.
kubeconfig entry generated for deployment.
$ kubectl delete secret registry.gitlab.com
Error from server: secrets "registry.gitlab.com" not found
ERROR: Build failed: exit code 1

Любая помощь будет высоко ценится спасибо.

РЕДАКТИРОВАТЬ

Поскольку первоначальный пост, удалив начальный kubectl delete secret и восстановление сработало, так что не удалось удалить, когда не было предыдущего секрета.

Второй Править

Возникли проблемы с моим deploy.yml для K8s, кто-нибудь может пролить свет на то, почему я получаю эту ошибку:

error validating "deployment.yml": error validating data: field spec.template.spec.containers[0].ports[0]: expected object of type map[string]interface{},

С этим yml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: <app>
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: <app>
    spec:
      containers:
      - name: deployment
        image: registry.gitlab.com/<username>/<app>
        imagePullPolicy: Always
        ports:
        - "80:8080"
        env:
        - name: PORT
          value: "8080"
      imagePullSecrets:
        - name: registry.gitlab.com

И эта ошибка:

error validating "deployment.yml": error validating data: found invalid field imagePullSecrets for v1.Container; if you choose to ignore these errors, turn validation off with --validate=false

С этим yml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: <app>
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: <app>
    spec:
      containers:
      - name: <app>
        image: registry.gitlab.com/<project>/<app>
        imagePullPolicy: Always
        ports:
        - "80:8080"
        env:
        - name: PORT
          value: "8080"
      imagePullSecrets:
        - name: registry.gitlab.com

Последний YAML

apiVersion: v1
kind: Service
metadata:
  name: <app_name>
  labels:
    app: <app_name>
spec:
  ports:
    - port: 80
  selector:
    app: <app_name>
    tier: frontend
  type: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: <app_name>
  labels:
    app: <app_name>
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: <app_name>
        tier: frontend
    spec:
      containers:
      - image: registry.gitlab.com/<project>/<app>
        imagePullPolicy: Always
        name: <app_name>
        env:
        - name: PORT
          value: "8080"
        imagePullSecrets:
        - name: registry.gitlab.com
        ports:
          - containerPort: 8080
            hostPort: 80

2 ответа

По поводу вашей первой ошибки:

Порты определяются в Kubernetes иначе, чем в Docker или Docker Compose. Вот так должна выглядеть спецификация порта:

ports:
  - containerPort: 8080
    hostPort: 80

Смотрите ссылку для получения дополнительной информации.

По поводу вашей второй ошибки:

Согласно ссылке на PodSpecs, imagePullSecrets свойство правильно размещено в вашем примере. Однако после прочтения сообщения об ошибке кажется, что вы на самом деле включили imagePullSecrets свойство в ContainerSpec, а не PodSpec.

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

Это рабочий файл YAML для K8s:

apiVersion: v1
kind: Service
metadata:
  name: <app_name>
  labels:
    app: <app_name>
spec:
  ports:
    - port: 80
  selector:
    app: <app_name>
    tier: frontend
  type: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: <app_name>
  labels:
    app: <app_name>
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: <app_name>
        tier: frontend
    spec:
      containers:
      - image: registry.gitlab.com/<project>/<app>:latest
        imagePullPolicy: Always
        name: <app_name>
        env:
        - name: PORT
          value: "8080"
        ports:
          - containerPort: 8080
            hostPort: 80
      imagePullSecrets:
        - name: registry.gitlab.com

Это рабочий файл gitlab-ci также:

image: docker:latest
services:
  - docker:dind

variables:
  DOCKER_DRIVER: overlay

stages:
  - package
  - deploy

docker-build:
  stage: package
  script:
  - docker build -t registry.gitlab.com/<project>/<app> .
  - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com
  - docker push registry.gitlab.com/<project>/<app>

k8s-deploy:
  image: google/cloud-sdk
  stage: deploy
  script:
  - echo "$GOOGLE_KEY" > key.json
  - gcloud auth activate-service-account --key-file key.json
  - gcloud config set compute/zone <zone>
  - gcloud config set project <project>
  - gcloud config set container/use_client_certificate True
  - gcloud container clusters get-credentials <container-name>
  - kubectl delete secret registry.gitlab.com
  - kubectl create secret docker-registry registry.gitlab.com --docker-server=https://registry.gitlab.com --docker-username=<username> --docker-password=$REGISTRY_PASSWD --docker-email=<user-email>
  - kubectl apply -f deployment.yml

Просто нужно разобраться, как изменить скрипт, чтобы можно было откатиться назад.

Другие вопросы по тегам