• 【K8s】专题五(5):Kubernetes 配置之热更新工具 Reloader


    以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!

    公众号二维码


    目录

    一、基本介绍

    二、工作原理

    三、部署方法

    四、使用方法


    一、基本介绍

    Reloader 是一个用于 Kubernetes 的工具,能够监听 Kubernetes 中 ConfigMap 和 Secret 的变化,并通过自动触发 Deployment、StatefulSet、Daemonset 等对象重启,实现应用程序配置的热更新(重新加载)。


    二、工作原理
    • 监听配置:Reloader 会监听指定 ConfigMap 或 Secret 的配置文件
    • 触发事件:当检测到配置文件内容发生变化时,Reloader 会触发一个事件
    • 重新加载:Reloader 向控制器发送信号,请求重启 Deployment、StatefulSet、Daemonset 等对象


    三、部署方法

    1、资源清单

    1. # reloader.yaml
    2. ## 定义 RBAC 对象
    3. apiVersion: v1
    4. kind: ServiceAccount
    5. metadata:
    6. name: reloader
    7. ---
    8. apiVersion: rbac.authorization.k8s.io/v1
    9. kind: Role
    10. metadata:
    11. name: reloader-role
    12. rules:
    13. - apiGroups:
    14. - ""
    15. resources:
    16. - secrets
    17. - configmaps
    18. verbs:
    19. - list
    20. - get
    21. - watch
    22. - apiGroups:
    23. - "apps"
    24. resources:
    25. - deployments
    26. - daemonsets
    27. - statefulsets
    28. verbs:
    29. - list
    30. - get
    31. - update
    32. - patch
    33. - apiGroups:
    34. - "extensions"
    35. resources:
    36. - deployments
    37. - daemonsets
    38. verbs:
    39. - list
    40. - get
    41. - update
    42. - patch
    43. - apiGroups:
    44. - ""
    45. resources:
    46. - events
    47. verbs:
    48. - create
    49. - patch
    50. ---
    51. apiVersion: rbac.authorization.k8s.io/v1
    52. kind: RoleBinding
    53. metadata:
    54. name: reloader-rolebinding
    55. roleRef:
    56. apiGroup: rbac.authorization.k8s.io
    57. kind: Role
    58. name: reloader-role
    59. subjects:
    60. - kind: ServiceAccount
    61. name: reloader
    62. ## 定义 Deployment 对象
    63. ---
    64. apiVersion: apps/v1
    65. kind: Deployment
    66. metadata:
    67. name: reloader
    68. spec:
    69. replicas: 1
    70. revisionHistoryLimit: 10
    71. strategy:
    72. type: RollingUpdate
    73. rollingUpdate:
    74. maxSurge: 25%
    75. maxUnavailable: 25%
    76. selector:
    77. matchLabels:
    78. app: reloader
    79. template:
    80. metadata:
    81. labels:
    82. app: reloader
    83. spec:
    84. containers:
    85. - name: reloader
    86. image: stakater/reloader:v1.0.12
    87. imagePullPolicy: IfNotPresent
    88. ports:
    89. - name: http
    90. containerPort: 9090
    91. env:
    92. - name: KUBERNETES_NAMESPACE
    93. valueFrom:
    94. fieldRef:
    95. fieldPath: metadata.namespace
    96. startupProbe:
    97. httpGet:
    98. path: /metrics
    99. port: http
    100. initialDelaySeconds: 5
    101. periodSeconds: 5
    102. timeoutSeconds: 5
    103. successThreshold: 1
    104. failureThreshold: 10
    105. readinessProbe:
    106. httpGet:
    107. path: /metrics
    108. port: http
    109. initialDelaySeconds: 5
    110. periodSeconds: 5
    111. timeoutSeconds: 5
    112. successThreshold: 1
    113. failureThreshold: 5
    114. livenessProbe:
    115. httpGet:
    116. path: /live
    117. port: http
    118. initialDelaySeconds: 5
    119. periodSeconds: 5
    120. timeoutSeconds: 5
    121. successThreshold: 1
    122. failureThreshold: 5
    123. resources:
    124. limits:
    125. cpu: 200m
    126. memory: 200Mi
    127. requests:
    128. cpu: 20m
    129. memory: 20Mi
    130. restartPolicy: Always
    131. securityContext:
    132. runAsNonRoot: true
    133. runAsUser: 65534
    134. serviceAccountName: reloader

    2、部署命令

    kubectl apply -f reloader.yaml


    四、使用方法

    在 Deployment、StatefulSet、DaemonSet 等对象的资源清单中,添加相应的 Annotation 注解即可,示例如下:

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. nanme: demo-deployment
    5. annotations:
    6. reloader.stakater.com/auto: "true"
    7. ...
    8. 🔔 reloader.stakater.com/auto: "true":对所有 ConfigMap 和 Secret 对象生效
    9. 🔔 configmap.reloader.stakater.com/reload: "demo1,demo2,...":对指定的 ConfigMap 对象生效
    10. 🔔 secret.reloader.stakater.com/reload: "demo1,demo2,...":对指定的 Secret 对象生效

  • 相关阅读:
    IDEA JAVA项目 导入JAR包,打JAR包 和 JAVA运行JAR命令提示没有主清单属性
    archlinux上使用picgo
    【改进粒子群】基于特征选择的二元粒子群优化算法(Matlab代码实现)
    Vue脚手架配置代理
    工业物联网蓝牙安全及基于标识算法的分布式鉴权技术研究
    查看进程时,遇到process information unavailable的解决方法
    Tomcat选择不同配置文件启动
    Day 89
    bugku-web-安慰奖
    TPH-yolov5论文解读
  • 原文地址:https://blog.csdn.net/2401_82795112/article/details/139804675