如何从 Gitlab-ci 部署到多个 kubernetes 命名空间?
How to Deploy from Gitlab-ci to multiple kubernetes namespaces?
我有两个变量包含我的命名空间名称:
$KUBE_NAMESPACE_DEV ="stellacenter-dev"
$KUBE_NAMESPACE_STAGE "stellacenter-stage-uat"
现在我想修改以下 .gitlab-ci.yaml 配置以包含命名空间逻辑:
deploy_dev:
stage: deploy
image: stellacenter/aws-helm-kubectl
before_script:
- aws configure set aws_access_key_id ${DEV_AWS_ACCESS_KEY_ID}
- aws configure set aws_secret_access_key ${DEV_AWS_SECRET_ACCESS_KEY}
- aws configure set region ${DEV_AWS_DEFAULT_REGION}
script:
- sed -i "s/<VERSION>/${CI_COMMIT_SHORT_SHA}/g" provider-service.yml
- mkdir -p $HOME/.kube
- cp $KUBE_CONFIG_DEV $HOME/.kube/config
- chown $(id -u):$(id -g) $HOME/.kube/config
- export KUBECONFIG=$HOME/.kube/config
- kubectl apply -f ./provider-service.yml
only:
- developer
提供-service.yml文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: provider-app
namespace: "stellacenter-dev" or "stellacenter-stage-uat"
labels:
app: provider-app
spec:
replicas: 1
selector:
matchLabels:
app : provider-app
template:
metadata:
labels:
app: provider-app
spec:
containers:
- name: provider-app
image: registry.gitlab.com/stella-center/backend-services/provider-service:<VERSION>
imagePullPolicy: Always
ports:
- containerPort: 8092
imagePullSecrets:
- name: gitlab-registry-token-auth
---
apiVersion: v1
kind: Service
metadata:
name: provider-service
namespace: "stellacenter-dev" "stellacenter-stage-uat"
spec:
type: NodePort
selector:
app: provider-app
ports:
- port: 8092
targetPort: 8092
我不知道如何正确整合变量和值。我在 运行 pipeline.Kindly 帮助我解决问题时遇到了错误。
apply命令上面加一行
- export KUBECONFIG=$HOME/.kube/config
- kubectl apply -f ./provider-service.yml
使用 sed 你可以将相应的变量替换到 YAML 文件中
sed -i "s, NAMESPACE,$KUBE_NAMESPACE_DEV," Provide-service.yml
在 YAML 文件中保持类似
的内容
apiVersion: v1
kind: Service
metadata:
name: provider-service
namespace: NAMESPACE
spec:
type: NodePort
您可以保留一个变量而不是两个用于命名空间管理,但是使用 sed 可以将命名空间设置到 YAML 中并应用该 YAML。
虽然在你的 repo 中它会像一个模板,当 CI 将 运行 NAMESPACE 将被 sed 命令替换并且 YAML 将被应用到 k8s。因此,您也可以保留其他内容作为模板,并根据需要用 sed 替换它们。
apiVersion: v1
kind: Service
metadata:
name: SERVICE_NAME
namespace: NAMESPACE
spec:
type: SERVICE_TYPE
您可以从清单中删除 namespace: NAMESPACE
,然后使用命令行在命名空间中应用资源。
- kubectl apply -f ./provider-service.yml -n ${KUBE_NAMESPACE_DEV}
- kubectl apply -f ./provider-service.yml -n ${KUBE_NAMESPACE_STAGE}
我有两个变量包含我的命名空间名称:
$KUBE_NAMESPACE_DEV ="stellacenter-dev"
$KUBE_NAMESPACE_STAGE "stellacenter-stage-uat"
现在我想修改以下 .gitlab-ci.yaml 配置以包含命名空间逻辑:
deploy_dev:
stage: deploy
image: stellacenter/aws-helm-kubectl
before_script:
- aws configure set aws_access_key_id ${DEV_AWS_ACCESS_KEY_ID}
- aws configure set aws_secret_access_key ${DEV_AWS_SECRET_ACCESS_KEY}
- aws configure set region ${DEV_AWS_DEFAULT_REGION}
script:
- sed -i "s/<VERSION>/${CI_COMMIT_SHORT_SHA}/g" provider-service.yml
- mkdir -p $HOME/.kube
- cp $KUBE_CONFIG_DEV $HOME/.kube/config
- chown $(id -u):$(id -g) $HOME/.kube/config
- export KUBECONFIG=$HOME/.kube/config
- kubectl apply -f ./provider-service.yml
only:
- developer
提供-service.yml文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: provider-app
namespace: "stellacenter-dev" or "stellacenter-stage-uat"
labels:
app: provider-app
spec:
replicas: 1
selector:
matchLabels:
app : provider-app
template:
metadata:
labels:
app: provider-app
spec:
containers:
- name: provider-app
image: registry.gitlab.com/stella-center/backend-services/provider-service:<VERSION>
imagePullPolicy: Always
ports:
- containerPort: 8092
imagePullSecrets:
- name: gitlab-registry-token-auth
---
apiVersion: v1
kind: Service
metadata:
name: provider-service
namespace: "stellacenter-dev" "stellacenter-stage-uat"
spec:
type: NodePort
selector:
app: provider-app
ports:
- port: 8092
targetPort: 8092
我不知道如何正确整合变量和值。我在 运行 pipeline.Kindly 帮助我解决问题时遇到了错误。
apply命令上面加一行
- export KUBECONFIG=$HOME/.kube/config
- kubectl apply -f ./provider-service.yml
使用 sed 你可以将相应的变量替换到 YAML 文件中
sed -i "s, NAMESPACE,$KUBE_NAMESPACE_DEV," Provide-service.yml
在 YAML 文件中保持类似
的内容apiVersion: v1
kind: Service
metadata:
name: provider-service
namespace: NAMESPACE
spec:
type: NodePort
您可以保留一个变量而不是两个用于命名空间管理,但是使用 sed 可以将命名空间设置到 YAML 中并应用该 YAML。
虽然在你的 repo 中它会像一个模板,当 CI 将 运行 NAMESPACE 将被 sed 命令替换并且 YAML 将被应用到 k8s。因此,您也可以保留其他内容作为模板,并根据需要用 sed 替换它们。
apiVersion: v1
kind: Service
metadata:
name: SERVICE_NAME
namespace: NAMESPACE
spec:
type: SERVICE_TYPE
您可以从清单中删除 namespace: NAMESPACE
,然后使用命令行在命名空间中应用资源。
- kubectl apply -f ./provider-service.yml -n ${KUBE_NAMESPACE_DEV}
- kubectl apply -f ./provider-service.yml -n ${KUBE_NAMESPACE_STAGE}