如何使用Gitlab+Kubernetes将某些内容部署到特定的(例如,测试)命名空间?我遵循了Gitlab文档,但在部署时找不到如何选择特定的命名空间。
这个.gitlab-ci.yml文件..。
stages:
- deploy
deploy:
stage: deploy
tags: [local]
environment:
name: test
kubernetes:
namespace: test
script:
- kubectl config get-contexts
- kubectl apply -f nginx.yaml
- kubectl get pods --namespace deploy-2-test
- kubectl apply -f nginx.yaml --namespace test...produces这个结果:
on rap N37D1QxB
Preparing the "shell" executor 00:00
Using Shell executor...
Preparing environment 00:00
... [everything fine until here]
Executing "step_script" stage of the job script 00:00
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* gitlab-deploy gitlab-deploy gitlab-deploy deploy-2-test
$ kubectl apply -f nginx.yaml
deployment.apps/nginx-deployment created
$ kubectl get pods --namespace deploy-2-test
NAME READY STATUS RESTARTS AGE
nginx-deployment-66b6c48dd5-4lx4s 0/1 ContainerCreating 0 0s
nginx-deployment-66b6c48dd5-dcpcr 0/1 ContainerCreating 0 0s
$ kubectl apply -f nginx.yaml --namespace test
Error from server (Forbidden): error when retrieving current configuration of:
Resource: "apps/v1, Resource=deployments", GroupVersionKind: "apps/v1, Kind=Deployment"
Name: "nginx-deployment", Namespace: "test"
from server for: "nginx.yaml": deployments.apps "nginx-deployment" is forbidden: User "system:serviceaccount:deploy-2-test:deploy-2-test-service-account" cannot get resource "deployments" in API group "apps" in the namespace "test"
Cleaning up file based variables 00:00
ERROR: Job failed: exit status 1--namespace包含在部署命令中,则无权部署。nginx部署是经典一。如何部署到测试命名空间?为什么以及如何生成名称空间Deploy2-test?
发布于 2021-05-23 02:10:40
找到解决方案:在Gitlab集群定义页面中禁用选项GitLab-managed cluster。
摘录自输出:
...
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* gitlab-deploy gitlab-deploy gitlab-deploy test
$ kubectl apply -f nginx.yaml
deployment.apps/nginx-deployment created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-66b6c48dd5-55m6p 0/1 ContainerCreating 0 0s
nginx-deployment-66b6c48dd5-vbhtc 0/1 ContainerCreating 0 0s
Cleaning up file based variables
Job succeeded实际上,deploy.environment.kubernetes.namespace是定义最终的k8s命名空间的一个。
发布于 2021-05-23 15:21:58
我不是百分之百确定,但是设置environment:kubernetes:namespace设置可能不会改变您当前的上下文。它只将该值应用于KUBE_NAMESPACE环境变量。
如果您想确保始终可以在脚本中使用--namespace $KUBE_NAMESPACE。这也是我们所做的,以防止任何上下文问题与我们的脚本。
发布于 2022-08-16 09:17:37
根据说明,在- kubectl配置获取上下文之后,脚本中缺少- kubectl配置使用上下文行。有了这个,-命名空间就适合我了。
https://stackoverflow.com/questions/67647630
复制相似问题