iT邦幫忙

2026 iThome 鐵人賽

DAY 11
0

弄好 Service 之後,三個 Pod 回的都還是 nginx 那個預設歡迎頁。今天要把首頁換成自己的內容,順便認識 ConfigMap

設定或內容如果直接寫死在 Image 裡面,那每改一個字都要重新 build、重新推、重新部署。ConfigMap 的用途就是把這些會變的東西從 Image 裡面拉出來,變成叢集上的一份資料

configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: web-content
  namespace: ithome-lab
data:
  index.html: |
    <html>
      <body>
        <h1>ithome-lab day11</h1>
        <p>this page comes from a ConfigMap</p>
      </body>
    </html>

data 底下每一個鍵就是一份設定。這裡的 index.html 是鍵名,後面那個直立線是 YAML 的多行字串語法,意思是接下來縮排的那幾行都算同一個值,換行會被保留

等一下掛進 Pod 的時候,鍵名會變成檔名、值會變成檔案內容

然後改deployment.yaml,加兩段東西

    spec:
      containers:
        - name: nginx
          image: nginx:alpine
          ports:
            - containerPort: 80
          volumeMounts:
            - name: web-content
              mountPath: /usr/share/nginx/html/index.html
              subPath: index.html
      volumes:
        - name: web-content
          configMap:
            name: web-content
  • volumes 是宣告有哪些東西可以掛
  • volumeMounts 是決定掛到 Container 的哪個路徑,兩邊靠 name 對上。這個 name 只是隨便取的別名,跟 ConfigMap 的實際名稱是兩件不同的事,只是我懶得想所以取一樣的:)

/usr/share/nginx/html 是 nginx 放靜態檔案的預設位置。這裡要注意,如果直接把 ConfigMap 掛在這個目錄上,整個目錄會被換掉,image 內建的檔案像 50x.html 就不見了。只想換掉其中一個檔案就加 subPath,指定要掛的是 ConfigMap 裡的哪一個鍵,這樣被換掉的就只有 index.html

套用

kubectl apply -f manifests/base
kubectl rollout status deployment/web -n ithome-lab

因為 deployment.yaml 的 template 改了,apply 下去會自動觸發一次滾動更新

驗證

kubectl port-forward -n ithome-lab service/web 8080:80

https://ithelp.ithome.com.tw/upload/images/20260925/20176154jYebRYqed9.png

也可以直接進 Pod 裡面確認檔案真的在

kubectl exec deploy/web -n ithome-lab -- ls /usr/share/nginx/html
kubectl exec deploy/web -n ithome-lab -- cat /usr/share/nginx/html/index.html

deploy/web 會自己挑一個 Pod 進去,不用先去查 Pod 叫什麼,比前面要複製一長串亂碼方便多了

隨便改一下 configmap.yaml 裡面的文字,重新 apply,然後回去重整頁面

kubectl apply -f manifests/base/configmap.yaml

會發現沒變。ConfigMap 已經更新了,但 Pod 一個都沒動。這件事背後有好幾層原因,Day 22 會整篇拆開來講,今天先知道怎麼解決就好

解法是叫它重啟

kubectl rollout restart deployment/web -n ithome-lab
kubectl rollout status deployment/web -n ithome-lab

https://ithelp.ithome.com.tw/upload/images/20260925/20176154Qkfk4lPXiB.png

如果內容比較長,不想整段塞在 YAML 裡面,可以直接從檔案生

kubectl create configmap web-content -n ithome-lab --from-file=index.html --dry-run=client -o yaml

明天見 :D


上一篇
Day 10 Service
下一篇
Day 12 Secret
系列文
讓Claude Code當我的 K8s 助教:部署、故障排查與入門可觀測性 共 12 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言