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

圖片描述

相關文章
相關標籤/搜索