在kubernetes集羣內,當ConfigMap以volume形式掛載到pod內時,更新ConfigMap,kubernetes會自動同步被掛載到pod內的文件內容。固然並非更改當即生效的,大約是須要10S鍾後,纔會生效。實際生產使用案例中,假如你的應用具有hot reload 功能, 這時能夠增長一些監測配置文件變動的腳本,而後reload對應服務。好比prometheus。今天就給你們介紹一個configmap-reload 組件。linux
configmap-reload 採用rust語言實現,做爲主業務容器的sidercar,主要用於k8s當中監聽configmap的變化,待變化後經過http接口的方式通知主業務。在資源消耗上,更小。具體以下:git
[root@ip-172-xx-xx-10 src]# kubectl top pods NAME CPU(cores) MEMORY(bytes) configmap-reload-6bbbb8b45b-7zg2x 0m 1Mi
輸入參數能夠經過configmap-reload -h 獲取:github
configmap-reload 0.1.0 gaohj <gaohj2015@yeah.net> USAGE: configmap-reload [OPTIONS] FLAGS: -h, --help Prints help information -V, --version Prints version information OPTIONS: -l, --log_level <LOG_LEVEL> log level: error|warn|info|debug|trace [default: info] -p, --path <VOLUME_PATH> the config map volume directory to watch for updates [default: ] -m, --webhook_method <WEBHOOK_METHOD> the HTTP method url to use to send the webhook: GET|POST [default: POST] -c, --webhook_status_code <WEBHOOK_STATUS_CODE> the HTTP status code indicating successful triggering of reload [default: 200] -u, --webhook_url <WEBHOOK_URL> the HTTP method url to use to send the webhook [default: ]
示例使用:web
--- apiVersion: v1 kind: ConfigMap metadata: labels: app: configmap-reload name: configmap-reload-cm data: test.ini: |- key: a --- kind: Deployment apiVersion: apps/v1 metadata: name: configmap-reload labels: app: configmap-reload spec: replicas: 1 selector: matchLabels: app: configmap-reload template: metadata: labels: app: configmap-reload spec: volumes: - name: config configMap: name: configmap-reload-cm containers: - name: configmap-reload image: 'iyacontrol/configmap-reload:v0.1' command: - configmap-reload args: - -l - debug - -p - /etc/test/ - -c - '200' - -u - https://www.baidu.com volumeMounts: - name: config mountPath: /etc/test/ imagePullPolicy: Always ---
你們直接能夠拉取 dockerhub 中的鏡像。docker
固然倉庫中已經提供了Dockerfile文件,api
FROM clux/muslrust:stable as builder WORKDIR /configmap-reload COPY ./ ./ ARG use_mirror RUN if [ $use_mirror ]; then \ mkdir -p $HOME/.cargo; \ mv -f ./docker/cargo_config $HOME/.cargo/config; \ fi RUN cargo build --release ##################################### FROM alpine:latest as prod RUN apk add --no-cache ca-certificates COPY --from=0 /configmap-reload/target/x86_64-unknown-linux-musl/release/configmap-reload /usr/bin/configmap-reload RUN chmod +x /usr/bin/configmap-reload ENTRYPOINT ["configmap-reload"]
你們能夠本身打鏡像,而後push到本身的倉庫中。bash