匿名
尚未登入
登入
頂極製作所
搜尋
檢視 緯育 2026-0531 的原始碼
出自頂極製作所
命名空間
頁面
討論
更多
更多
頁面操作
閱讀
檢視原始碼
歷史
←
緯育 2026-0531
由於下列原因,您沒有權限進行編輯此頁面的動作:
您請求的操作只有這個群組的使用者能使用:
管理員
您可以檢視並複製此頁面的原始碼。
本次講座串連 Kubernetes(K8s)中的 Pod 調度、節點汙點/容忍(Taint/Toleration)、Deployment 的滾動更新,以及 Service、ConfigMap、Secret 的實務操作與網路架構。內容依序說明: * Pod 調度的三種方式(全自動、定向調度 NodeSelector、親和性 Affinity),著重於如何透過節點標籤與 nodeSelector 精準部署,並補充 Node/POD Affinity 與 Anti-Affinity 的彈性規則。 * Master(控制平面)節點預設帶有 Taint,避免一般工作負載調度至管理面;介紹 Taint Effect(三類:NoSchedule、PreferNoSchedule、NoExecute)與容忍(Toleration)匹配條件(key、operator、value、effect),示範移除/加回 taint 的影響與 Pending 排障。 * Deployment 的滾動更新機制:新版本未成功前舊版本保留,確保不中斷。 * Service 的核心概念(VIP、Endpoints、Label Selector)與型態(ClusterIP、NodePort、LoadBalancer)、FQDN 服務發現、端口定義(Port/TargetPort/NodePort),說明 ClusterIP 不可 ping 屬預期、NodePort 範圍 30000–32767 與外部存取路徑,並以負載平衡器/反向代理在正式環境提供標準入口與高可用。 * 設定管理:ConfigMap 與 Secret 的建立、以 env/envFrom 注入、以 Volume/volumeMounts 掛載、正確 items 語法整併多檔;Secret 的 Base64 僅為編碼非加密,與 ConfigMap 在型態與用途上的差異與彈性選擇。 * YAML 編輯重點:階層與縮排、containers 列表語義、kubectl edit 的行為與可能的「放棄儲存」,鼓勵實作與排錯。 === Kubernetes 基礎與版本管理 === * 版本相容性風險:新舊版指令與功能可能不相容,需留意變更與公告。 * Deployment 滾動更新:變更即觸發 Rolling Update;新 Pod 成功前保留舊 Pod,維持服務穩定。 === Pod 調度機制 === * 全自動調度:由控制面自動挑選節點,易用但不一定滿足特殊需求。 * 定向調度(NodeSelector): ** 前置作業:對節點設定 label(kubectl label node [node] key=value)。 ** 在 Pod 規格加入 nodeSelector 與節點標籤匹配;可動態編輯 Deployment YAML 使 Pod 重新調度。 * 親和性(Affinity): ** Node Affinity:支援更複雜運算與權重。 ** Pod Affinity/Anti-Affinity:在拓撲域內約束 Pod 之間的同/異節點部署,兼顧效能與可用性。 === Master 節點與 Taint/Toleration === * 調度原則與 SPOF 風險:Master 不建議承載一般工作負載;測試環境可暫時移除 taint,生產環境應保留並增加 Worker 節點。 * Taint Effect: ** NoSchedule:新 Pod 不應調度入內。 ** PreferNoSchedule:盡量避免,非強制。 ** NoExecute:驅離既有與拒絕新 Pod,破壞性較高。 * Toleration 匹配:key、operator(Equal/Exists)、value、effect 必須對應;鍵名錯誤常致 Pending。 * 排障流程:kubectl describe pod/node 觀察 FailedScheduling 與節點 Taints;必要時以 kubectl taint node [node] [key]* 移除 taint。 === 實務場景:GPU/AI 資源保護 === * 在具 GPU 的節點加 taint,僅允許具 toleration 的負載調度;可搭配 nodeSelector/affinity 精準分配,避免資源被混用。 === Service 與網路存取 === * 為何需要 Service:提供穩定入口、服務發現與負載平衡;Deployment/Pod 本身不保證可存取。 * 核心機制:Service 建立 VIP,維護符合 selector 的 Endpoints;以 label 分群後端 Pod。 * 型態與存取: ** ClusterIP:叢集內存取,DNS 以「服務名稱.命名空間」解析;ClusterIP 不可 ping 屬正常。 ** NodePort:對外存取,預設範圍 30000–32767;使用「任一節點 IP:NodePort」到達後端。 ** LoadBalancer:雲端提供外部入口與健康檢查,高可用。 * 路徑等價理解:節點IP:NodePort ≈ Service ClusterIP:Port ≈ Endpoints(PodIP:ContainerPort)。 * 正式環境建議:以負載平衡器/反向代理在標準 80/443 導向至 NodePort,避免非標準埠帶來不專業印象。 === YAML 編輯與指令實作 === * YAML 結構:正確階層與縮排、containers 列表語義,避免語法錯誤導致儲存失敗或變更被捨棄。 * 常用操作: ** kubectl edit/describe/get/exec 實務用法與 Tab 補全。 ** 以 kubectl expose 快速建立 Service,設定 type/port/selector。 ** 以 Pod IP(應可通)與服務名稱(FQDN)測試;勿以 ping ClusterIP 判斷可用性。 === ConfigMap 與 Secret === * ConfigMap 用途:將設定與映像檔解耦,集中管理。建立方法: ** from-literal(key=value 直接宣告) ** from-env-file(讀取 .env,產出 key-value) ** from-file(整檔內容作為單一 key) * 在 Pod 中使用: ** env/envFrom.configMapRef 將 key-value 注入環境變數。 ** volume/volumeMounts 掛載為檔案;宣告 volumes 與對應的 volumeMounts 名稱一致,指定 mountPath。 * 多檔掛載正確語法: ** 以單一 Volume 的 configMap.items 指定多個 key 與 path,整併至同一目錄;避免用多個 volumeMounts 指向同一路徑(K8s 會靜默忽略重複)。 * Secret 比較與安全性: ** 與 ConfigMap 操作近似;generic 最常用。 ** Base64 僅為編碼非加密,可輕易解碼;機敏資料建議搭配外部金鑰管理(如 AWS 相關服務)。 ** K8s 不強制類型使用規則,視需求彈性選擇。 ** 其他類型:docker-registry(憑證)、tls(憑證/私鑰)。 [[檔案:2026-0531-01.png|800px]] === kubectl 指令與操作習慣 === * 常用動詞:create、edit、delete、get、expose;多做上機練習熟悉。 * -o 為輸出格式(如 -o yaml),持續監看使用 -w。 * 事件與日誌:kubectl describe 與 logs/事件查詢掌握資源狀態變化。 * 以 -f 檔案方式管理多物件 YAML(--* 分隔);create(新增、同名衝突)、apply(宣告式更新)、delete(依檔案或選擇器刪除)。 * 乾跑(dry-run):先檢查不套用,降低錯誤風險。 === 資源物件與標註機制 === * Label、Annotation、Taint 操作一致,describe 可檢視詳情。 * Taint 調度控制 Effect: ** NoExecute:阻止新調度並驅離既有不容忍 Pod。 ** NoSchedule:阻止新 Pod 調度至該節點。 ** PreferNoSchedule:盡量避免但非強制。 * 深入編輯 Deployment/Service YAML,強調正確縮排與從零撰寫。 === ConfigMap 與 Secret === * 用途定位:ConfigMap(非機敏設定)、Secret(機敏資料);Secret 並非絕對安全,需配合額外措施。 * 三種建立方式:--from-env-file、--from-file、--from-literal;需理解參數差異與適用場景。 * 以環境變數或檔案掛載載入至 Deployment。 === K8s 架構與網路 === * Control Plane(API Server、Scheduler、Controller Manager、etcd)高可用建議至少 3 節點;Worker 執行 Pod。 * 容器執行時:1.24 以後多用 containerd 等非 Docker。 * CNI 外掛示例:Calico 等,初期不必深究細節。 * Service 類型: ** ClusterIP:叢集內通訊,效率高,適合同叢集服務(如 WordPress 連資料庫)。 ** NodePort:對外暴露,示範用於理解機制,正式場景建議使用 Ingress/反向代理。 * 資安觀念:資料庫通常不對外暴露。 === 測試環境中的 NFS 共享與掛載 === * Master 分享 Data 目錄至「任何來源」僅限測試用,正式需限制 IP/網段與權限。 * 啟用 NFS Server/RPC,設定 exports,exportfs -v 驗證分享。 * Node1、Node2 於 /etc/fstab 新增 NFS 掛載(defaults),完成後以 mount/df 確認三節點 Data 一致。 * 以正確格式在 Slack 用 code block 傳指令,避免貼上時空白/格式錯誤。 === MariaDB(MyDB)部署與修正流程 === * 先建立/確認 ConfigMap 與 Secret,缺少密碼會導致 Pod 無法 Running。 * 建立 Deployment(名為 MyDB),以簡化字元集示範,不啟用 Unicode。 * kubectl edit 加入 env(引用 ConfigMap/Secret),儲存後觀察 ReplicaSet 與新 Pod 狀態至 Running。 * 使用 Tab 鍵指令補全,養成不依賴純貼上。 * 進入容器以 mysql -u root -p 建立資料庫(如 wp),並用 SHOW DATABASES; 驗證。 === 資料持久化與 Volume 掛載 === * 將資料庫/應用資料寫入 Volume,Deployment YAML 內先宣告 volumes,再於 containers.volumeMounts 掛載。 * 編輯成功後 Pod 重新建立,至掛載路徑確認檔案已落地。 * 層級辨識:Volume 為 Pod 層級,VolumeMount 掛載在 Container 層級;縮排錯誤易致設定失敗。 === WordPress(MyWeb)部署與配置 === * 建立 my-web 的 ConfigMap(可由 wordpress.yaml 建立),kubectl describe cm 檢視內容。 * 建立 MyWeb Deployment,初期狀態為 Pull Image,待 Running。 * kubectl edit deployment my-web,在 containers 區塊加入 env 引用 ConfigMap,讓 WordPress 透過環境變數連資料庫。 * 設定資料持久化:spec.volumes 指向共享目錄(如 /data/wordpress),containers.volumeMounts 掛載到 /var/www/html。 * 以 Service 對外檢視(示例埠 32089);叢集內部服務連線建議用 ClusterIP。 === 宣告式部署、備份/還原與 DevOps === * 教學從「分解動作」過渡到「一氣呵成」,以完整 YAML/JSON 定義 Deployment、Service、ENV、Volume,成為可重現配置。 * 匯出現有物件狀態作為備份,示範刪除 Deployment 後以設定檔 apply 一次性恢復。 * 版本管理多集中於 Image/Tag,更新主要修改設定檔中的 Image 欄位後套用。 * CI/CD 與 GitOps:Commit 觸發建置新 Image → 生成/更新 YAML → 交付至 K8s;工具如 Jenkins(Pipeline/Jenkinsfile)、Argo CD(宣告式部署),以 Git 作為單一真相源。 * IaC 與 Terraform:以程式化方式管理基礎架構與 K8s,多雲支援,體驗從建立到一鍵銷毀的流程;可結合 AI 協助撰寫,提高效率但需重視品質與驗證。 === 學習路徑、實作建議與常見卡關 === * 多次練習 YAML 的編排、編輯、儲存與除錯,前期需時間累積。 * 從零開發小型應用(如 Flask API),打包 Image、部署至 K8s,理解 Image、YAML、ConfigMap、Secret 的關聯與必要性。 * 叢集與工具串接(如 Jenkins、Argo CD)需要較高時間成本與跨領域理解。 * 課堂節奏彈性,鼓勵即時提問;講師與助教提供協助但鼓勵學員自主操作與錯誤學習。 [[檔案:2026-0531-02.png|800px]]
返回到「
緯育 2026-0531
」。
* [[檔案:2000-Dragon-30.png|15px]] [[附近走走]]<br> * [[檔案:2000-Dragon-30.png|15px]] [[應用程式]]<br> * [[檔案:2000-Dragon-30.png|15px]] [[郵遞區號]]<br> * [[檔案:2000-Dragon-30.png|15px]] [[作品紀錄]]<br> * [[檔案:2000-Dragon-30.png|15px]] [[攝影相簿]]<br> * [[檔案:2000-Dragon-30.png|15px]] [[網路書籤]]<br> * [[檔案:2000-Dragon-30.png|15px]] [[網路照片]]<br> * [[檔案:2000-Dragon-30.png|15px]] [[星艦日誌]]<br> * [[檔案:2000-Dragon-30.png|15px]] [[Privacy_Policy|隱私政策]]<br>
附近走走
應用程式
郵遞區號
作品紀錄
攝影相簿
網路書籤
網路照片
星艦日誌
隱私政策
首頁
wiki工具
wiki工具
特殊頁面
頁面工具
頁面工具
使用者頁面工具
更多
連結至此的頁面
相關變更
頁面資訊
頁面日誌