go proxy athens 部署到k8s

之前将项目的代码迁移到了新的git,然后利用公司内部k8s结和gitlab进行ci/cd,但是由于编译时每次都需要重头开始build镜像,每次go mod都会去下载第三方包很耗费时间。在网上找了一些资料发现athens正好满足我的需求,就把这个服务给部署到和gitlab-runner一起了,这样就可以完美解决了下载慢的问题。毕竟局域网内下载还是很快的。

一、athens简介

Athens 是一个开源项目,旨在为 Go 模块(Go modules)创建首个代理服务器。将联合 Athens 社区继续致力于改善模块体验,重点是确保 Go 模块与所有代理服务器能无缝协作,并努力建立一个联合的、组织多样化的代理网络 。

项目官方网址: https://github.com/gomods/athens

文档地址: https://docs.gomods.io/

二、部署

1、创建 PersistentVolume

创建pv.yaml的文件如下:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc
namespace: prj-name # 修改为您自己的命名空间
labels:
app: gomod-athens
spec:
storageClassName: sc-rbd-hb06 #storageClass这个必须写明, 否则创建不出对应的pv
volumeMode: Block # k8s 1.9 版本支持的,总共两种,Filesystem,Block。默认Filesystem,我司内部平台仅支持Block,所以这样写,具体可以自己修改
accessModes:
- ReadWriteOnce # 这里可以有3种模式挂载到节点上,ReadWriteMany多点读写,ReadWriteOnce单点读写,ReadOnlyMany 多点只读, 目前只支持ReadWriteOnce和ReadOnlyMany
resources:
requests:
storage: 10Gi # 存储空间大小,这里不能超过配额限制100G

执行:

[root@linux]$ kubectl apply -f pv.yaml
[root@linux]$ kubectl get pv -n project_name

2、创建service

service.yml

apiVersion: v1
kind: Service
metadata:
name: athens-proxy
namespace: project_name # 根据自己的修改
spec:
ports:
- port: 80
targetPort: 3000
selector:
app: gomod-athens # 要和deployment中的对应一样
type: ClusterIP

执行:

[root@linux]$ kubectl apply -f service.yml
[root@linux]$ kubectl get svc -n project_name
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
athens-proxy ClusterIP 2002:ac1f:91c5:1::2eed <none> 80/TCP 157m

3、创建deployment

athens.yml

apiVersion: apps/v1
kind: Deployment
metadata:
name: gomod-athens-deploy
namespace: project_name #根据自己的修改
spec:
selector:
matchLabels:
app: gomod-athens
replicas: 1
template:
metadata:
labels:
app: gomod-athens # 要和service中的对应一样
spec:
containers:
- name: athens
image: gomods/athens:latest #使用官方最新镜像
ports:
- containerPort: 3000
env:
- name: ATHENS_DISK_STORAGE_ROOT
value: /var/lib/athens
- name: ATHENS_STORAGE_TYPE
value: disk
volumeMounts:
- name: gomodcache
mountPath: /var/lib/athens
readOnly: false
imagePullSecrets:
- name: abcdhub # 拉取镜像的secret key
volumes:
- name: gomodcache
persistentVolumeClaim:
claimName: pvc #第一步创建的PersistentVolume 名字
readOnly: false

执行:

[root@linux]$ kubectl apply -f athens.yml
[root@linux]$ kubectl get pod -n project_name
NAME READY STATUS RESTARTS AGE
gomod-athens-deploy-d9d7978bb-7sbww 1/1 Running 0 159m

curl http://<service-name>.<namespace>.svc.<cluster-domain>:80 测试服务正常工作,正常的话会返回"Welcome to The Athens Proxy"

4、ci/cd中使用

我是按照下面这样使用的,配置proxy,然后将公司内部的代码库排除在外

利用域名进行访问, Kubernetes Service 的域名格式如下:

<service-name>.<namespace>.svc.<cluster-domain>

export GOPROXY= http://<service-name>.<namespace>.svc.<cluster-domain>:80

export GOPRIVATE=gitlab.mycompany.com

5、踩坑记录

由于一开始不太清楚怎么部署,所以service 的metadata中的 name字段填了athens,这个就是一个坑,后续步骤一直报

time="2019-12-09T07:04:13Z" level=info msg="Exporter not specified. Traces won't be exported"
2019-12-09 07:04:13.539829 I | Starting application at port tcp://[2002:ac1f:91c5:1::b5fe]:80
2019-12-09 07:04:13.539852 I | listen tcp: address tcp://[2002:ac1f:91c5:1::b5fe]:80: too many colons in address

到github上面查看issue还真发现有人遇到了和我一样的问题:too many colons in address,

然后按照上面的方法: https://github.com/gomods/athens/issues/1038 来就完美解决了。

go proxy athens 部署到k8s的更多相关文章

  1. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...

  2. eShopOnContainers 知多少[10]:部署到 K8S | AKS

    1. 引言 断断续续,感觉这个系列又要半途而废了.趁着假期,赶紧再更一篇,介绍下如何将eShopOnContainers部署到K8S上,进而实现大家常说的微服务上云. 2. 先了解下 Helm 读过我 ...

  3. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  4. K8S+GitLab-自动化分布式部署ASP.NET Core(三) 更新镜像版本并部署到K8S上

    一.介绍 前一篇,介绍了ASP.NET Core部署到K8S上,下面介绍我们在发布新一版本中怎么通过Gitlab CI自动给镜像打版本并部署到K8S上. 二.我们通过GitLab CI/CD 变量 不 ...

  5. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  6. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  7. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...

  8. 【故障公告】部署在 k8s 上的博客后台昨天与今天在访问高峰多次出现 502

    非常抱歉,从昨天上午开始,部署在 k8s 集群上的博客后台(基于 .NET Core 3.1 + Angular 8.2 实现)出现奇怪问题,一到访问高峰就多次出现 502 ,有时能自动恢复,有时需要 ...

  9. 开发阶段,将SpringBoot应用快速部署到K8S

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

随机推荐

  1. linux防火墙相关。

    ubuntu 系统默认已安装ufw. 1.安装 sudo apt-get install ufw 2.启用 sudo ufw enable sudo ufw default deny 运行以上两条命令 ...

  2. php ffmpeg视频和序列帧转化

    php ffmpeg视频和序列帧转化 <pre>$cmd=shell_exec("ffmpeg -i ".__DIR__ . "/shipin1.mp4 -r ...

  3. kubernetes 控制器详解【持续完善中】

    目录 资源创建详解 一:Pod及常用参数 1.简介 2.模板 3.删除pod 4.设置Pod主机名 5.镜像拉取策略(ImagePullPolicy) 二:RC 1.简介 2.模板 三:Deploym ...

  4. 【微信小程序】踩坑指南(持续更新)

    前言 说明: 基于mpvue框架:mpvue官方文档 语法同vue框架:vue官方文档 小程序中会有一些坑点,这里会就工作中遇到的坑一一列举出来 无说明时请直接看代码注释 v-show无法使用在小程序 ...

  5. 《Java多线程面试题》系列-创建线程的三种方法及其区别

    1. 创建线程的三种方法及其区别 1.1 继承Thread类 首先,定义Thread类的子类并重写run()方法: package com.zwwhnly.springbootaction.javab ...

  6. 理解Spark SQL(一)—— CLI和ThriftServer

    Spark SQL主要提供了两个工具来访问hive中的数据,即CLI和ThriftServer.前提是需要Spark支持Hive,即编译Spark时需要带上hive和hive-thriftserver ...

  7. C#winfrom文件下载到本地

    string remoteUri = System.IO.Path.GetDirectoryName(url); string fileName = System.IO.Path.GetFileNam ...

  8. vim常用插件使用方法整理【持续更】

    nerdtree 和编辑文件一样,通过h j k l移动光标定位切换工作台和目录 ctr+w+h 光标focus左侧树形目录,ctrl+w+l 光标focus右侧文件显示窗口. ctrl+w+w,光标 ...

  9. Spring中常见的设计模式——原型模式

    1.原型模式应用场景 当遇到大量耗费劳动力的 get,set赋值场景时,如下: public class SetGetParam { public void setParam(UserDto user ...

  10. AWS re:Invent 2019 召开 | 云原生生态周报 Vol. 30

    作者 | 何淋波.宋净超.徐迪 业界要闻 1. AWS re:Invent 2019 AWS 年度云计算盛会于 12.2-12.6 在拉斯维加斯举行. 技术分享超过 2500 场,技术方向涵盖数据分析 ...