go proxy athens 部署到k8s
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的更多相关文章
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...
- eShopOnContainers 知多少[10]:部署到 K8S | AKS
1. 引言 断断续续,感觉这个系列又要半途而废了.趁着假期,赶紧再更一篇,介绍下如何将eShopOnContainers部署到K8S上,进而实现大家常说的微服务上云. 2. 先了解下 Helm 读过我 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...
- K8S+GitLab-自动化分布式部署ASP.NET Core(三) 更新镜像版本并部署到K8S上
一.介绍 前一篇,介绍了ASP.NET Core部署到K8S上,下面介绍我们在发布新一版本中怎么通过Gitlab CI自动给镜像打版本并部署到K8S上. 二.我们通过GitLab CI/CD 变量 不 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...
- 【故障公告】部署在 k8s 上的博客后台昨天与今天在访问高峰多次出现 502
非常抱歉,从昨天上午开始,部署在 k8s 集群上的博客后台(基于 .NET Core 3.1 + Angular 8.2 实现)出现奇怪问题,一到访问高峰就多次出现 502 ,有时能自动恢复,有时需要 ...
- 开发阶段,将SpringBoot应用快速部署到K8S
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
随机推荐
- HTTPS加密流程理解
HTTPS加密流程 由于HTTP的内容在网络上实际是明文传输,并且也没有身份验证之类的安全措施,所以容易遭到挟持与攻击 HTTPS是通过SSL(安全套接层)和TLS(安全传输协议)的组合使用,加密TC ...
- 瞎折腾实录:构建 Armel 版本的 .NET Core 教程和资料资源
目录 首先我要说明,我失败了~ 我把我的进度和经验放出来,希望能够帮助别人完成编译工作~ 背景:最近接手一个华为某型号的嵌入式设备,需要在上面搭建 .NET Core 环境. 设备是 Armel 架构 ...
- 201871010114-李岩松《面向对象程序设计(java)》第一周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- variable precision SWAR算法
计算二进制形式中1的数量这种问题,在各种刷题网站上比较常见,以往都是选择最笨的遍历方法“蒙混”过关.在了解Redis的过程中接触到了variable precision SWAR算法(以下简称VP-S ...
- IDEA快捷键汇总
[常用] Ctrl+Shift + Enter,语句完成 "!",否定完成,输入表达式时按 "!"键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更 ...
- 大宇java面试系列(二):jvm组成部分
1. 说一下 JVM 的主要组成部分?及其作用? 类加载器(ClassLoader) 运行时数据区(Runtime Data Area) 执行引擎(Execution Engine) 本地库接口(Na ...
- PHP 中四大经典排序算法
1.冒泡排序 在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换. ...
- selenium滑块验证
使用selenium模拟登录解决滑块验证问题 本次主要是使用selenium模拟登录网页端的TX新闻,本来最开始是模拟请求的,但是某一天突然发现,部分账号需要经过滑块验证才能正常登录,如果还是模拟 ...
- 使用Java窗口程序执行输入的任何cmd命令
利用Java窗口程序来执行用输入的任何命令 实现效果: Java桌面窗口,输入框.按钮,当输入框被输入命令的时候,点击按钮执行命令! 实现代码 package com.remote.remote.ag ...
- cglib测试例子和源码详解
目录 简介 为什么会有动态代理? 常见的动态代理有哪些? 什么是cglib 使用例子 需求 工程环境 主要步骤 创建项目 引入依赖 编写被代理类 编写MethodInterceptor接口实现类 编写 ...