Kubernetes自动化部署Go
Kubernetes+Gitea+Drone自动化部署Go
上一篇跟大家分享如何使用Drone制作镜像,然后上传镜像到镜像仓库,后面我又捣鼓尝试在这个流程的基础上部署服务,今天跟大家分享这个过程。
一、准备Go程序代码
在这里我直接用我之前基于Gin开发的API程序作为实验代码,将这份代码直接复制到Git仓库根目录里。
二、制作镜像
我们直接在Git仓库目录下创建一个文件,名字为Dockerfile,用来制作镜像,配置如下
# Version 1.0 FROM alpine:latest # 维护者信息 MAINTAINER hzx790254812@gmail.com # 设置工作目录 WORKDIR /home COPY drone-go /home/ # 暴露端口 EXPOSE 9999 # 执行命令 ENTRYPOINT ./drone-go
这里我们设定一个工作目录,将编译好后的Go二进制文件复制到容器文件里,并暴露9999端口,同时运行二进制文件。
三、设置密钥信息
由于涉及到一些重要信息,我并不想放在.drone.yml文件里,直接在drone管理面板设置,将镜像仓库账号密码、服务器账号密码都不写到该文件里,配置如下,大家根据情况进行配置
四、编写.drone.yml
还是拿我们上一篇教程的.drone.yml文件,我们同样在git仓库根目录下创建一个文件名为.drone.yml,里面包含了通知到电报的代码,如果不需要,可以删掉整个notification,配置如下
kind: pipeline type: kubernetes name: project-go #构建步骤 steps: #构建镜像 - name: build image: golang:latest pull: if-not-exists commands: - CGO_ENABLED=0 go build -o drone-go #推送镜像至镜像仓库 - name: publish image: plugins/docker settings: purge: false registry: 镜像仓库域名 repo: 镜像仓库详细地址 use_cache: true tags: - latest username: from_secret: registry_user_name password: from_secret: registry_password #部署服务 - name: ssh commands image: appleboy/drone-ssh settings: host: from_secret: ssh_ip port: 22 username: from_secret: ssh_user_name password: from_secret: ssh_password script: - cd /home/k8s/app - kubectl apply -f drone-go.yaml - kubectl rollout restart deployment drone-go-deployment #通知到telegram - name: notification image: appleboy/drone-telegram settings: token: from_secret: telegram_token to: from_secret: telegram_user_id message: > {{#success build.status}} {{repo.name}} 第{{build.number}} 次自动部署成功 耗时 {{since build.started}} 提交分支 {{commit.branch}} 详情 {{ build.link }} {{else}} {{repo.name}} 第{{build.number}} 次自动部署失败 耗时{{since build.started}} 提交分支 {{commit.branch}} 详情 {{ build.link }} {{/success}}
五、编写k8s部署服务文件
我们在服务器的/home/k8s/app目录下创建一个名为drone-go.yaml文件,在上一篇教程里我们部署服务用到了这两个变量,大家可以根据的情况进行修改。
apiVersion: apps/v1 kind: Deployment metadata: name: drone-go-deployment spec: selector: matchLabels: app: drone-go replicas: 2 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 template: metadata: labels: app: drone-go spec: containers: - name: drone-go image: 我们编译的镜像详细地址 imagePullPolicy: Always ports: - containerPort: 9999 --- apiVersion: v1 kind: Service metadata: name: drone-go-service labels: app: drone-go spec: type: NodePort selector: app: drone-go ports: - port: 9999 targetPort: 9999 nodePort: 30099
这里的镜像地址就直接用我们前面自己构建的镜像,同时设置服务平滑重启,这样我们每次更新代码,触发更新,都可以实现平滑重启。
六、提交测试
我们修改代码,然后提交,测试整个流程,最终效果如下
这样我们就成功自动化部署go程序。
0条评论