我想在部署舵手時更新容器中的現有檔案settings.ini而不損害容器中的現有資料。
以下是我的舵手檔案 -
config.yaml
apiVersion: v1
kind: ConfigMap
metadata: ConfigMap
name: {{ .Values.metadata.name }}Config
資料:
settings.ini: ||
[服務器]
主機名 = "localhost"
hot_deployment = false
# offset = 10
[user_store]
type = "read_only_ldap"
部署部分來自Deployment.yaml
containers:
- name: {{ .Chart.Name }}.
securityContext:
{{- toYaml .Values. securityContext | nindent 12 }}.
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}.
port:
- name:/span> http
containerPort: 80
協議: TCP
volumeMounts:
- name: config-volume
mountPath: home/bin/conf/
subPath: settings.ini
卷軸:
- name:config-volume
configMap:
name: {{ .Values.metadata.name }}Config
我可以看到它成功地創建了配置圖,但是當我檢查集群中的日志時,它抱怨說缺少檔案
。我怎樣才能解決這個問題呢?
另外,如果我只是想為我的settings.ini檔案更新一些配置,并在不同的環境中使用不同的值,有沒有什么有效的方法來實作這個目標?
uj5u.com熱心網友回復:
如果你是在舊版本的Kubernetes上,改變configmap & secret將不會重新啟動你的容器。
你可以使用YAML應用或使用CLI編輯來手動更新configmap。
一旦configmap被更新,你可以簡單地應用helm命令來推出更新并改變/udpate新的容器。在這種情況下,舊的容器不會受到影響,而變化只是被推出來。
如果你正在尋找自動化的方法,你可以使用:https://github.com/stakater/Reloader
Reloader可以觀察ConfigMap和Secret的變化,并對Pod及其相關的DeploymentConfigs、Deployments、Daemonsets Statefulsets和Rollout進行滾動升級。
這里有一個很好的例子。https://github.com/stakater/Reloader/issues/46#issuecomment-457131306
apiVersion: apps/v1
kind: Deployment
metadata: Deployment
name: nginx-deployment
標簽:
app: nginx
注釋:
configmap.reloader.stakater.com/reload: "nginx-configmap"
spec:
選擇器:/span>
matchLabels:/span>
app: nginx
replicas: 3
模板:
metadata: metadata:
標簽:
應用程式: nginx
spec:
容器:
name: nginx
image: nginx
ports:
containerPort: 80
volumeMounts:
name: nginx-config1
mountPath: /etc/nginx/conf.d/default.conf
subPath: default.conf
volumes: default.conf
name: nginx-config1
configMap:
名稱: nginx-configmap
uj5u.com熱心網友回復:
在最近的k8s版本中安裝的配置圖會自動更新:
當卷中當前消耗的ConfigMap被更新時,預測的鍵也最終被更新。kubelet會在每次定期同步時檢查掛載的ConfigMap是否新鮮。
使用subPath卷掛載的容器可能不會收到更新。
可能的解決方案:
使用兩個容器:
使用兩個容器。
使用兩個容器:
- 主容器。將運行你的應用程式,監聽HTTP請求的特定埠/端點_路徑。在收到請求時,你的應用程式應該重新加載配置。由于
subPath方法被避免了,你可以將configMap存盤到其他目錄,之后在重新加載配置時移動/更新到想要的目錄。 - SideCar。將運行像configmap-reload這樣的檔案更改觀察程式,在檔案更改時,它將向主容器發送 HTTP 請求。
示例:
containers:
- name: main-tainer
image: application:v1.0.0
埠:
- name:/span> http
containerPort: 80
協議: TCP
volumeMounts:
- name: config-volume
mountPath: /some/path
- name: side-car
image: jimmidyson/configmap-reload:latest
args:
- "-volume-dir=/some/path"
- "-webhook-url=localhost:80/reload-config"
volumeMounts:
- name:config-volume
mountPath: /some/path
volumes:
- name: config-volume
configMap:
name: {{ .Values.metadata.name }}Config
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/319484.html
標籤:
下一篇:如何在一個陣列中測驗相同的物件?
