概要
Drone是Go语言编写的,基于容器技术的CI/CD系统。是目前为止个人感觉最轻量级的CI/CD系统,使用本身非常方便容易。目前Drone文档严重缺乏,而且好多文档是之前历史版本的使用文档,所以在安装和使用时会有一些小麻烦,除去这些一切很舒服。前一篇已经写完如何安装Drone,本篇会以一个实例来讲一下,如何用Drone完成一个最简单Golang项目的部署。
ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件
查看列表:
1 | kubectl get configmap |
查看详情:
1 | $> kubectl describe cm <configMapName> |
直接创建命令:
1 | $> kubectl create configmap <configMapName> |
通过文件创建命令:
1 | $> cat cm.conf |
配置文件:
1 | apiVersion: v1 |
生成pod并验证configmap的使用:
1 | $> kubectl apply -f pod.yaml |
修改configmap的内容看环境变量是否同步生效:
1 | $> kubectl edit cm nginx-config |
配置文件:
1 | apiVersion: v1 |
验证configmap的使用:
1 | $> kubectl exec -it pod-cm-2 -- /bin/sh |
修改configmap的内容看Volumn是否同步生效:
1 | $> kubectl edit cm nginx-config |
前一篇文章完成了git同步相关工作,使用nginx做反向代理,本篇完成PHP项目的部署,主要包括以下内容:
配置内容:
1 | apiVersion: v1 |
注意:
1 | 1. 这儿设定好的目录是/opt/service-new/webroot |
获取git服务的known_hosts内容:
1 | $> ssh-keyscan $YOUR_GIT_HOST > /tmp/known_hosts |
获取known_hosts和密钥的base64:
1 | $> cat /tmp/known_hosts | base64 |
新建名为zwgSecret的Secret:
1 | apiVersion: v1 |
or
1 | $> kubectl create secret generic zwgSecret \ |
说明:
1 | 1. 一个pod下面有3个容器git-sync, php, nginx |
配置文件:
1 | apiVersion: apps/v1 |
本项目主要实现了基于git的项目同步, 技术为nginx+html
基于开源项目: git-sync^1
最简单的https公有项目同步^2
配置实例:
1 | apiVersion: apps/v1 |
简单说明:
1 | $> ssh-keyscan $YOUR_GIT_HOST > /tmp/known_hosts |
1 | $> ssh-keyscan $YOUR_GIT_HOST > /tmp/known_hosts |
查看确定私钥已经创建成功:
1 | zhaowgMac:k8s zhaoweiguo$ kubectl get secret |
git私钥volumes配置
1 | # ... |
参数说明
1 | -ssh: 指定使用ssh协议 |
git-sync容器配置
1 | # ... |
1 | apiVersion: extensions/v1beta1 |
先确定已经连接上k8s服务:
1 | // 如何创建k8s服务后续章节专门写(本章节的k8s服务是直接使用阿里的托管k8s) |
go项目源码
1 | $ cat main.go |
编译
1 | // 生成linux可用的二进制文件 |
Dockerfile文件
1 | FROM alpine # 使用最简单镜像alpine |
打包并推送镜像
1 | $ docker build -t registry.cn-beijing.aliyuncs.com/zhaoweiguo/gordondemo:v8 . |
编辑Deployment的yaml文件
1 | $ cat deployment.yaml |
执行Deployment
1 | $ kubectl apply -f deployment.yaml |
编辑Service的yaml文件
1 | // 这儿直接使用阿里云的slb服务 |
执行Service
1 | $ kubectl apply -f service.yaml |
查看
1 | $ kubectl get deployment |
请求成功
1 | // EXTERNAL-IP 对应的就是阿里slb的ip地址(即EXTERNAL-IP对应的字段) |