docker筆記34-容器資源需求、資源限制及HeapSter
容器的資源需求、資源限制
request:需求,最低保障,在排程時,這個節點必須要滿足request需求的資源大小。
limits:限制、硬限制。這個限制容器無論怎麼執行都不會超過limits的值。
CPU:在k8s的一個cpu對應一顆宿主機邏輯cpu。一個邏輯cpu還可以劃分為1000個毫核(millcores)。所以500m=0.5個CPU,0.5m相當於二分之一的核心。
記憶體的計量單位:E、P、T、G、M、K
[root@master scheduler]# kubectl explain pods.spec.containers.resources.requests [root@master scheduler]# kubectl explain pods.spec.containers.resources.limits
[root@master metrics]# cat pod-demo.yaml apiVersion: v1 kind: Pod metadata: name: pod-demo labels: app: myapp tier: frontend spec: containers: - name: myapp image: ikubernetes/stress-ng:v1 command: ["/usr/bin/stress-ng", "-m 1", "-c 1", "--metrics-brief"] #-m 1表示啟動一個子程式對記憶體做壓測,-c 1表示啟動一個子程式對cpu做壓測.預設stress-ng的一個子程式使用256M記憶體 resources: requests: cpu: "200m" memory: "128Mi" limits: cpu: "1" #沒有單位表示是1個cpu memory: "200Mi"
[root@master metrics]# kubectl apply -f pod-demo.yaml pod/pod-demo created
[root@master metrics]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE pod-demo 1/1 Running 0 6m 10.244.2.48 node2
[root@master metrics]# kubectl exec -it pod-demo -- /bin/sh / # top Mem: 3542328K used, 339484K free, 123156K shrd, 3140K buff, 1737252K cached CPU: 21% usr 4% sys 0% nic 73% idle 0% io 0% irq 0% sirq Load average: 1.31 1.00 0.74 4/968 1405 PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND 8 1 root R 6884 0% 1 15% {stress-ng-cpu} /usr/bin/stress-ng -m 1 -c 1 --metrics-brief 1404 9 root R 262m 7% 3 12% {stress-ng-vm} /usr/bin/stress-ng -m 1 -c 1 --metrics-brief 9 1 root S 6244 0% 2 0% {stress-ng-vm} /usr/bin/stress-ng -m 1 -c 1 --metrics-brief 1 0 root S 6244 0% 0 0% /usr/bin/stress-ng -m 1 -c 1 --metrics-brief 1202 0 root S 1508 0% 0 0% /bin/sh 1405 1202 root R 1500 0% 0 0% top
我們對容器分配了資源限制後,k8s會自動分配一個Qos,叫服務質量,透過kubectl describe pods xxx可以看到這個欄位。
Qos可以分為三類:
Guranteed:表示每個容器的cpu和記憶體資源設定了相同的requests和limits值,即cpu.requests=cpu.limits和memory.requests=memory.limits,Guranteed會確保這類pod有最高的優先順序,會被優先執行的,即使節點上的資源不夠用。
Burstable:表示pod中至少有一個容器設定了cpu或記憶體資源的requests屬性,可能沒有定義limits屬性,那麼這類pod具有中等優先順序。
BestEffort:指沒有任何一個容器設定了requests或者limits屬性,那麼這類pod是最低優先順序。當這類pod的資源不夠用時,BestEffort中的容器會被優先終止,以便騰出資源來,給另外兩類pod中的容器正常執行。
HeapSter
HeapSter的作用是收集個節點pod的資源使用情況,然後以圖形介面展示給使用者。
kubelet中的cAdvisor負責收集每個節點上的資源使用情況,然後把資訊儲存HeapSter中,HeapSter再把資料持久化的儲存在資料庫InfluxDB中。然後我們再透過非常優秀的Grafana來圖形化展示。
一般我們監控的指標包括k8s叢集的系統指標、容器指標和應用指標。
預設InfluxDB使用的是儲存卷是emptyDir,容器一關資料就沒了,所以我們生產要換成glusterfs等儲存卷才行。
InfluxDB:
[root@master metrics]# wget
[root@master metrics]# kubectl apply -f influxdb.yaml deployment.extensions/monitoring-influxdb created service/monitoring-influxdb created
[root@master metrics]# kubectl get svc -n kube-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE monitoring-influxdb ClusterIP 10.100.80.21 <none> 8086/TCP 17s
[root@master metrics]# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE monitoring-influxdb-848b9b66f6-ks69q 1/1 Running 0 10m
[root@master metrics]# kubectl log monitoring-influxdb-848b9b66f6-ks69q -n kube-system
這樣我們就部署好了influxdb。
下面我們開始部署heapster,但heapster依賴rbac。
所以我們先部署rbac,訪問
[root@master metrics]# kubectl apply -f clusterrolebinding.rbac.authorization.k8s.io/heapster created
所以下面我就可以部署heapster了。
訪問
[root@master ~]# kubectl apply -f serviceaccount/heapster created deployment.extensions/heapster created service/heapster created
[root@master ~]# kubectl get svc -n kube-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE heapster ClusterIP 10.100.35.112 <none> 80/TCP 1m
[root@master ~]# kubectl get pods -n kube-system -o wide NAME READY STATUS RESTARTS AGE IP NODE heapster-84c9bc48c4-8h6vf 1/1 Running 0 9m 10.244.1.63 node1
[root@master ~]# kubectl logs heapster-84c9bc48c4-8h6vf -n kube-system
上面我們把heapster元件裝完了,下面我們再裝Grafana。
訪問
我們為了能在叢集外部訪問Grafana,所以我們需要定義NodePort,所以在granfana.yaml檔案最後一行加個type: NodePort
[root@master ~]# wget
[root@master ~]# tail grafana.yaml # or through a public IP. # type: LoadBalancer # You could also use NodePort to expose the service at a randomly-generated port # type: NodePort ports: - port: 80 targetPort: 3000 selector: k8s-app: grafana type: NodePort
[root@master ~]# kubectl apply -f grafana.yaml deployment.extensions/monitoring-grafana created service/monitoring-grafana created
[root@master ~]# kubectl get svc -n kube-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE heapster ClusterIP 10.100.35.112 <none> 80/TCP 22m kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 37d kubernetes-dashboard NodePort 10.104.8.78 <none> 443:31647/TCP 16d monitoring-grafana NodePort 10.96.150.141 <none> 80:30357/TCP 2m monitoring-influxdb ClusterIP 10.100.80.21 <none> 8086/TCP 11h
[root@master ~]# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE monitoring-grafana-555545f477-qhb28 1/1 Running 0 5m
開啟瀏覽器,訪問宿主機ip:
據說在v1.12中,已經完全拋棄了heapster。
root@master ~]# kubectl top nodes [root@master ~]# kubectl top pod
按理說執行上面的兩個命令可以出結果,但是k8s從v1.11後不能用了,也無可奈何。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28916011/viewspace-2216324/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Kubernetes:容器資源需求與限制(約束)
- 容器技術之Docker資源限制Docker
- Docker的資源限制Docker
- Docker系列09—Docker的系統資源限制及驗證Docker
- 如何使用 Docker 來限制 CPU、記憶體和 IO等資源?Docker記憶體
- Kubernetes筆記(四):詳解Namespace與資源限制ResourceQuota,LimitRange筆記namespaceMIT
- 筆記資源整理筆記
- JVM 如何獲取當前容器的資源限制?JVM
- 白話 Linux 容器資源的隔離限制原理Linux
- docker筆記25-k8s-service資源Docker筆記K8S
- docker筆記26-ingress資源和ingress controllerDocker筆記Controller
- docker筆記35-資源指標API及自定義指標APIDocker筆記指標API
- 深入理解Kubernetes資源限制:記憶體記憶體
- 在kubernetes裡使用AppArmor限制容器對資源的訪問APP
- K8S(18)容器環境下資源限制與jvm記憶體回收K8SJVM記憶體
- docker筆記12-容器資料卷volumesDocker筆記
- Docker學習筆記:映象、容器、資料卷Docker筆記
- 如何設定Kubernetes資源限制
- Kubernetes資源請求與限制
- CORS(跨域資源共享)筆記CORS跨域筆記
- docker的資源控制(CPU、記憶體、IO)Docker記憶體
- 深入理解Kubernetes資源限制:CPU
- setrlimit函式限制程序資源MIT函式
- Effective C++ 筆記(3)資源管理C++筆記
- WPF筆記4——靜態資源(StaticResource)筆記
- 無線資源分配方法(筆記)筆記
- docker筆記22-k8s資源清單定義入門Docker筆記K8S
- Docker執行資源控制Docker
- 在Docker中,如何控制容器佔用系統資源(CPU,記憶體)的份額?Docker記憶體
- 【Docker】資料卷及容器連線Docker
- Docker筆記二之容器Docker筆記
- Docker筆記(六):容器管理Docker筆記
- docker學習筆記(4)- 應用資料管理(容器外)Docker筆記
- Oracle的過載保護-資料庫資源限制Oracle資料庫
- 資源畫像,讓容器資源規格的填寫不再糾結
- 自然語言處理常用資源筆記分享自然語言處理筆記
- 如何使用阿里雲容器服務保障容器的記憶體資源質量阿里記憶體
- 不止Docker:8款容器管理開源方案Docker