k8s的監控+HPA
一、 k8s的UI訪問介面-dashboard
在dashboard中,雖然可以做到建立、刪除、修改資源等操作,但通常情況下,我們會把它當做監控k8s叢集的軟體。
1、到GitHub主頁上搜尋"dashboard"即可。
//可以直接遠端執行對應的yaml檔案,不過,我們要看一看這個yaml檔案內都有些什麼內容,然後還需要將svc資源型別更改為NodePort的方式,所以這裡我們可以先將這個yam檔案下載到本地。
[root@master jk]# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
[root@master jk]# ls
recommended.yaml
//更改其SVC資源的型別
[root@master jk]# vim recommended.yaml
...
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
nodePort: 30100
selector:
k8s-app: kubernetes-dashboard
...
[root@master jk]# kubectl apply -f recommended.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
//通常,涉及到k8s的映象,國內下載往往很慢,不過這個還好。執行過後,檢視對應的SVC暴露埠,注意,這個是基於https的訪問。
[root@master jk]# kubectl get pod -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-76679bc5b9-fnbsz 1/1 Running 0 106s
kubernetes-dashboard-7f9fd5966c-5gms5 1/1 Running 0 106s
[root@master jk]# kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.100.13.74 <none> 8000/TCP 68s
kubernetes-dashboard NodePort 10.108.0.135 <none> 443:30100/TCP 69s
瀏覽器訪問:https://192.168.1.20:30100
//此時可以看到,登入dashboard有兩種方式,哪一種都可以。(這裡兩種方式都列舉出來)
基於token的方法登入dashboard
1、建立一個dashboard的管理使用者。
[root@master jk]# kubectl create serviceaccount dashboard-admin -n kube-system
2、繫結使用者為叢集管理使用者。
[root@master jk]# kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
3、獲取token
//得到token的名稱
[root@master jk]# kubectl get secrets -n kube-system | grep dashboard-admin
dashboard-admin-token-5l2vh kubernetes.io/service-account-token 3 2m41s
//檢視上述得到的secret資源的詳細資訊,會得到token. (後面加上剛得到的token名稱)
[root@master jk]# kubectl describe secrets -n kube-system dashboard-admin-token-5l2vh
4、在瀏覽器上使用token登入。
PS: 這裡訪問可能有一些瀏覽器登入會不成功,需要換成其他瀏覽器, 推薦:火狐,
把上面的token,長串字母,複製到Kubernetes 儀表盤的輸入token
基於kubeconfig配置檔案的方法登入dashboard
1、獲取token.
//得到token的名稱
[root@master jk]# kubectl get secrets -n kube-system | grep dashboard-admin
dashboard-admin-token-5l2vh kubernetes.io/service-account-token 3 2m41s
//檢視上述得到的secret資源的詳細資訊,會得到token. (後面加上剛得到的token名稱)
[root@master jk]# kubectl describe secrets -n kube-system dashboard-admin-token-5l2vh
2、生成kubeconfig配置檔案。
//設定一個環境變數代表獲取的token (注意,命令中間是有你剛得到的token名稱的)
[root@master jk]# DASH_TOKEN=$(kubectl get secrets -n kube-system dashboard-admin-token-5l2vh -o jsonpath={.data.token} | base64 -d)
//將k8s叢集的配置資訊寫入kubeconfig配置檔案中。(這裡寫自己的IP)
[root@master jk]# kubectl config set-cluster kubernetes --server=192.168.1.20:6443 --kubeconfig=/root/.dashboard-admin.conf
[root@master jk]# kubectl config set-credentials dashboard-admin --token=$DASH_TOKEN --kubeconfig=/root/.dashboard-admin.conf
[root@master jk]# kubectl config set-context dashboard-admin@kubernetes --cluster=kubernetes --user=dashboard-admin --kubeconfig=/root/.dashboard-admin.conf
[root@master jk]# kubectl config use-context dashboard-admin@kubernetes --kubeconfig=/root/.dashboard-admin.conf
3、將生成的/root/.dashboard-admin.conf的配置檔案,匯出並做儲存。
[root@master jk]# sz /root/.dashboard-admin.conf
4、從瀏覽器選擇kubeconfig的登入方式,然後匯入配置檔案即可。
二、Scope
安裝scope
[root@master jk]# kubectl apply -f "https://cloud.weave.works/k8s/scope.yaml?k8s-version=$(kubectl version | base64 | tr -d '\n')"
[root@master jk]# kubectl get ns
NAME STATUS AGE
default Active 7d21h
kube-node-lease Active 7d21h
kube-public Active 7d21h
kube-system Active 7d21h
kubernetes-dashboard Active 46m
weave Active 72s
[root@master jk]# kubectl get svc -n weave
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
weave-scope-app ClusterIP 10.106.175.206 <none> 80/TCP 91s
[root@master jk]# kubectl edit svc -n weave weave-scope-app
...
spec:
clusterIP: 10.106.175.206
externalTrafficPolicy: Cluster
ports:
- name: app
nodePort: 31658
port: 80
protocol: TCP
targetPort: 4040
selector:
app: weave-scope
name: weave-scope-app
weave-cloud-component: scope
weave-scope-component: app
sessionAffinity: None
type: NodePort //修改為NodePort
...
[root@master jk]# kubectl get svc -n weave
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
weave-scope-app NodePort 10.106.175.206 <none> 80:31658/TCP 2m44s
瀏覽器訪問:192.168.1.20:31658
三、Prometheus
PS: 在這裡部署的prometheus,是使用的coreos提供的prometheus專案。
下載壓縮包
[root@master jk]# wget https://github.com/prometheus-operator/kube-prometheus/archive/v0.3.0.tar.gz
解壓
[root@master jk]# tar -zxf v0.3.0.tar.gz
kube-prometheus-0.3.0
**MetricsServer:**是k8s叢集資源使用情況的聚合器,收集資料給k8s叢集內使用,如kubectl,hpa,scheduler等。
Prometheus Operator : 是一個系統檢測和警報工具箱,用來儲存監控資料。
**Prometheus node-exporter:**收集k8s叢集資源的資料,指定告警規則。
**Prometheus:**收集apiserver,scheduler,controller-manager,kubelet元件的資料,通過http協議傳輸。
**Grafana:**視覺化資料統計和監控平臺。
1.修改grafana-service.yaml檔案,更改為nodePort的暴露方式,暴露埠
[root@master manifests]# pwd
/root/kube-prometheus-0.3.0/manifests
[root@master manifests]# vim grafana-service.yaml
...
spec:
type: NodePort //修改為NodePort
ports:
- name: http
port: 3000
targetPort: http
nodePort: 31001 //可以自己設定,也可以不寫隨機對映
...
2.修改prometheus-service.yaml檔案,更改為nodePort的暴露方式,暴露埠
```bash
[root@master manifests]# vim prometheus-service.yaml
...
spec:
type: NodePort //修改為NodePort
ports:
- name: web
port: 9090
targetPort: web
nodePort: 31002 //可以自己設定,也可以不寫隨機對映
...
3.修改alertmanager-service.yaml檔案,更改為nodePort的暴露方式,暴露埠
```bash
[root@master manifests]# vim alertmanager-service.yaml
...
spec:
type: NodePort //修改為NodePort
ports:
- name: web
port: 9093
targetPort: web
nodePort: 31003 //可以自己設定,也可以不寫隨機對映
...
4.將這個目錄中的yaml檔案,全部執行。是執行以上yaml檔案的基礎環境配置。有可能因為目錄內yaml檔案過多,一次不能全部執行,所以咋執行的時候,多執行兩遍
[root@master manifests]# pwd
/root/kube-prometheus-0.3.0/manifests
[root@master manifests]# kubectl apply -f setup/
5.執行主yaml檔案。有可能因為目錄內yaml檔案過多,一次不能全部執行,所以執行的時候,多執行兩遍
[root@master kube-prometheus-0.3.0]# pwd
/root/kube-prometheus-0.3.0
[root@master kube-prometheus-0.3.0]# kubectl apply -f manifests/
部署成功字後,可以執行一條命令,檢視資源使用情況(MetricsServer必須部署成功)
[root@master ~]# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
master 2197m 54% 1165Mi 67%
node01 2756m 68% 1102Mi 64%
node02 3545m 88% 1011Mi 58%
檢視是否都執行成功
[root@master ~]# kubectl get pod -n monitoring
NAME READY STATUS RESTARTS AGE
alertmanager-main-0 2/2 Running 0 11m
alertmanager-main-1 2/2 Running 0 11m
alertmanager-main-2 2/2 Running 0 11m
grafana-77978cbbdc-f52sk 1/1 Running 0 10m
kube-state-metrics-7f6d7b46b4-4rd9h 3/3 Running 0 10m
node-exporter-8b2m7 2/2 Running 0 10m
node-exporter-kjzv4 2/2 Running 0 10m
node-exporter-vbw7m 2/2 Running 0 10m
prometheus-adapter-68698bc948-75zr6 1/1 Running 0 10m
prometheus-k8s-0 3/3 Running 1 10m
prometheus-k8s-1 3/3 Running 1 10m
prometheus-operator-6685db5c6-h4qm8 1/1 Running 0 12m
6.瀏覽器訪問grafana
7.匯入監控模板
從grafana的官網搜尋
四、HPA
可以根據當前Pod資源的使用率,比如說CPU、磁碟、記憶體等進行副本Pod的動態的擴容與縮容。
前提條件:系統應該能否獲取到當前Pod的資源使用情況(意思是可以執行kubectl top pod命令,並且能夠得到反饋資訊)。
heapster: 這個元件之前是整合在k8s叢集的,不過在1.12版本之後被移除了。如果還想使用此功能,應該部署metricServer,這個k8s叢集資源使用情況的聚合器。
這裡,我們使用一個測試映象,這個映象基於php-apache製作的docker映象,包含了一些可以執行cpu密集計算任務的程式碼。
//我們模擬執行一個Deployment資源物件,和SVC資源物件,待會要對他進行HAP控制。
下載之後可能需要更新,改個名就好了
[root@master ~]# docker tag mirrorgooglecontainers/hpa-example:latest mirrorgooglecontainers/hpa-example:test
提前準備好HAP的tar包
[root@master ~]# ls
[root@master ~]# docker load -i HPA.tar
[root@master ~]# kubectl run php-apache --image=mirrorgooglecontainers/hpa-example --requests=cpu=200m --expose --port=80
[root@master ~]# kubectl get deployments.
NAME READY UP-TO-DATE AVAILABLE AGE
php-apache 1/1 1 1 4m26s
[root@master ~]# kubectl top pod php-apache-867f97c8cb-fklcv
NAME CPU(cores) MEMORY(bytes)
php-apache-867f97c8cb-fklcv 5m 10Mi
建立HPA控制器。
[root@master ~]# kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
[root@master ~]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 2%/50% 1 10 1 23s
//建立一個應用,用來不停的訪問我們剛剛建立的php-apache的svc資源。
[root@master ~]# kubectl run -i --tty load-generator --image=busybox /bin/sh
//進入Pod內,執行此命令,用來模擬訪問php-apache的svc資源。
/ # while true; do wget -q -O- http://php-apache.default.svc.clus
ter.local ;done
//我們會發現,上述Deploymen對php-apache這個SVC不停的訪問,檢視對應的HPA資源它的CPU使用率明顯升高,這個時候,我們再去觀察php-apache這個Deployment,就會看到它的Pod數量也會不停的增加,直到我們設定HPA資源的最大Pod數量。
[root@master ~]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 35%/50% 1 10 1 4m50s
[root@master ~]# kubectl get deployments. -w
NAME READY UP-TO-DATE AVAILABLE AGE
load-generator 1/1 1 1 3m44s
php-apache 1/1 1 1 14m
//當然Pod數量不會繼續增加的時候,我們將訪問介面的服務停止掉,觀察php-apache這個Deployment資源的Pod數量的變化。當php-apache的CPU使用率完全降下來之後,hpa資源控制的Pod數量並沒有馬上降下來,這是因為,它要維護這個Pod數量一段時間,保證大量的訪問流量繼續訪問
資源限制
requests:代表容器啟動請求的資源限制,分配的資源必須要達到此要求
limits:代表最多可以請求多少資源
單位m:CPU的計量單位叫毫核(m)。一個節點的CPU核心數量乘以1000,得到的就是節點總的CPU總數量。如,一個節點有兩個核,那麼該節點的CPU總量為2000m。
基於pod
Kubernetes對資源的限制實際上是通過cgroup來控制的,cgroup是容器的一組用來控制核心如何執行程式的相關屬性接。針對記憶體、CPU和各種裝置都有對應的cgroup
預設情況下,Pod執行沒有CPU和記憶體限額。這意味著系統中的任何Pod將能夠像執行該Pod所在接地那一樣,消耗足夠多的CPU和記憶體。一般會針對某些應用的Pod資源進行資源限制,這個資源限制是通過resources和requests和limits來實現。
[root@master ~]# vim croup-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-cgroup
spec:
containers:
- name: pod-cgroup
imagePullPolicy: Always
image: httpd
ports:
- protocol: TCP
containerPort: 80
resources:
limits:
cpu: "4"
memory: 2Gi
requests:
cpu: 260m
memory: 260Mi
requests: 要分配的資源,limits為最高請求的資源值。可以簡單的理解為初始值和最大值。
基於名稱空間
1)計算資源配額
[root@master ~]# vim compute-resources.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-resources
spec:
hard:
pods: "20"
requests.cpu: "20"
requests.memory: 100Gi
limits.cpu: "40"
limits.memory: 200Gi
2)配置物件數量配額限制
[root@master ~]# vim object-counts.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: object-counts
spec:
hard:
configmaps: "10"
persistentvolumeclaims: "4"
replicationcontrollers: "20"
secrets: "10"
service.loadbalancers: "2"
3)配置CPU和記憶體的LimitRange
[root@master ~]# vim limitrange.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: 50Gi
cpu: 5
defaultRequest:
memory: 1Gi
cpu: 1
type: Container
default 即 limit的值。
defaultRequest 即 request的值
相關文章
- k8s全棧監控K8S全棧
- K8S的Kafka監控(Prometheus+Grafana)K8SKafkaPrometheusGrafana
- prometheus監控k8s叢集PrometheusK8S
- 如何監控容器或K8s中的OpenSearchK8S
- 拋磚系列之k8s HorizontalPodAutoscaler(HPA)K8S
- k8s 自動伸縮 pod(HPA)K8S
- Prometheus Operator(二) 監控k8s元件PrometheusK8S元件
- k8s與監控--k8s部署grafana6.0K8SGrafana
- k8s實踐——HPA實踐例項K8S
- k8s HPA(HorizontalPodAutoscaler)--自動水平伸縮K8S
- K8S部署WGCLOUD運維監控系統K8SGCCloud運維
- 使用metrics-server監控k8s的資源指標ServerK8S指標
- 容器編排系統K8s之HPA資源K8S
- k8s監控指標整改のthanos轉VictoriaMetricsK8S指標
- 使用 Skywalking 對 Kubernetes(K8s)中的微服務進行監控K8S微服務
- 利用VisualVm和JMX遠端監控K8S裡的Java程式LVMK8SJava
- APM效能監控軟體的監控型別服務及監控流程型別
- K8S原來如此簡單(五)Metrics Server與HPAK8SServer
- 黑盒監控、日誌監控
- 對於k8s微服務的效能測試監控平臺搭建K8S微服務
- 6.prometheus監控--監控dockerPrometheusDocker
- TiDB監控實現--存活監控TiDB
- 在k8s中快速搭建基於Prometheus監控系統K8SPrometheus
- k8s中使用prometheus operator監控外部伺服器部署的windows exporterK8SPrometheus伺服器WindowsExport
- 一種對雲主機進行效能監控的監控系統及其監控方法
- 監控
- 基於Heapster的HPA
- upptime:使用GitHub Actions監控你的網站健康監控Github網站
- 聊聊前端監控——錯誤監控篇前端
- k8s 自動擴縮容HPA原理及adapter配置詳解?K8SAPT
- K8S Canal基於Prometheus進行實時指標監控K8SPrometheus指標
- k8s event監控利器kube-eventer對接企微告警K8S
- 11.prometheus監控之黑盒(blackbox)監控Prometheus
- 3-主機監控、應用監控
- Prometheus+Grafana實現服務效能監控:windows主機監控、Spring Boot監控、Spring Cloud Alibaba Seata監控PrometheusGrafanaWindowsSpring BootCloud
- zabbix監控
- centos 監控CentOS
- nginx監控Nginx