总结:不幸的是,块存储不支持这种方法。 它们都监视指定的资源并处理三个事件中的每一个。 部署具体部署如下: 请注意,没有角色可以加入集群,您可以自行批准。 例如,创建结果后,您可以这样查看它们:
前言
在使用aws、]eks托管k8s--的过程中,使用AWS LB和块存储是不可避免的。 AWS公有云中的所有资源都可以使用自定义标签进行标记。 这样做的好处是可以根据标签的具体含义,对资源进行不同维度的审计和统计。 例如,按部门、项目、环境(测试、生产、UAT)等维度。 如果您将服务类型设置为Loadbanance,则可以使用以下注解自定义标签:
apiVersion: v1kind: Servicemetadata: 注释:service.beta.kubernetes.io/aws-load-balancer-type: nlb # service.beta.kubernetes.io/aws[k4 ]负载-平衡器-内部:0.0.0.0/0 service.beta.kubernetes.io/aws-负载-平衡器-附加-资源-标签:“sgt:env =prod,sgt:group=SGT,sgt:project=hawkeye" 标签:应用程序:prometheus- 服务器名称:prometheus- 服务器命名空间:kube- 系统规格:端口:- 名称:http 端口: 9090 公共关系otocol: TCP targetPort: 9090 选择器: app: prometheus-server type: LoadBalancer
但不幸的是,k8s 中的块存储(ebs
)不支持这种方法。 也许 AWS 认为存储很便宜,不值得审核。 不过,ebs本身就支持标记。
因此,我们设计了 add-ebs-tags-controller 组件来适应 k8s 实施期间的存储审核。
add-ebs-tags-控制器详细解释设计思想
k8s通过PV和PVC存储我们都知道它正在发生。 因此,add-ebs-tags-controller 监控所有新创建的 pvc 以及新创建的 pvc 的注释(volume.beta.kubernetes.io/aws-block[k4 ]storage[ k4]Additional[k4 ]resource-tags),最后调用AWS Interface SDK完成标记任务。
代码实现
具体代码参见github。
代码比较简单,大家可以自己研究一下。 整体实现思路与其他控制器类似。 它们都监视指定的资源并分别处理三个事件:更新、添加和删除。
当然,k8s控制器设计的中心概念是控制器总是通过监控实际状态(status)并取决于期望的状态(specification)来进行某些调整,这里我不得不提一下。
部署
具体部署yaml为:
apiVersion: apps/v1kind: Deploymentmetadata: 名称: add-ebs-tags-controller 命名空间: kube-systemspec: 副本: 1 选择器: matchLabels: k8s-app: add-ebs-tags[k4 ]控制器任务:工具模板:元数据:标签:任务:工具 k8s-app:add-ebs-tags-控制器注释:scheduler.alpha.kubernetes.io/ritic-pod: ""规范: 服务帐户:集群 - 管理容器:- 名称:add-ebs-tags- 控制器映像:iyacontrol/add-ebs-tags- 控制器:请注意0.0.1 imagePullPolicy:IfNotPresent
serviceAccount:cluster-admin。 加入集群时没有管理员角色,您可以自行执行rbac身份验证。
演示
示例:
种类:持久 VolumeClamapiVersion:v1metadata:名称:prometheus-声明命名空间:kube-system注释:volume.beta.kubernetes.io/aws-block-storage-Additional-resource- 标签:“sgt:env=prod,sgt:group=SGT,sgt:project=hawkeye "spec: accessModes: - ReadWriteOnce Resource: Request: Storage: 50Gi
创建结果后,导航到 AWS UI 以查看以下内容:
评论前必须登录!
注册