在Kubernetes上安装Athens
当您按照Walkthrough中的说明进行操作时, 最终会得到使用内存作为存储的Athens。 这仅适用于短时间试用Athens,因为您将很快耗尽内存,并且Athens在两次重启之间不会保留储存的模块(modules)。 为了使Athens运行在一个更接近生产级别的环境上, 您可能需要在 Kubernetes 集群上运行Athens. 为了帮助在Kubernetes上部署Athens,, 我们提供了一个 Helm chart . 本指南将指导您使用Helm将Athens安装在Kubernetes集群上。
前提条件
为了在Kubernetes集群上安装Athens,您必须满足一些前提条件.如果您已经完成以下步骤,请继续执行配置Helm. 本指南假设您已经创建了Kubernetes集群.
- 安装 Kubernetes CLI.
- 安装 Helm CLI.
安装Kubernetes CLI
为了与Kubernetes集群进行交互,您需要 安装 kubectl。
安装Helm CLI
Helm 是用于在Kubernetes上安装预先配置好的应用程序的工具。
可以通过运行以下命令来安装helm
:
MacOS
brew install kubernetes-helm
Windows
- 下载最新版本的 Helm release。
- 解压tar文件。
- 拷贝 helm.exe 到系统 PATH 中的一个目录下.
Linux
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
配置Helm
如果您的集群已配置为使用Helm,请继续部署Athens.
如果没有,请继续阅读。
RBAC 集群
如果您的集群启用了RBAC,则需要创建ServiceAccount,ClusterRole和ClusterRoleBinding以供Helm使用。 以下命令将创建它们并初始化Helm。
kubectl create -f https://raw.githubusercontent.com/Azure/helm-charts/master/docs/prerequisities/helm-rbac-config.yaml
helm init --service-account tiller
非RBAC 集群
如果您的集群没有启用rbac,则可以轻松初始化helm。
helm init
在部署Athens之前, 你需要等待Tiller的pod变成 Ready
状态. 您可以通过查看 kube-system
中的Pod来检查状态:
$ kubectl get pods -n kube-system -w
NAME READY STATUS RESTARTS AGE
tiller-deploy-5456568744-76c6s 1/1 Running 0 5s
部署Athens
使用Helm安装Athens的最快方法是从我们的公共Helm Chart库中进行部署。 首先,使用以下命令添加库
$ helm repo add gomods https://gomods.github.io/athens-charts
$ helm repo update
接下来,将含有默认值的chart安装到athens
命名空间:
$ helm install gomods/athens-proxy -n athens --namespace athens
这将在athens
命名空间中部署一个启用了disk
本地存储的Athens实例。此外,还将创建一个ClusterIP
服务。
高级配置
多副本
默认情况下,该chart将安装副本数量为1的athens。要更改此设置,请更改replicaCount
值:
helm install gomods/athens-proxy -n athens --namespace athens --set replicaCount=3
资源
默认情况下,该chart将在没有特定资源请求或限制的情况下安装athens。 要更改此设置,请更改resources
值:
helm install gomods/athens-proxy -n athens --namespace athens \
--set resources.requests.cpu=100m \
--set resources.requests.memory=64Mi \
--set resources.limits.cpu=100m \
--set resources.limits.memory=64Mi
有关更多信息,请参阅Kubernetes文档中的管理容器的计算资源 。
通过Github令牌(Token)授予athens访问私有存储库的权限(可选)
- 在 https://github.com/settings/tokens 上创建一个令牌(Token)
- 通过 config.toml 文件 (
GithubToken
字段) 或 通过设置ATHENS_GITHUB_TOKEN
环境变量,将令牌提供给Athens代理.
存储提供程序(storage provider)
Helm chart目前支持使用两个不同的存储提供程序来运行Athens:disk
和mongo
。 默认使用的是disk
存储提供程序。
磁盘存储配置
当使用disk
存储提供程序时,可以配置许多有关数据持久性的选项。默认情况下,雅典将使用emptyDir
卷进行部署。这可能不足以满足生产用例,因此该chart还允许您通过PersistentVolumeClaim配置持久性。该chart目前允许您设置以下值:
persistence:
enabled: false
accessMode: ReadWriteOnce
size: 4Gi
storageClass:
将其添加到override values.yaml
文件并运行:
helm install gomods/athens-proxy -n athens --namespace athens -f override-values.yaml
enabled
用于打开chart的PVC功能,而其他值直接与PersistentVolumeClaim中定义的值相关。
Mongo DB 配置
要使用Mongo DB存储提供程序,您首先需要一个MongoDB实例。当部署了MongoDB后,就可以通过storage.mongo.url
字段使用连接字符串配置Athens。 您还需将storage.type
设置为“mongo”。
helm install gomods/athens-proxy -n athens --namespace athens --set storage.type=mongo --set storage.mongo.url=<some-mongodb-connection-string>
S3 配置
要在Athens中使用S3存储,请将storage.type
设置为s3
,并将storage.s3.region
和storage.s3.bucket
分别设置为所使用的AWS区域和S3存储桶名称。 默认情况下,Athens将尝试使用AWS SDK从环境变量、共享凭证文件(shared credentials files)和EC2实例凭证组成的链中加载AWS凭证。 要手动指定AWS凭证,请设置storage.s3.access_key_id
,storage.s3.secret_access_key
,并将storage.s3.useDefaultConfiguration
更改为false
。
helm install gomods/athens-proxy -n athens --namespace athens --set storage.type=s3 --set storage.s3.region=<your-aws-region> --set storage.s3.bucket=<your-bucket>
Minio 配置
若要在Athens中使用S3存储,请将storage.type
设置为minio
。您需要设置storage.minio.endpoint
作为minio安装的URL。这个URL也可以是kubernetes内部地址的(例如minio-service.default.svc
)。您需要在minio安装过程中创建一个桶(bucket)或使用现有的一个桶。桶需要在storage.minio.bucket
中引用。最后,Athens需要在storage.minio.accesskey
和storage.minio.secretkey
中设置您的minio的身份验证凭据。
helm install gomods/athens-proxy -n athens --namespace athens --set storage.type=minio --set storage.minio.endpoint=<your-minio-endpoint> --set storage.minio.bucket=<your-bucket> --set storage.minio.accessKey=<your-minio-access-key> --set storage.minio.secretKey=<your-minio-secret-key>
Kubernetes 服务
默认情况下,Kubernetes中为Athens创建了一个ClusterIP
服务。在Kubernetes集群内使用Athens的场景下,clusterip
就足够用了。如果要在Kubernetes集群外提供Athens的服务,请考虑使用“nodeport”或“loadbalancer”。可以在安装chart时通过设置service.type
值来更改此设置。例如,要使用nodeport服务部署Athens,可以使用以下命令:
helm install gomods/athens-proxy -n athens --namespace athens --set service.type=NodePort
Ingress 资源
该chart可以选择性为您的创建一个Kubernetes Ingress 资源。要启用此功能,请将ingress.enabled
资源设置为true。
helm install gomods/athens-proxy -n athens --namespace athens --set ingress.enabled=true
values.yaml
文件中提供了更多配置选项:
ingress:
enabled: true
annotations:
certmanager.k8s.io/cluster-issuer: "letsencrypt-prod"
kubernetes.io/tls-acme: "true"
ingress.kubernetes.io/force-ssl-redirect: "true"
kubernetes.io/ingress.class: nginx
hosts:
- athens.mydomain.com
tls:
- secretName: athens.mydomain.com
hosts:
- "athens.mydomain.com
上述的示例使用cert-manager从Let’s Encrypt设置TLS证书的自动创建/检索。 并使用nginx-ingress controller 将Athens对外暴露于互联网中。
将其添加到override-values.yaml
文件中并运行:
helm install gomods/athens-proxy -n athens --namespace athens -f override-values.yaml
上游的模块(module)库
您可以为上游模块库设置URL
,然后当Athens在自己的存储中找不到某个模块(module)时,它将尝试从上游模块库中下载该模块。
对于可用的为上游模块库,一下是几个好的选择:
https://gocenter.io
使用JFrog的GoCenterhttps://proxy.golang.org
使用Go Module 镜像- 指向任何其他Athens服务器的URL
以下示例显示了如何将GoCenter设置为上游模块库:
upstreamProxy:
enabled: true
url: "https://gocenter.io"
将其添加到 override-values.yaml
文件里并运行:
helm install gomods/athens-proxy -n athens --namespace athens -f override-values.yaml
.netrc文件支持
.netrc文件可以作为密钥共享,以允许访问私有模块。
使用以下命令从netrc
文件创建密钥(文件的名称必须为netrc):
kubectl create secret generic netrcsecret --from-file=./netrc
为了指导athens获取并使用密钥,netrc.enabled
标志必须设置为true:
helm install gomods/athens-proxy -n athens --namespace athens --set netrc.enabled=true
gitconfig支持
gitconfig可以作为私钥共享,以允许访问私有git库中的模块。 例如,您可以使用GitHub,Gitlab和其他git服务上的个人访问令牌(token),通过HTTPS配置对私有存储库的访问。
首先,准备你的gitconfig文件:
cat << EOF > /tmp/gitconfig
[url "https://user:token@git.example.com/"]
insteadOf = ssh://git@git.example.com/
insteadOf = https://git.example.com/
EOF
接下来,使用上面创建的文件创建密钥:
kubectl create secret generic athens-proxy-gitconfig --from-file=gitconfig=/tmp/gitconfig
为了使athens使用密钥,请设置适当的标志(或values.yaml
中的参数):
helm install gomods/athens-proxy --name athens --namespace athens \
--set gitconfig.enabled=true \
--set gitconfig.secretName=athens-proxy-gitconfig \
--set gitconfig.secretKey=gitconfig