gitlab的ci/cd发布项目隐藏帐号密码(3)
- UID
- 1066743
|
gitlab的ci/cd发布项目隐藏帐号密码(3)
例子
deploy_live:
image: lachlanevenson/k8s-kubectl:latest
stage: deploy
environment:
name: live
url: https://live-presentation-gitlab-k8s.edenmal.net
only:
- tags
when: manual
script:
- kubectl version
- cd manifests/
- sed -i "s/__CI_BUILD_REF_SLUG__/${CI_ENVIRONMENT_SLUG}/" deployment.yaml ingress.yaml service.yaml
- sed -i "s/__VERSION__/${CI_COMMIT_REF_NAME}/" deployment.yaml ingress.yaml service.yaml
- kubectl apply -f deployment.yaml
- kubectl apply -f service.yaml
- kubectl apply -f ingress.yaml
- kubectl rollout status -f deployment.yaml
- kubectl get all,ing -l app=${CI_ENVIRONMENT_SLUG}
方式二configmap
configmap实际上就是一系列键值对,存储于etcd里。etcd的官网有这样一句话:
etcd是一个高性能的分布式键值对存储库,用于存储和访问关键数据。
使用下面的命令行创建一个Kubernetes config map:
kubectl create configmap test-config --from-literal=test.type=unit --from-literal=test.exec=always
创建一个名为test-config的键值对,key为test.type,值为unit,key为test.exec, 值为always。
下面我打算创建一个pod,消费这个名为test-config的configmap。
创建一个内容如下的yaml文件:
apiVersion: v1
kind: Pod
metadata:
name: test-configmap
spec:
containers:
- name: test-container
image: alpine:3.8
command: [ "/bin/sh", "-c", "env" ]
env:
- name: TEST_TYPE
valueFrom:
configMapKeyRef:
name: test-config
key: test.type
- name: TEST_EXEC
valueFrom:
configMapKeyRef:
name: test-config
key: test.exec
restartPolicy: Never
这个yaml文件定义的pod基于docker镜像alpine,执行shell命令/bin/sh -c env查看环境变量。
在env区域,我给该pod注入一个名为TEST_TYPE的环境变量,值从configMap键值对的键名称为test.type的值中取。
kubectl create -f 创建这个pod
使用命令kubectl logs test-configmap查看这个pod运行生成的日志,发现输出的环境变量列表中,出现了TEST_TYPE=unit,这个TEST_TYPE是我在yaml文件里注入的环境变量名称,而unit就来自configmap里test-config的值unit。
方式三envsubst
在deploy.yml中:
LoadbalancerIP: $LBIP
然后只需创建你的env var并像这样运行kubectl:
export LBIP="1.2.3.4"
envsubst < deploy.yml | kubectl apply -f -
您只需将常规Bash变量放入您想要使用的任何文件中,在本例中为YAML清单,并且确保读取该文件.它将输出文件,其env变量由其值替换.您还可以使用它来创建这样的新文件:
envsubst < input.yml > output.yml
envsubst可在例如Ubuntu / Debian gettext包. |
|
|
|
|
|