附加组件管理器(Addon-manager)是运行在 Kubernetes 集群 Master 节点、用来管理附加组件(Addons)的服务。它管理着 $ADDON_PATH(默认是 /etc/kubernetes/addons/)目录中的所有扩展,保证它们始终运行在期望状态。

Addon-manager 支持两种标签

  • 对于带有 addonmanager.kubernetes.io/mode=Reconcile 标签的扩展,无法通过 API 来修改,即

    • 如果通过 API 修改了,则会自动回滚到 /etc/kubernetes/addons/ 中的配置
    • 如果通过 API 删除了,则会通过 /etc/kubernetes/addons/ 中的配置自动重新创建
    • 如果从 /etc/kubernetes/addons/ 中删除配置,则 Kubernetes 资源也会删除
    • 也就是说只能通过修改 /etc/kubernetes/addons/ 中的配置来修改
  • 对于带有 addonmanager.kubernetes.io/mode=EnsureExists 标签到扩展,仅检查扩展是否存在而不检查配置是否更改,即

    • 可以通过 API 来修改配置,不会自动回滚
    • 如果通过 API 删除了,则会通过 /etc/kubernetes/addons/ 中的配置自动重新创建
    • 如果从 /etc/kubernetes/addons/ 中删除配置,则 Kubernetes 资源不会删除

部署方法

将下面的 YAML 存入所有 Master 节点的 /etc/kubernetes/manifests/kube-addon-manager.yaml 文件中:

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: kube-addon-manager
  5. namespace: kube-system
  6. annotations:
  7. scheduler.alpha.kubernetes.io/critical-pod: ''
  8. seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
  9. labels:
  10. component: kube-addon-manager
  11. spec:
  12. hostNetwork: true
  13. containers:
  14. - name: kube-addon-manager
  15. # When updating version also bump it in:
  16. # - test/kubemark/resources/manifests/kube-addon-manager.yaml
  17. image: k8s.gcr.io/kube-addon-manager:v8.7
  18. command:
  19. - /bin/bash
  20. - -c
  21. - exec /opt/kube-addons.sh 1>>/var/log/kube-addon-manager.log 2>&1
  22. resources:
  23. requests:
  24. cpu: 3m
  25. memory: 50Mi
  26. volumeMounts:
  27. - mountPath: /etc/kubernetes/
  28. name: addons
  29. readOnly: true
  30. - mountPath: /var/log
  31. name: varlog
  32. readOnly: false
  33. env:
  34. - name: KUBECTL_EXTRA_PRUNE_WHITELIST
  35. value: {{kubectl_extra_prune_whitelist}}
  36. volumes:
  37. - hostPath:
  38. path: /etc/kubernetes/
  39. name: addons
  40. - hostPath:
  41. path: /var/log
  42. name: varlog

源码

Addon-manager 的源码维护在 https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/addon-manager