2017-01-06 9 views
0

только собирается это руководство по gitlab и K8S gitlab-k8s-cd, но моя сборка держит неудачу в этой части:Gitlab CI - K8S - Развертывание

- 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 

Любая помощь была бы оценена спасибо.

EDIT

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

Второй Редактировать

Имея проблемы с deployment.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 

ответ

1

Что касается вашей первой ошибки:

порты определяются по-разному в Kubernetes, чем в Докер или Докер Compose. Это как спецификация порта должна выглядеть следующим образом:

ports: 
    - containerPort: 8080 
    hostPort: 80 

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

Что касается вашей второй ошибки:

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

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

+0

Спасибо, я думаю, что это проблема с моим файлом YAML, который вызывает проблемы, но для Kubernetes все еще новичок, пытаясь понять разные компоненты. Это то, к чему я сейчас пытаюсь работать (поставит основной вопрос). – mchaffe

0

Это рабочий файл 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 

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