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管理面板设置,将镜像仓库账号密码、服务器账号密码都不写到该文件里,配置如下,大家根据情况进行配置

123.png

      四、编写.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

这里的镜像地址就直接用我们前面自己构建的镜像,同时设置服务平滑重启,这样我们每次更新代码,触发更新,都可以实现平滑重启。

      六、提交测试

      我们修改代码,然后提交,测试整个流程,最终效果如下

1234.png

这样我们就成功自动化部署go程序。    

0条评论

发表评论