资讯专栏INFORMATION COLUMN

k8s与aws--add-ebs-tags-controller为ebs增加tag

chanjarster / 1778人阅读

摘要:但是可惜的是,当中的块存储并不支持这样的方式。都是监听指定资源,然后分别对和和三种事件,做出处理。部署具体部署的如下注意,加入集群中不存在角色,可以自行进行授权。例如创建成果以后,去的查看如下

前言

在使用aws的托管k8s--eks过程中,避免不了使用aws的LB和块存储。AWS公有云所有的资源都可以自定义tags,这样的好处就是可以根据tag具体含义来对资源进行不同维度的审计和统计。比如按照部门,按照项目,环境(test,prod,uat)等维度。在设置service的类型为Loadbanlance的时候,可以通过以下annotations来自定义tag。

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: nlb
    # service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
    service.beta.kubernetes.io/aws-load-balancer-additional-resource-tags: "sgt:env=prod,sgt:group=SGT,sgt:project=hawkeye"
  labels:
    app: prometheus-server
  name: prometheus-server
  namespace: kube-system
spec:
  ports:
  - name: http
    port: 9090
    protocol: TCP
    targetPort: 9090
  selector:
    app: prometheus-server
  type: LoadBalancer

但是可惜的是,k8s当中的块存储(ebs
)并不支持这样的方式。可能aws觉得存储比较便宜,不值得进行审计吧。但是本身ebs是支持打tag的。

所以为了满足我们司在k8s落地过程中对存储的审计,设计了add-ebs-tags-controller这个组件。

add-ebs-tags-controller 详解 设计思路

大家都知道k8s中对于存储是通过pv和pvc来实现的。因而add-ebs-tags-controller监听所有新建的pvc,然后获取到新建pvc的annotations(volume.beta.kubernetes.io/aws-block-storage-additional-resource-tags),最后调用aws的接口sdk,完成打tag的工作。

代码实现

具体代码参见 github。

代码相对比较简单,大家可以自行研究。总体实现思路和其他的controller类似。都是监听指定资源,然后分别对Update和add和delete三种事件,做出处理。

当然这里不得不提一下,k8s controller设计的核心理念,controller通过监听实际的状态(status) ,不断做出具体调整,向期望的状态(spec) 靠轮。

部署

具体部署的yaml如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: add-ebs-tags-controller
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: add-ebs-tags-controller
      task: tool
  template:
    metadata:
      labels:
        task: tool
        k8s-app: add-ebs-tags-controller
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ""
    spec:
      serviceAccount: cluster-admin
      containers:
      - name: add-ebs-tags-controller
        image: iyacontrol/add-ebs-tags-controller:0.0.1
        imagePullPolicy: IfNotPresent
        
   

注意serviceAccount: cluster-admin,加入集群中不存在admin角色,可以自行进行rbac授权。

demo

例如:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: prometheus-claim
  namespace: kube-system
  annotations:
    volume.beta.kubernetes.io/aws-block-storage-additional-resource-tags: "sgt:env=prod,sgt:group=SGT,sgt:project=hawkeye"
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi
      
      
   

创建成果以后,去aws的ui查看如下:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/33166.html

相关文章

  • 自定义 OpenShift s2i 镜像模板——OracleJDK8

    摘要:自定义镜像部分自定义镜像部分安装工具安装工具工具官方下载工具解压工具到查看版本初始化目录结构初始化目录结构笔者是在目录下开始操作的,提前说下免得读者操作有误。修改修改脚本只作启动功能,为了方便传调优参数,定制了环境变量供使用。 本文目标 由于 OpenShift 官方提供的镜像与模板(OpenJDK8)不完全满足业务需要: 不包含飞行记录功能。只有 OpenJD...

    graf 评论0 收藏0
  • 如何用Rancher在AWS上运行Kubernetes

    摘要:环境部署第一步,我会按默认的向导创建一个新的虚拟私有云,这个虚拟私有云是为准备的。的应用程序将自己在内运行。所有的主机都可以使用公有的,可如果你是在虚拟私有云上有主机的话,这就有点麻烦了,所以你可以选择使用私有而非公有。 众所周知,亚马逊有EC2容器服务,它是亚马逊用于运行Docker容器的解决方案。不过我觉得EC2容器服务不怎么好用,所以现在我要在AWS上测试Rancher和Kube...

    shinezejian 评论0 收藏0
  • 如何用Rancher在AWS上运行Kubernetes

    摘要:环境部署第一步,我会按默认的向导创建一个新的虚拟私有云,这个虚拟私有云是为准备的。的应用程序将自己在内运行。所有的主机都可以使用公有的,可如果你是在虚拟私有云上有主机的话,这就有点麻烦了,所以你可以选择使用私有而非公有。 众所周知,亚马逊有EC2容器服务,它是亚马逊用于运行Docker容器的解决方案。不过我觉得EC2容器服务不怎么好用,所以现在我要在AWS上测试Rancher和Kube...

    williamwen1986 评论0 收藏0
  • k8s审计-- 将clickhouse增加 heapster sink

    摘要:前言在资源审计和计费这块,容器和虚机有很大区别。支持诸多输出,称为。所以本文主要讲如何为增加。实际上,基于增加并且更改,也可以做到,只不过需要装一些包指令,结果就是镜像变大。实际运行日志截图由于的出色的写入性能,运行非常稳定。 前言 在k8s资源审计和计费这块,容器和虚机有很大区别。相对虚机来讲,容器不容易实现。资源指标收集可以采用heapster,也可以用prometheus。之前文...

    tunny 评论0 收藏0

发表评论

0条评论

chanjarster

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<