主要讲述如果使用github和drone进行代码环境下的ci/cd环境。

kubernetes集群三步安装

基于drone构建CI/CD系统,对接k8s https://sealyun.com/post/ci-cd/

直接进入主题,主要使用drone-kube插件进行drone的k8s部署。 该插件主要包括两大功能,初始化kubeconfig文件和渲染部署k8s相关文件。

kubeconfig文件渲染

使用命令模式drone-kube config进行kubeconfig文件渲染管理员文件,使用命令模式drone-kube configToken进行kubeconfig文件渲染用户token管理文件。

管理员模式

该模式为最常见的kubernetes-admin管理方式。

.drone.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- name: deploy-font
  image: cuisongliu/drone-kube
  settings:
    server:
      from_secret: k8s-server
    ca:
      from_secret: k8s-ca
    admin:
      from_secret: k8s-admin
    admin_key:
      from_secret: k8s-admin-key
  commands:
    - drone-kube config  >> /dev/null
    - kubectl delete -f deploy/deploy.yaml || true
    - sleep 15
    - kubectl create -f deploy/deploy.yaml || true

多租户模式

该模式为kubernetes下发user-token的模式。

.drone.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
- name: deploy-font
  image: cuisongliu/drone-kube
  settings:
    server:
      from_secret: k8s-server
    user:
      from_secret: k8s-user
    token:
      from_secret: k8s-token
  commands:
    - drone-kube configToken  >> /dev/null
    - kubectl delete -f deploy/deploy.yaml || true
    - sleep 15
    - kubectl create -f deploy/deploy.yaml || true

部署文件模板渲染

  1. 编写部署模板文件,必须以yaml.tmpl或者yml.tmpl为文件结尾。其中变量名称需要为TEMPLATE开头且必须为大写如TEMPLATE_TAG1。
  2. drone的脚本中变量名与模板文件中变量需要保持一致,大小写亦可。
  3. 脚本drone-kube template –deploy=deploy为渲染模板命令,需要手动执行。其中deploy参数为存放模板文件的目录。

deploy.yaml.tmpl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{.TEMPLATE_TAG1}}
  labels:
    app: {{.TEMPLATE_TAG1}}
spec:
  replicas: 1
  template:
    metadata:
      name: {{.TEMPLATE_TAG1}}
      labels:
        app: {{.TEMPLATE_TAG1}}
    spec:
      containers:
        - name: {{.TEMPLATE_TAG1}}
          image: {{.TEMPLATE_TAG2}}
          imagePullPolicy: IfNotPresent
      restartPolicy: Always
  selector:
    matchLabels:
      app: {{.TEMPLATE_TAG1}}
.drone.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- name: deploy-font
  image: cuisongliu/drone-kube
  settings:
    server:
      from_secret: k8s-server
    ca:
      from_secret: k8s-ca
    admin:
      from_secret: k8s-admin
    admin_key:
      from_secret: k8s-admin-key
    template_tag1: alpine
    template_tag2: ${DRONE_TAG=drone-test}
  commands:
    - drone-kube config
    - drone-kube template --deploy=deploy >> /dev/null
    - kubectl delete -f deploy/deploy.yaml || true
    - sleep 15
    - kubectl create -f deploy/deploy.yaml || true