如何通过 k8s gitlab-ci runner 将某些东西部署到 k8s 集群?
How can I deploy something to a k8s cluster via a k8s gitlab-ci runner?
cat /etc/redhat-release:
CentOS Linux release 7.2.1511 (Core)
docker版本:
Client:
Version: 1.13.1
API version: 1.26
Package version: <unknown>
Go version: go1.8.3
Git commit: 774336d/1.13.1
Built: Wed Mar 7 17:06:16 2018
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: <unknown>
Go version: go1.8.3
Git commit: 774336d/1.13.1
Built: Wed Mar 7 17:06:16 2018
OS/Arch: linux/amd64
Experimental: false
kubectl 版本:
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.5", GitCommit:"f01a2bf98249a4db383560443a59bed0c13575df", GitTreeState:"clean", BuildDate:"2018-03-19T15:59:24Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.0", GitCommit:"925c127ec6b946659ad0fd596fa959be43f0cc05", GitTreeState:"clean", BuildDate:"2017-12-15T20:55:30Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
gitlab 版本:10.6-ce
gitlab runner 图片: gitlab/gitlab-runner:alpine-v10.3.0
我只是将一个kubernetes集群(不是GKE,只是自己部署的一个k8s集群)集成到一个gitlab项目中,然后在上面安装了一个gitlab-runner。
所有这些,都遵循 Adding an existing Kubernetes cluster。
之后,我添加了一个 .gitlab-ci.yml
和一个单一的阶段,并将其推送到 repo。内容如下:
build-img:
stage: docker-build
script:
# - docker build -t $CONTAINER_RELEASE_IMAGE .
# - docker tag $CONTAINER_RELEASE_IMAGE $CONTAINER_LATEST_IMAGE
# - docker push $CONTAINER_IMAGE
- env | grep KUBE
- kubectl --help
tags:
- kubernetes
only:
- develop
然后我得到了这个:
$ env | grep KUBE
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
$ kubectl --help
/bin/bash: line 62: kubectl: command not found
ERROR: Job failed: error executing remote command: command terminated with non-zero exit code: Error executing in Docker Container: 1
kubectl
还没有安装到 runner 中,一些环境变量如 KUBE_TOKEN
, KUBE_CA_PEM_FILE
或 KUBECONFIG
也没有找到,也没有(见 Deployment variables).
搜了一下gitlab的官方文档,一无所获
那么,我如何通过这个运行器部署项目?
gitlab-runner 没有内置命令,它会旋转一个带有预定义图像的容器,然后在该容器中远程执行脚本中的命令。
您尚未定义图像,因此将使用在 gitlab-runner 设置中定义的默认图像。
所以,
在 script:
或 before_script:
中使用它之前,您可以 Install kubectl binary using curl
build-img:
stage: docker-build
before_script:
- curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
- chmod +x ./kubectl
script:
- ...
- ./kubectl --version
或者创建一个单独的部署阶段,使用具有 kubectl
的映像,例如roffe/kubectl
:
stages:
- docker-build
- deploy
build-img:
stage: docker-build
script:
- docker build -t $CONTAINER_RELEASE_IMAGE .
- docker tag $CONTAINER_RELEASE_IMAGE $CONTAINER_LATEST_IMAGE
- docker push $CONTAINER_IMAGE
tags:
- kubernetes
deploy:dev:
stage: deploy
image: roffe/kubectl
script:
- kubectl .....
tags:
- kubernetes
cat /etc/redhat-release:
CentOS Linux release 7.2.1511 (Core)
docker版本:
Client:
Version: 1.13.1
API version: 1.26
Package version: <unknown>
Go version: go1.8.3
Git commit: 774336d/1.13.1
Built: Wed Mar 7 17:06:16 2018
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: <unknown>
Go version: go1.8.3
Git commit: 774336d/1.13.1
Built: Wed Mar 7 17:06:16 2018
OS/Arch: linux/amd64
Experimental: false
kubectl 版本:
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.5", GitCommit:"f01a2bf98249a4db383560443a59bed0c13575df", GitTreeState:"clean", BuildDate:"2018-03-19T15:59:24Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.0", GitCommit:"925c127ec6b946659ad0fd596fa959be43f0cc05", GitTreeState:"clean", BuildDate:"2017-12-15T20:55:30Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
gitlab 版本:10.6-ce
gitlab runner 图片: gitlab/gitlab-runner:alpine-v10.3.0
我只是将一个kubernetes集群(不是GKE,只是自己部署的一个k8s集群)集成到一个gitlab项目中,然后在上面安装了一个gitlab-runner。
所有这些,都遵循 Adding an existing Kubernetes cluster。
之后,我添加了一个 .gitlab-ci.yml
和一个单一的阶段,并将其推送到 repo。内容如下:
build-img:
stage: docker-build
script:
# - docker build -t $CONTAINER_RELEASE_IMAGE .
# - docker tag $CONTAINER_RELEASE_IMAGE $CONTAINER_LATEST_IMAGE
# - docker push $CONTAINER_IMAGE
- env | grep KUBE
- kubectl --help
tags:
- kubernetes
only:
- develop
然后我得到了这个:
$ env | grep KUBE
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
$ kubectl --help
/bin/bash: line 62: kubectl: command not found
ERROR: Job failed: error executing remote command: command terminated with non-zero exit code: Error executing in Docker Container: 1
kubectl
还没有安装到 runner 中,一些环境变量如 KUBE_TOKEN
, KUBE_CA_PEM_FILE
或 KUBECONFIG
也没有找到,也没有(见 Deployment variables).
搜了一下gitlab的官方文档,一无所获
那么,我如何通过这个运行器部署项目?
gitlab-runner 没有内置命令,它会旋转一个带有预定义图像的容器,然后在该容器中远程执行脚本中的命令。
您尚未定义图像,因此将使用在 gitlab-runner 设置中定义的默认图像。
所以,
在 script:
或 before_script:
build-img:
stage: docker-build
before_script:
- curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
- chmod +x ./kubectl
script:
- ...
- ./kubectl --version
或者创建一个单独的部署阶段,使用具有 kubectl
的映像,例如roffe/kubectl
:
stages:
- docker-build
- deploy
build-img:
stage: docker-build
script:
- docker build -t $CONTAINER_RELEASE_IMAGE .
- docker tag $CONTAINER_RELEASE_IMAGE $CONTAINER_LATEST_IMAGE
- docker push $CONTAINER_IMAGE
tags:
- kubernetes
deploy:dev:
stage: deploy
image: roffe/kubectl
script:
- kubectl .....
tags:
- kubernetes