【问题标题】:Kubernetes Continuous deployment stage in Gitlab Online failsGitlab Online 中的 Kubernetes 持续部署阶段失败
【发布时间】:2018-07-11 14:15:05
【问题描述】:

我正在使用 Gitlab CI online、Kubernetes 和 docker 设置云 DevOps 部署管道。我正在关注 Continous delivery of a spring boot application with Gitlab CI and kubernetesKubectl delete/create secret forbidden (Google cloud platform) 的示例帖子。

在下面找到我的 .gitlab-ci.yml 文件的源代码

image: docker:latest
services:
  - docker:dind

variables:
  DOCKER_DRIVER: overlay
  SPRING_PROFILES_ACTIVE: gitlab-ci

stages:
  - build
  - package
  - deploy

maven-build:
  image: maven:3-jdk-8
  stage: build
  script: "mvn package -B"
  artifacts:
    paths:
      - target/*.jar

docker-build:
  stage: package
  script:
  - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com
  - docker build -t registry.gitlab.com/username/mta-hosting-optimizer .
  - docker push registry.gitlab.com/username/mta-hosting-optimizer

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 europe-west1-c
  - gcloud config set project mta-hosting-optimizer
  - gcloud config unset container/use_client_certificate
  - gcloud config set container/use_client_certificate True
  - gcloud container clusters get-credentials mta-hosting-optimizer
  - kubectl create -f admin.yaml --validate=false
  - kubectl create clusterrolebinding serviceaccounts-cluster-admin--clusterrole=cluster-admin --group=system:serviceaccounts
  - 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=email@email.com
  - kubectl apply -f deployment.yml

下一行部署失败

  - kubectl create -f admin.yaml --validate=false

此失败时显示的错误信息如下:

error: error converting YAML to JSON: yaml: mapping values are not allowed in this context
ERROR: Job failed: exit code 1

admin.yaml 文件来源如下:

apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard labels: k8s-app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: kubernetes-dashboard namespace: kube-system

可以找到 Maven 构建和 Docker 构建/打包阶段。这是唯一失败的阶段。我将感谢大家帮助解决这个问题。 非常感谢。

【问题讨论】:

  • 您使用的是什么版本的 Kubernetes?您能否重新格式化您的 admin.yaml 文件内容,因为空格和换行符对于 YAML 格式很重要?
  • 另外,使用--validate=false很少很好地结束

标签: docker kubernetes gitlab kubectl


【解决方案1】:

您遇到了 YAML 验证错误。这意味着您的 YAML 格式不正确。

您很可能希望以这种方式格式化您的 admin.yaml 文件:

apiVersion: rbac.authorization.k8s.io/v1beta1 
kind: ClusterRoleBinding 
metadata: 
    name: kubernetes-dashboard 
    labels: 
        k8s-app: kubernetes-dashboard
    namespace: kube-system
roleRef: 
  apiGroup: rbac.authorization.k8s.io 
  kind: ClusterRole 
  name: cluster-admin 
subjects: 
- kind: ServiceAccount 
  name: kubernetes-dashboard 

另外:正如 Matthew L Daniel 已经 pointed out 一样,您不应该禁用 YAML 文件的验证。

【讨论】:

  • 非常感谢@bn4t。我将在您格式化并稍后传达结果时应用它。我最初并没有禁用验证,但是在我不断收到错误并看到有人建议这样做之后。
  • 感谢您的帮助,但是我收到以下错误:来自服务器的错误(禁止):机密“registry.gitlab.com”被禁止:用户“客户端”无法删除命名空间“默认”中的机密“:未知用户“客户端”来自服务器的错误(禁止):机密被禁止:用户“客户端”无法在命名空间“默认”中创建机密:未知用户“客户端”
  • 似乎您正在尝试使用似乎不存在的帐户应用此 yaml(因此没有正确的权限)。您必须查看有关如何管理授权的 Kubernetes 文档(例如,此处使用 RBAC:kubernetes.io/docs/reference/access-authn-authz/rbac)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 2020-08-03
  • 1970-01-01
相关资源
最近更新 更多