最近公司里用到了aws的eks做集群,但是挂在需要s3(s3fs) 于是找了各种资料,即便是官方的文档,也有很多坑,所以我把在aws的eks里挂在 s3fs的方法在这里总结一下,并指出哪里有坑:
首先 官方文档的参考代码是 https://github.com/freegroup/kube-s3
进去之后 会看到里边有个yaml文件夹,其他的都不用看,完全没有卵用. 在yaml里 有个 configmap_secrets_template.yaml, 按照他的要求 把aws里你提前创建好的 bucket name 和 你对应 aws的 accessId 和 secretkey 添加好, 接下来 只需要 kubect create -f configmap_secrets_template.yaml 即可
接下来 要修改 daemonset.yaml 在这个文件中,如果你是16以上的k8s版本,在apiVersion 里 要改成 apps/v1,接下来是 他为了兼容老版本 在sepc中省略了 selector, 所以我们需要加上如下内容(在spec下,和template同级):
selector:
matchLabels:
app: s3-provider
完成以上2个修改后,还需要修改镜像, 镜像他写的是 freegroup/kube-s3 这样写默认是lastest, 但实际上 这景象根本没有lasetest版本!!以至于我们拥有pull不下来镜像,所以需要指定版本好:
freegroup/kube-s3:1.13
再修改了以上三处之后, 执行 kubectl create -f daemonset.yaml 恭喜,终于成功了, 查看pod也都可以running了.接下来我们可以使用他yaml里的 example_pod.yaml 来测试: kubectl create -f example_pod.yaml 然后进入pod kubectl exec -it test-pd -- /bin/sh 然后 cd /var/s3 && ls 你会发现你在aws上定义好的bucket中的数据都挂在进来了, 为什么是 /var/s3这个地址呢? 是因为pod的yaml中volumeMount挂载到了这个地方, 对应的volume的地址 我们可以在daemonset里修改,在pod的同步调整就好. 以上就是aws eks 挂在s3的整个过程. 不过官方建议使用aws的sdk调用bucket 因为s3速度效率较低.
最后,虽然我的同事看不到,但在这里向他表示感谢,我当时卡在daemonset的位置 ,搞了很久没出来,人家一会儿就搞定了, 唉 挫败感啊~不过也证明了自己还差得远. 好了. 这条手记就到这里了. 如果有用 欢迎点赞分享~哈哈哈