volume
Container 中的文件在磁盤上是臨時存放的,使之Container中運行的相對重要的應用業務帶來一些問題
- 第一個問題是當容器崩潰時文件丟失。kubelet 會重新啟動容器, 但容器會以干凈的狀態重啟
- 第二個問題是會在同一 Pod中運行多個容器並共享文件時出現,Kubernetes 卷(Volume) 這一抽象概念能夠解決這兩個問題
在 .spec.volumes
字段中設置為 Pod 提供的卷,並在 .spec.containers[*].volumeMounts
字段中聲明卷在容器中的掛載位置,容器中的進程看到的是由它們的 Docker 鏡像和卷組成的文件系統視圖。 Docker 鏡像 位於文件系統層次結構的根部。各個卷則掛載在鏡像內的指定路徑上。 卷不能掛載到其他卷之上,也不能與其他卷有硬鏈接。 Pod 配置中的每個容器必須獨立指定各個卷的掛載位置
臨時卷 ephemeral volume
節點通常還可以具有本地的臨時性存儲,由本地掛接的可寫入設備或者有時也用 RAM 來提供支持。 “臨時(Ephemeral)”意味着對所存儲的數據不提供長期可用性的保證。
Pods 通常可以使用臨時性本地存儲來實現緩沖區、保存日志等功能。 kubelet 可以為使用本地臨時存儲的 Pods 提供這種存儲空間,允許后者使用 emptyDir
類型的 卷將其掛載到容器中。
kubelet 也使用此類存儲來保存 節點層面的容器日志, 容器鏡像文件、以及運行中容器的可寫入層
kubelet 會將日志寫入到所配置的日志目錄(默認為 /var/log
)下的文件中; 還會針對其他本地存儲的數據使用同一個基礎目錄(默認為 /var/lib/kubelet
)
<root@HK-K8S-WN4 /var/lib/kubelet># ls -l total 40 -rw-r--r-- 1 root root 1270 Aug 16 15:59 config.yaml -rw------- 1 root root 62 Aug 15 15:03 cpu_manager_state drwxr-xr-x 3 root root 4096 Aug 15 15:13 csi-plugins drwxr-xr-x 2 root root 4096 Aug 19 15:31 device-plugins -rw-r--r-- 1 root root 211 Aug 16 12:29 kubeadm-flags.env drwxr-xr-x 2 root root 4096 Aug 15 15:03 pki drwxr-x--- 2 root root 4096 Aug 15 15:03 plugins drwxr-x--- 2 root root 4096 Aug 15 21:11 plugins_registry drwxr-x--- 2 root root 4096 Aug 16 16:00 pod-resources drwxr-x--- 6 root root 4096 Aug 19 15:32 pods <root@HK-K8S-WN4 /var/lib/kubelet># cd pods/ <root@HK-K8S-WN4 /var/lib/kubelet/pods># ls 410f3b52-3fa2-4a75-8811-bd2b4e60b1bd 75aa6245-eac7-46ee-9d13-7b521071074d 9d01c4c7-6c73-4bd0-8cf2-468b4a70d0f5 c0454f67-7c54-401d-99f7-0457601e181d
<root@SIT-K8S-WN4 /data/docker/containers/f810adcc256c2705f964464b4dea9566efe278429dee26eb23b1de16c863b8a8># cd /var/log/pods/ <root@SIT-K8S-WN4 /var/log/pods># ls default_prometheus-node-exporter-f29fl_474af7c9-f7e1-40c0-9111-9f0f48780005 sit_sit01-xy-loan-7fdffb898d-vgxs7_1ac6a779-8712-4958-a4f7-df10dcec5320 kube-system_calico-node-mvcpf_2b654b4c-c50d-495f-a644-1fa70df66f5f sit_sit02-coll-api-5886fb469d-975s8_182966ee-9e21-4354-a64e-9ef70acf070c kube-system_kube-proxy-7wxjb_9dbf490a-7929-4e37-9911-dd92201d4052 sit_sit02-coll-service-5dc5966794-bmkw2_3602f083-0b4c-47d0-a6db-0d925242cf0d kube-system_logtail-ds-bsrfz_e2090262-9ff0-4f92-8e58-6f2912453fb8 sit_sit02-common-service-6885494765-h4dtt_b3ef29cd-a7b8-484d-910b-92b37fb18d95 sit_sit01-coll-service-5d4979b488-md8n7_1beaee42-3308-44c8-a43a-8a697e61a950 sit_sit02-eureka-1_e21ab027-49d6-4987-9bf4-dc659ae4dd98 sit_sit01-common-gateway-6797fd5d84-g7nbt_641c992a-8850-458a-a687-dc695e5c701a sit_sit02-feserver-8568b7fbd-s8vv8_53dbce38-1d81-4313-995c-d98b9ccd75ad sit_sit01-eureka-2_870f5ed5-a6e9-4fdb-be34-e76484ebd1ea sit_sit02-nisp-gateway-b78bc8c47-s4ph4_1c687a04-c316-406d-836d-fa7d82c5acb5 sit_sit01-h5-chanel-n-orange-56c46db4f7-jfwjf_920266f4-452d-4eb3-9449-40ce7c4158bc sit_sit02-xc-flow-7d447db78f-75mtp_377436b2-55cc-43c8-8898-8433c5c82984 sit_sit01-risk-gateway-6c649bbd65-vblf2_7267767d-4c45-4a64-8d5e-17a7b8c0f112 sit_sit02-xc-fund-6888f8fc47-4444b_f73266bc-b865-4a2e-90ba-c894011cb6ac sit_sit01-risk-model-5fcdc7bfc8-c27ww_fb240c36-1e34-4be6-a9a4-4513d23809d5 sit_sit02-xc-loan-7c7c989c67-wf257_67371f1e-c6a6-4c6c-ad40-5de182507451 sit_sit01-xc-common-5f7db64b8-8c9nf_169b60be-68aa-4d98-b62d-c6adb6ffd0c5 sit_sit02-xy-risk-6f44cd4574-9zfgt_e7db4d6a-9399-4af0-8efc-8cbc73923fbd sit_sit01-xc-event-f898d48f8-ddw96_c6e67019-b539-423f-b2aa-f7de8d25a325 sit_sit02-xy-trade-7649b9c58b-sjs9q_018c651e-cdfa-4aac-80f8-90a08ead9e21 sit_sit01-xc-flow-5fb64b68bf-j6q99_fc72af00-d3c1-41dc-951c-a4b778338c7e sit_sit03-h5-chanel-n-orange-657887f5bf-hzgj7_b784c78f-430f-42ce-b7c8-bfa910e9fcc0 sit_sit01-xianxiang-manage-business-8484bd4b8f-t5zqh_b8a379b0-4e64-4e60-9c37-efc09fa79018 sit_sit03-xianxiang-credit-6859bcf9bb-zs5d8_9a903f01-2d58-4f88-b911-1fc64b28f3b2 sit_sit01-xianxiang-transaccount-5cf787c9bf-pd6q6_ba229ac2-ebc9-44ce-be09-d58ec5df2898 weave_weave-scope-agent-rj4jd_7701ce14-7853-4bd3-a781-c77a767619da
約束形式
spec.containers[].resources.limits.ephemeral-storage
spec.containers[].resources.requests.ephemeral-storage
驅逐處理
- 如果某 Pod 的臨時存儲用量超出了你所允許的范圍,kubelet 會向其發出逐出(eviction)信號,觸發該 Pod 被逐出所在節點。
- 就容器層面的隔離而言,如果某容器的可寫入鏡像層和日志用量超出其存儲約束, kubelet 也會將所在的 Pod 標記為逐出候選。
- 就 Pod 層面的隔離而言,kubelet 會將 Pod 中所有容器的約束值相加,得到 Pod 存儲約束的總值。如果所有容器的本地臨時性存儲用量總和加上 Pod 的 emptyDir 卷的用量超出 Pod 存儲約束值,kubelet 也會將該 Pod 標記為逐出候選