前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go-Zero 短链项目 DevOps 实战,利用 Drone CI/CD 打通上云(Kubernetes)迭代流程

Go-Zero 短链项目 DevOps 实战,利用 Drone CI/CD 打通上云(Kubernetes)迭代流程

作者头像
为少
发布2021-05-27 19:15:52
1.2K0
发布2021-05-27 19:15:52
举报
文章被收录于专栏:黑客下午茶黑客下午茶

图片来源于go-zero官方

Go-Zero 官方短链项目教程:快速构建高并发微服务

  • https://github.com/tal-tech/zero-doc/blob/main/doc/shorturl.md

关于 go-zero,大家可以看文档。为少认为它是中国目前最好用的 golang 微服务框架。

  • https://www.yuque.com/tal-tech/go-zero

完整的 Go-Zero ShortUrl DevOps Demo

  • https://github.com/Hacker-Linner/k8s-devops-shorturl

准备工作

我这里直接在 K8S 开发集群中部署相关实例。

生产求稳,建议大家还是买云数据库服务。

部署 Mysql、Redis、Etcd。

部署 Drone、Drone-Runner-Kube

开始探索

准备 DevOps 部署相关配置

Dockerfile.alpine.base

代码语言:javascript
复制
FROM alpine:3.12

RUN addgroup -S app \
    && adduser -S -g app app \
    && apk --no-cache add \
    ca-certificates curl netcat-openbsd

Dockerfile.base

代码语言:javascript
复制
FROM golang:1.15-alpine

RUN go env -w GO111MODULE=on
RUN go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
RUN mkdir -p /shorturl/

WORKDIR /shorturl
COPY go.mod go.mod
RUN go mod download

Dockerfile.prod.rpc

代码语言:javascript
复制
### shorturl:base
FROM hub.your-domain.com/library/shorturl:base as builder

WORKDIR /shorturl-rpc
COPY . .
RUN CGO_ENABLED=0 go build -a -o bin/shorturl-rpc rpc/transform/*.go

### shorturl-alpine:base
FROM hub.your-domain.com/library/shorturl-alpine:base

LABEL maintainer="为少"
WORKDIR /home/app
COPY --from=builder /shorturl-rpc/bin/shorturl-rpc .
COPY ./rpc/transform/etc ./rpc/transform/etc
RUN chown -R app:app ./
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
USER app
CMD ["./shorturl-rpc", "-f", "rpc/transform/etc/transform.yaml"]

Dockerfile.prod.api

代码语言:javascript
复制
### shorturl:base
FROM hub.your-domain.com/library/shorturl:base as builder

WORKDIR /shorturl-api
COPY . .
RUN CGO_ENABLED=0 go build -a -o bin/shorturl-api api/*.go

### shorturl-alpine:base
FROM hub.your-domain.com/library/shorturl-alpine:base

LABEL maintainer="为少"
WORKDIR /home/app
COPY --from=builder /shorturl-api/bin/shorturl-api .
COPY ./api/etc ./api/etc
RUN chown -R app:app ./
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
USER app
CMD ["./shorturl-api", "-f", "api/etc/shorturl-api.yaml"]

shorturl-api-configmap.yaml

代码语言:javascript
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: shorturl-api
data:
  shorturl-api.yaml: |-
    Name: shorturl-api
    Host: 0.0.0.0
    Port: 8888
    Transform:
      Etcd:
        Hosts:
          - your-ip:2379
        Key: transform.rpc

shorturl-rpc-configmap.yaml

代码语言:javascript
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: shorturl-transform-rpc
data:
  transform.yaml: |-
    Name: transform.rpc
    Log:
      Mode: console
    ListenOn: 0.0.0.0:8081
    Etcd:
      Hosts:
      - your-ip:2379
      Key: transform.rpc
    DataSource: root:123456@tcp(your-ip:3306)/shorturl?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai
    Table: shorturl
    Cache:
      - Host: your-ip:6379

.drone.yml

代码语言:javascript
复制
kind: pipeline
type: kubernetes
name: ShortUrl(transform.rpc)

steps:

  - name: 更新 Charts(transform.rpc)
    image: busybox
    commands:
      - echo $DRONE_COMMIT
      - '[ -n "$DRONE_COMMIT" ] && (
          sed -i "s/APP_VERSION/${DRONE_COMMIT}/g" k8s-devops/helm-shorturl/shorturl/Chart.yaml;
          sed -i "s/SHORTURL/shorturl-transform-rpc/g" k8s-devops/helm-shorturl/shorturl/Chart.yaml;
          sed -i "s/IMAGE/shorturl-transform-rpc/g" k8s-devops/helm-shorturl/shorturl/values.yaml;
          sed -i "s/APICONFIGMAP//g" k8s-devops/helm-shorturl/shorturl/values.yaml;
          sed -i "s/RPCCONFIGMAP/shorturl-transform-rpc/g" k8s-devops/helm-shorturl/shorturl/values.yaml;
          sed -i "s/CONTAINERPORT/8081/g" k8s-devops/helm-shorturl/shorturl/values.yaml;
          sed -i "s/INGRESS/false/g" k8s-devops/helm-shorturl/shorturl/values.yaml;
          sed -i "s/8080/8081/g" k8s-devops/helm-shorturl/shorturl/templates/NOTES.txt;
        )'
      - cat k8s-devops/helm-shorturl/shorturl/Chart.yaml
      - cat k8s-devops/helm-shorturl/shorturl/values.yaml

  - name: 构建 transform.rpc Image
    image: plugins/docker
    settings:
      debug: true
      dockerfile: Dockerfile.prod.rpc
      repo: hub.your-domain.com/library/shorturl-transform-rpc
      tags: ${DRONE_COMMIT}
      registry: hub.your-domain.com
      username:
        from_secret: docker_user
      password:
        from_secret: docker_pass

  - name: 上云 HelmV3(transform.rpc) -> K8S
    image: pelotech/drone-helm3
    settings:
      helm_command: upgrade
      chart: ./k8s-devops/helm-shorturl/shorturl
      release: shorturl-transform-rpc
      namespace: shorturl
      api_server:
        from_secret: api_server
      kubernetes_token:
        from_secret: k8s_token
      skip_tls_verify: true

trigger:
  branch:
    - main
---
kind: pipeline
type: kubernetes
name: ShortUrl(shorturl-api)

steps:

  - name: 更新 Charts(shorturl-api)
    image: busybox
    commands:
      - echo $DRONE_COMMIT
      - '[ -n "$DRONE_COMMIT" ] && (
          sed -i "s/APP_VERSION/${DRONE_COMMIT}/g" k8s-devops/helm-shorturl/shorturl/Chart.yaml;
          sed -i "s/SHORTURL/shorturl-api/g" k8s-devops/helm-shorturl/shorturl/Chart.yaml;
          sed -i "s/IMAGE/shorturl-api/g" k8s-devops/helm-shorturl/shorturl/values.yaml;
          sed -i "s/APICONFIGMAP/shorturl-api/g" k8s-devops/helm-shorturl/shorturl/values.yaml;
          sed -i "s/RPCCONFIGMAP//g" k8s-devops/helm-shorturl/shorturl/values.yaml;
          sed -i "s/CONTAINERPORT/8888/g" k8s-devops/helm-shorturl/shorturl/values.yaml;
          sed -i "s/INGRESS/true/g" k8s-devops/helm-shorturl/shorturl/values.yaml;
          sed -i "s/8080/8888/g" k8s-devops/helm-shorturl/shorturl/templates/NOTES.txt;
        )'
      - cat k8s-devops/helm-shorturl/shorturl/Chart.yaml
      - cat k8s-devops/helm-shorturl/shorturl/values.yaml

  - name: 构建 shorturl-api Image
    image: plugins/docker
    settings:
      debug: true
      dockerfile: Dockerfile.prod.api
      repo: hub.your-domain.com/library/shorturl-api
      tags: ${DRONE_COMMIT}
      registry: hub.your-domain.com
      username:
        from_secret: docker_user
      password:
        from_secret: docker_pass

  - name: 上云 HelmV3(shorturl-api) -> K8S
    image: pelotech/drone-helm3
    settings:
      helm_command: upgrade
      chart: ./k8s-devops/helm-shorturl/shorturl
      release: shorturl-api
      namespace: shorturl
      api_server:
        from_secret: api_server
      kubernetes_token:
        from_secret: k8s_token
      skip_tls_verify: true

trigger:
  branch:
    - main

验证

我这里已经部署好了一个开发测试的 Pod 实例,大家可以试用。

shorten api 调用

代码语言:javascript
复制
# curl -i "https://shorturl.your-domain.com/shorten?url=https://www.your-domain.com"
curl -i "https://shorturl.hacker-linner.com/shorten?url=https://www.hacker-linner.com"

expand api 调用

代码语言:javascript
复制
# curl -i "https://shorturl.your-domain.com/expand?shorten=6d11a1"
curl -i "https://shorturl.hacker-linner.com/expand?shorten=6d11a1"

利用工具查看 Redis 与 Etcd 中的键值对

我是为少。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑客下午茶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备工作
    • 部署 Drone、Drone-Runner-Kube
    • 开始探索
      • 准备 DevOps 部署相关配置
        • Dockerfile.alpine.base
          • Dockerfile.base
            • Dockerfile.prod.rpc
              • Dockerfile.prod.api
                • shorturl-api-configmap.yaml
                  • shorturl-rpc-configmap.yaml
                    • .drone.yml
                      • 验证
                        • 利用工具查看 Redis 与 Etcd 中的键值对
                        相关产品与服务
                        容器镜像服务
                        容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档