首先,新版的gitlab是自带和kubernetes的集成的。上回说到,如何使用gitlab工具自动生成docker镜像。今天,就把gitlab自动部署k8s镜像说一下。
这个按照官网步骤一步步来就好,楼主想展示的是通过gitlab-ci自动部署。这里对几个核心文件作出说明。
Dockerfile用了个最简单的。
#Dockerfile
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "test.py"]
k8s的配置文件写的也比较普通,注意我们把使用的镜像的版本用${tag}表示出来。
#gitlab-cd-test.yaml
kind: Service
apiVersion: v1
metadata:
name: gitlab-cd-test-service
spec:
type: NodePort
selector:
app: gitlab-cd-test-app
ports:
- protocol: TCP
port: 5000
nodePort: 30000
---
kind: Deployment
apiVersion: apps/v1beta1
metadata:
name: gitlab-cd-test-deployment
spec:
replicas: 2
selector:
matchLabels:
app: gitlab-cd-test-app
template:
metadata:
labels:
app: gitlab-cd-test-app
spec:
containers:
- name: gitlab-cd-test-container
image: registry.cn-hangzhou.aliyuncs.com/goddy-test/gitlab-cd-test:${tag}
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5000
resources:
requests:
memory: '51Mi'
cpu: '20m'
limits:
memory: '102Mi'
cpu: '50m'
imagePullSecrets:
- name: ali
跟上个项目基本一致,注意啦,楼主用的goddy/kubectl:1.0.0
是某聪明的男人创建的,完全可以使用,也可以官网使用其他人的。
variables:
image: "registry.cn-hangzhou.aliyuncs.com/goddy-test/gitlab-cd-test"
tag: $CI_COMMIT_SHA
stages:
- build
- deploy
docker-build:
stage: build
image: docker:stable
services:
- docker:dind
only:
- master
- dev
script:
- docker login registry.cn-hangzhou.aliyuncs.com -u *** -p ***
- docker build -t $image:$tag .
- docker push $image:$tag
- echo "$image:$tag"
k8s-deploy:
stage: deploy
image: goddy/kubectl:1.0.0
only:
- master
- dev
script:
- export tag=$tag
- envsubst < gitlab-cd-test.yaml | kubectl --kubeconfig dev.conf -n dev apply -f -
# - kubectl --kubeconfig hbrain.conf -n dev apply -f gitlab-cd-test.yaml
目前楼主是把k8s的配置文件放到了项目目录里,这确实不太安全,建议把楼主的基本镜像里目录~/.kube
下的conf文件跟换为自己的,然后将此镜像作为基础镜像。
部署的规则自己可以编一下,嗯嗯。
因为代码库有楼主信息,不方便抛出,敬请谅解。