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

前言

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

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的。github

因此为了知足咱们司在k8s落地过程当中对存储的审计,设计了add-ebs-tags-controller这个组件。api

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的工做。app

代码实现

具体代码参见 githubui

代码相对比较简单,你们能够自行研究。整体实现思路和其余的controller相似。都是监听指定资源,而后分别对Update和add和delete三种事件,作出处理。spa

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

部署

具体部署的yaml以下:code

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受权。server

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查看以下:

图片描述

相关文章
相关标签/搜索