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. LINQ学习——JOIN

    一.JOIN的作用 1.使用联接来结合两个或更多的集合的数据. 2.联接操作接受两个集合然后创建一个临时的对象集合,每一个对象包含原始集合对象中的所有字段. Note:这里是包含而不是这个原实集合的字 ...

  2. 不需要spring管理,自己根据名字取到对应的bean

    package com.yiban.abc.util; import org.springframework.beans.BeansException; import org.springframew ...

  3. Linux常用命令复习

    1> 查看文件信息:ls ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令. Linux文件或者目录名称最长可以有265个字符,“.”代 ...

  4. codeblocks在Ubuntu 18 下的安装

    codeblocks在Ubuntu 18 下的安装: 1. 现在应用中心直接下载CodeBlocks IDE: 2. Ctrl + Alt + T 打开终端 Terminal 3. 输入:  sudo ...

  5. hdu 5901 Count primes (meisell-Lehmer)

    Count primes Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  6. 领扣(LeetCode)第三大的数 个人题解

    给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例 2 ...

  7. mysql基础之约束

    约束的目的: 1.约束保证数据的完整性和一致性. 2.约束分为表级约束 和 列级 约束.(针对约束字段的数目的多少来确定的) 3.约束类型包括 not null (非空约束) primary key( ...

  8. TestNG+Maven+IDEA 环境配置+入门

    一.环境配置 1.安装IDEA(参考:https://blog.csdn.net/m0_38075425/article/details/80883078) 2.在Prefernces,通过Plugi ...

  9. root权限后,不要忘了还有selinux

    下面的例子运行在中兴android 5.0手机上. 当我们使用root权限的python去创建socket监听端口8088时,selinux向kmsg输出了下面的记录 python-android5 ...

  10. python: __future__的介绍

    __future__ 给旧版本python提供新版本python的特性例如: 在python2.X中可以使用print"" 也可以使用print() 但是加载这个print的新特性 ...