日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

k8s资源监控

發布時間:2024/9/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 k8s资源监控 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Metrics-Server是集群核心監控數據的聚合器,用來替換之前的heapster。

容器相關的 Metrics 主要來自于 kubelet 內置的 cAdvisor 服務,有了Metrics-Server之后,用戶就可以通過標準的 Kubernetes API 來訪問到這些監控數據。

  • Metrics API 只可以查詢當前的度量數據,并不保存歷史數據。
  • Metrics API URI 為 /apis/metrics.k8s.io/,在 k8s.io/metrics 維護。
  • 必須部署 metrics-server 才能使用該 API,metrics-server 通過調用 Kubelet Summary API 獲取數據。

Metrics Server 并不是 kube-apiserver 的一部分,而是通過 Aggregator 這種插件機制,在獨立部署的情況下同 kube-apiserver 一起統一對外服務的。
kube-aggregator 其實就是一個根據 URL 選擇具體的 API 后端的代理服務器。

  • 將metrics-server部署配置所需的鏡像從官網上拉取下來,再上傳至自己的倉庫
[root@server1 harbor]# docker pull bitnami/metrics-server:0.4.0 [root@server1 harbor]# docker tag bitnami/metrics-server:0.4.0 reg.westos.org/library/metrics-server:v0.4.0 [root@server1 harbor]# docker push reg.westos.org/library/metrics-server:v0.4.0

從官網上可以下載到最新的部署yaml文件,由于我所拉取的鏡像是0.4.0版本的,所以我們下載yaml文件之后需要進行修改,保證鏡像與yaml文件中對應

[root@server2 ~]# mkdir metric-server/ [root@server2 ~]# cd metric-server/ [root@server2 metric-server]# wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml [root@server2 metric-server]# vim components.yaml 修改:v0.4.0, 和我所用的鏡像版本對應 [root@server2 metric-server]# kubectl apply -f components.yaml


應用完之后會出現報錯,我們對應解決報錯即可。

[root@server2 metric-server]# kubectl -n kube-system get pod


我們需要查看日志,查看錯誤,解決錯誤

[root@server2 metric-server]# kubectl logs -n kube-system metrics-server-589fcc5794-xgcnn
  • 錯誤1:dial tcp: lookup server2 on 10.96.0.10:53: no such host
    這是因為沒有內網的DNS服務器,所以metrics-server無法解析節點名字。可以直接修改coredns的configmap,講各個節點的主機名加入到hosts中,這樣所有Pod都可以從CoreDNS中解析各個節點的名字。
    $ kubectl edit configmap coredns -n kube-system
    apiVersion: v1
    data:
    Corefile: |

    ready
    hosts {
    172.25.0.11 server1
    172.25.0.12 server2
    172.25.0.13 server3
    fallthrough
    }
    kubernetes cluster.local in-addr.arpa ip6.arpa {
  • 報錯2:x509: certificate signed by unknown authority
    Metric Server 支持一個參數 --kubelet-insecure-tls,可以跳過這一檢查,然而官方也明確說了,這種方式不推薦生產使用。
    啟用TLS Bootstrap 證書簽發
    在配置文件最后一行加上```bash
    [root@server2 metric-server]# vim /var/lib/kubelet/config.yaml

    serverTLSBootstrap: true
    [root@server2 metric-server]# systemctl restart kubelet
```bash [root@server2 metric-server]# kubectl get csr [root@server2 metric-server]# kubectl certificate approve csr-5q6xw csr-nht9m csr-vs26q


可以查詢出現cpu和memory狀態就說明ok了

[root@server2 metric-server]# kubectl top node [root@server2 metric-server]# kubectl -n kube-system top pod

  • 錯誤3 也有可能會遇到以下錯誤,按照下面提示解決
    Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)
    如果metrics-server正常啟動,沒有錯誤,應該就是網絡問題。修改metrics-server的Pod 網絡模式:
    hostNetwork: true
[root@server1 harbor]# docker pull kubernetesui/metrics-scraper:v1.0.6 [root@server1 harbor]# docker tag kubernetesui/metrics-scraper:v1.0.6 reg.westos.org/kubernetesui/metrics-scraper:v1.0.6 [root@server1 harbor]# docker push reg.westos.org/kubernetesui/metrics-scraper:v1.0.6 [root@server1 harbor]# docker pull kubernetesui/dashboard:v2.2.0 [root@server1 harbor]# docker tag kubernetesui/dashboard:v2.2.0 reg.westos.org/kubernetesui/dashboard:v2.2.0 [root@server1 harbor]# docker push reg.westos.org/kubernetesui/dashboard:v2.2.0 [root@server2 ~]# mkdir dashboard/ [root@server2 ~]# cd dashboard/ [root@server2 dashboard]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml [root@server2 dashboard]# kubectl apply -f recommended.yaml

注意兩個鏡像名稱

[root@server2 dashboard]# kubectl -n kubernetes-dashboard describe sa kubernetes-dashboard [root@server2 dashboard]# kubectl describe secrets kubernetes-dashboard-token-nwnwc -n kubernetes-dashboard

將上面的token輸入網址就可以進入

HPA

官網:https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
HPA伸縮過程:
收集HPA控制下所有Pod最近的cpu使用情況(CPU utilization)
對比在擴容條件里記錄的cpu限額(CPUUtilization)
調整實例數(必須要滿足不超過最大/最小實例數)
每隔30s做一次自動擴容的判斷
CPU utilization的計算方法是用cpu usage(最近一分鐘的平均值,通過metrics可以直接獲取到)除以cpu request(這里cpu request就是我們在創建容器時制定的cpu使用核心數)得到一個平均值,這個平均值可以理解為:平均每個Pod CPU核心的使用占比。

HPA進行伸縮算法:
計算公式:TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target)ceil()表示取大于或等于某數的最近一個整數每次擴容后冷卻3分鐘才能再次進行擴容,而縮容則要等5分鐘后。
當前Pod Cpu使用率與目標使用率接近時,不會觸發擴容或縮容:
觸發條件:avg(CurrentPodsConsumption) / Target >1.1 或 <0.9

[root@server2 ~]# mkdir hpa/ [root@server2 ~]# cd hpa/ [root@server2 hpa]# vim hpa.yaml apiVersion: apps/v1 kind: Deployment metadata:name: php-apache spec:selector:matchLabels:run: php-apachereplicas: 1template:metadata:labels:run: php-apachespec:containers:- name: php-apacheimage: hpa-exampleports:- containerPort: 80resources:limits:cpu: 500mrequests:cpu: 200m---apiVersion: v1 kind: Service metadata:name: php-apachelabels:run: php-apache spec:ports:- port: 80selector:run: php-apache [root@server2 hpa]# kubectl apply -f hpa.yaml [root@server2 hpa]# kubectl describe svc php-apache [root@server2 hpa]# curl 10.108.66.200

[root@server2 hpa]# kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10 [root@server2 hpa]# kubectl get hpa

[root@server2 hpa]# kubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"


[root@server2 hpa]# vim hpa-v2.yaml apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata:name: php-apache spec:maxReplicas: 10minReplicas: 1scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: php-apachemetrics:- type: Resourceresource:name: cputarget:averageUtilization: 60type: Utilization- type: Resourceresource:name: memorytarget:averageValue: 50Mitype: AverageValue [root@server2 hpa]# kubectl apply -f hpa-v2.yaml [root@server2 hpa]# kubectl get hpa [root@server2 hpa]# kubectl get pod



Hpa會根據Pod的CPU使用率動態調節Pod的數量。

HELM

Helm是Kubernetes 應用的包管理工具,主要用來管理 Charts,類似Linux系統的yum。

Helm Chart 是用來封裝 Kubernetes 原生應用程序的一系列 YAML 文件。可以在你部署應用的時候自定義應用程序的一些 Metadata,以便于應用程序的分發。

對于應用發布者而言,可以通過 Helm 打包應用、管理應用依賴關系、管理應用版本并發布應用到軟件倉庫。

對于使用者而言,使用 Helm 后不用需要編寫復雜的應用部署文件,可以以簡單的方式在 Kubernetes 上查找、安裝、升級、回滾、卸載應用程序。

Helm V3 與 V2 最大的區別在于去掉了tiller:

Helm當前最新版本 v3.1.0 官網:https://helm.sh/docs/intro/

Helm安裝:

[root@server2 ~]# mkdir helm [root@server2 ~]# cd helm/ get helm-v3.4.1-linux-amd64.tar.gz [root@server2 helm]# tar zxf helm-v3.4.1-linux-amd64.tar.gz [root@server2 helm]# cd linux-amd64/ [root@server2 linux-amd64]# cp helm /usr/local/bin/ [root@server2 linux-amd64]# helm env[root@server2 ~]# helm repo add dandydev https://dandydeveloper.github.io/charts [root@server2 helm]# helm pull dandydev/redis-ha [root@server2 helm]# tar axf redis-ha-4.12.9.tgz [root@server2 helm]# cd redis-ha/ [root@server2 redis-ha]# vim values.yaml

本地倉庫里需要的鏡像 [root@server1 harbor]# docker pull redis:6.0.7-alpine [root@server1 harbor]# docker tag redis:6.0.7-alpine reg.westos.org/library/redis:6.0.7-alpine [root@server1 harbor]# docker push reg.westos.org/library/redis:6.0.7-alpine

將存儲位置指向默認分配 [root@server2 redis-ha]# kubectl patch storageclass managed-nfs-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

[root@server2 redis-ha]# helm install redis-ha . [root@server2 redis-ha]# kubectl get pod -w

會慢慢運行起來,等待全部運行起來即可

[root@server2 redis-ha]# kubectl exec -it redis-ha-server-0 sh -n default kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. Defaulting container name to redis. Use 'kubectl describe pod/redis-ha-server-0 -n default' to see all of the containers in this pod. /data $ redis-cli 127.0.0.1:6379> info

這里我們看到master是0

當我們把0的pod刪除之后,再次登陸一個查看master會調度到哪一個

[root@server2 redis-ha]# kubectl delete pod redis-ha-server-0 [root@server2 redis-ha]# kubectl exec -it redis-ha-server-1 sh -n default /data $ redis-cli 127.0.0.1:6379> info

這時我們看到現在1已經成為了master

手動創建

[root@server2 ~]# cd helm/ [root@server2 helm]# helm create mychart [root@server2 helm]# tree mychart/

[root@server2 helm]# cd mychart/ [root@server2 mychart]# vim Chart.yaml [root@server2 mychart]# vim values.yaml

檢測是否有錯誤

[root@server2 mychart]# cd .. [root@server2 helm]# helm lint mychart/


將應用打包

[root@server2 helm]# helm package mychart/ [root@server2 helm]# helm install demo mychart-0.1.0.tgz

[root@server2 helm]# helm history demo [root@server2 helm]# kubectl get pod

更新

[root@server2 helm]# helm upgrade demo mychart-0.1.0.tgz --set replicaCount=2


上傳

get helm-push_0.9.0_linux_amd64.tar.gz [root@server2 helm]# helm env //獲取插件目錄


安裝helm-push插件:

[root@server2 helm]# mkdir /root/.local/share/helm/plugins/push -p [root@server2 helm]# tar zxf helm-push_0.9.0_linux_amd64.tar.gz -C /root/.local/share/helm/plugins/push [root@server2 helm]# cd /etc/docker/certs.d/reg.westos.org/ [root@server2 reg.westos.org]# cp ca.crt /etc/pki/ca-trust/source/anchors/ [root@server2 reg.westos.org]# update-ca-trust [root@server2 reg.westos.org]# cd ~/helm/ [root@server2 helm]# helm repo add sun https://reg.westos.org/chartrepo/charts [root@server2 helm]# helm repo list

[root@server2 helm]# helm push mychart-0.1.0.tgz sun --insecure -u admin -p westos [root@server2 helm]# helm repo update [root@server2 helm]# helm search repo mychart


查看上傳的mychart應用:

[root@server2 ~]# helm uninstall demo [root@server2 ~]# helm install demo sun/mychart --set replicaCount=2

[root@server2 ~]# kubectl get pod [root@server2 ~]# kubectl get svc


訪問 svc分配的ip地址,查看是否負載均衡

[root@server2 ~]# curl 10.106.96.27 [root@server2 ~]# curl 10.106.96.27/hostname.html demo-mychart-8568b558d7-bsfth [root@server2 ~]# curl 10.106.96.27/hostname.html demo-mychart-8568b558d7-ldh25

[root@server2 mychart]# helm upgrade demo sun/mychart --set image.tag=v2 [root@server2 mychart]# curl 10.106.96.27


修改版本信息

[root@server2 mychart]# vim values.yaml [root@server2 mychart]# vim Chart.yaml



打包:

[root@server2 helm]# helm package mychart/


上傳

[root@server2 helm]# helm push mychart-0.2.0.tgz sun --insecure -u admin -p westos [root@server2 helm]# helm upgrade demo sun/mychart

[root@server2 helm]# kubectl -n ingress-nginx get all


在真機訪問的時候需要做好本地解析

[root@Sun_s Desktop]# curl demo.westos.org [root@Sun_s Desktop]# curl demo.westos.org/hostname.html

[root@server2 helm]# helm upgrade demo sun/mychart --set replicaCount=3 [root@server2 helm]# kubectl get pod

[root@server2 helm]# helm history demo


回滾:

[root@server2 helm]# helm rollback demo 1 [root@server2 helm]# kubectl get svc [root@server2 helm]# curl 10.106.96.27 Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a> [root@server2 helm]# curl 10.106.96.27/hostname.html

回滾成功:

部署metrics-server

[root@server1 harbor]# docker pull bitnami/metrics-server:0.4.2-debian-10-r0 [root@server1 harbor]# docker tag bitnami/metrics-server:0.4.2-debian-10-r0 reg.westos.org/bitnami/metrics-server:0.4.2-debian-10-r0 [root@server1 harbor]# docker push reg.westos.org/bitnami/metrics-server:0.4.2-debian-10-r0 [root@server2 ~]# cd metric-server/ [root@server2 metric-server]# kubectl delete -f components.yaml [root@server2 ~]# cd helm/metrics-server/ [root@server2 metrics-server]# kubectl create namespace metrics-server [root@server2 metrics-server]# vim values.yaml [root@server2 metrics-server]# helm install metrics-server . -n metrics-server



[root@server2 metrics-server]# kubectl -n kube-system edit cm coredns

[root@server2 metrics-server]# kubectl -n metrics-server get pod [root@server2 metrics-server]# kubectl -n metrics-server delete pod metrics-server-777f7bd69b-nc9bs


讓它重載以下

[root@server2 metrics-server]# kubectl -n kube-system get pod | grep coredns | awk '{system("kubectl -n kube-system delete pod "$1"")}' [root@server2 metrics-server]# kubectl -n metrics-server get pod

[root@server2 metrics-server]# kubectl top node [root@server2 metrics-server]# kubectl -n metrics-server get pod

部署kubeapps應用

為Helm提供web UI界面管理:

[root@server2 helm]# helm repo add stable http://mirror.azure.cn/kubernetes/charts/ [root@server2 helm]# helm pull bitnami/kubeapps [root@server2 helm]# tar zxf kubeapps-5.2.2.tgz [root@server2 helm]# cd kubeapps/


[root@server2 kubeapps]# cd charts/postgresql/ [root@server2 postgresql]# vim values.yaml

[root@server1 mnt]# docker load -i kubeapps-2.2.1.tar [root@server1 mnt]# docker images |grep reg.westos.org/bitnami | awk '{system("docker push "$1":"$2"")}' [root@server2 postgresql]# cd .. [root@server2 charts]# cd .. [root@server2 kubeapps]# helm install kubeapps -n kubeapps .


訪問:http://kubeapps.westos.org 注意:注意做好本地解析

[root@server2 kubeapps]# kubectl create serviceaccount kubeapps-operator -n kubeapps [root@server2 kubeapps]# kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=kubeapps:kubeapps-operator [root@server2 kubeapps]# kubectl -n kubeapps get sa [root@server2 kubeapps]# kubectl -n kubeapps describe sa kubeapps-operator


獲取token

[root@server2 kubeapps]# kubectl -n kubeapps describe secrets kubeapps-operator kubeapps-operator-token-v5zlj


將token輸入登陸即可

[root@server2 kubeapps]# kubectl -n kube-system edit cm coredns 之后需要把兩個dns pod刪掉,重載以下 [root@server2 kubeapps]# kubectl -n kube-system delete pod coredns-7f89b7bc75-6k74j coredns-7f89b7bc75-6npvv




創建 mychart pod


也可以做更新回滾刪除

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的k8s资源监控的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。