快速搭建雲原生開發環境(k8s+pv+prometheus+grafana)

来源:https://www.cnblogs.com/bolingcavalry/archive/2023/09/23/17724658.html
-Advertisement-
Play Games

歡迎訪問我的GitHub 這裡分類和彙總了欣宸的全部原創(含配套源碼):https://github.com/zq2599/blog_demos 本篇概覽 欣宸正在為接下新的Java雲原生實戰系列原創做準備,既然是實戰,少不了一套雲原生環境,以下內容是必不可少的: linux操作系統 kuberne ...


歡迎訪問我的GitHub

這裡分類和彙總了欣宸的全部原創(含配套源碼):https://github.com/zq2599/blog_demos

本篇概覽

  • 欣宸正在為接下新的Java雲原生實戰系列原創做準備,既然是實戰,少不了一套雲原生環境,以下內容是必不可少的:
  1. linux操作系統
  2. kubernetes
  3. kubernetes的外部存儲,平時資料庫、監控、消息這些中間件的數據不可能放在容器內,需要有個可靠的地方存起來不丟失
  4. 監控
  • 一番操作下來,輕鬆完成了上述工作,這裡將整個過程記錄定下來,這樣可以保證每次重裝都能輕鬆愉快的完成,省下的時間用來寫更多的技術原創

版本信息

  • 本次安裝的版本信息如下,供您參考
  1. 操作系統:CentOS 7.6 (騰訊雲輕應用伺服器)
  2. kubernetes:1.22 (底層容器服務是docker)
  3. prometheus:2.32.1
  4. grafana:8.3.3

初始化

  • CentOS操作系統的安裝就不在這裡講了,接下來的操作假設您已裝好純凈的CentOS系統
  • 本文中的操作都是用root賬號執行的
  • 安裝ssh服務
sudo yum install openssh-server -y
  • 修改root密碼
sudo passwd root
  • 修改ssh配置,允許root遠程登錄,文件是/etc/ssh/sshd_config,註意下圖兩個箭頭指向的配置,確保您的值與之一致
    在這裡插入圖片描述
  • 安裝常用軟體:
yum install redhat-lsb lrzsz wget -y
  • 關閉防火牆
systemctl stop firewalld && \
systemctl disable firewalld && \
setenforce 0
  • 接下來可以安裝k8s了,如果網速正常,可以採用k8s安裝(線上下載鏡像和文件)章節的方法,如果網路太慢,或者像我這樣使用騰訊雲伺服器時發現下載文件太慢,可以採用k8s安裝(使用離線的鏡像和文件)章節的方法

k8s安裝(線上下載鏡像和文件)

tar -zxvf sealos_4.1.3_linux_amd64.tar.gz sealos &&  chmod +x sealos && mv sealos /usr/bin
  • 然後一行命令安裝k8s
sealos run labring/kubernetes-docker:v1.22.8-4.1.3 labring/helm:v3.8.2 labring/calico:v3.24.1 --single
  • 等待三分鐘左右,K8S單機版安裝完成,控制台輸出如下
    在這裡插入圖片描述
  • 查看系統pod,一切正常
[root@VM-12-12-centos k8s]# kubectl get pods -A
NAMESPACE          NAME                                       READY   STATUS    RESTARTS   AGE
calico-apiserver   calico-apiserver-67b7856948-bg2wh          1/1     Running   0          12s
calico-apiserver   calico-apiserver-67b7856948-fz64n          1/1     Running   0          12s
calico-system      calico-kube-controllers-78687bb75f-z2r7m   1/1     Running   0          41s
calico-system      calico-node-l6nmw                          1/1     Running   0          41s
calico-system      calico-typha-b46ff96f6-qqzxb               1/1     Running   0          41s
calico-system      csi-node-driver-lv2g2                      2/2     Running   0          21s
kube-system        coredns-78fcd69978-57r7x                   1/1     Running   0          47s
kube-system        coredns-78fcd69978-psjcs                   1/1     Running   0          46s
kube-system        etcd-vm-12-12-centos                       1/1     Running   0          60s
kube-system        kube-apiserver-vm-12-12-centos             1/1     Running   0          61s
kube-system        kube-controller-manager-vm-12-12-centos    1/1     Running   0          62s
kube-system        kube-proxy-x8nhg                           1/1     Running   0          47s
kube-system        kube-scheduler-vm-12-12-centos             1/1     Running   0          60s
tigera-operator    tigera-operator-6f669b6c4f-t8t9h           1/1     Running   0          46s
  • 由於是單機版,需要去除污點才能使用,執行以下命令
kubectl taint nodes --all node-role.kubernetes.io/master-

k8s安裝(使用離線的鏡像和文件)

  • 如果您通過上面一段的操作順利裝好k8s,那麼這一段內容可以直接跳過
  • 我用的是騰訊雲輕應用伺服器,在安裝過程中發現下載sealos的文件非常慢,於是使用了以下方法來提升安裝速度,如果您遇到了同樣問題也可以參考這種方法
  • 為了簡單省事兒,本次打算使用sealos安裝K8S單機版,底層容器是docker
  • 在CSDN下載四個文件,它們的下載地址如下,下載後存放在CentOS伺服器上的同一個目錄下(不要積分,免費下載):
  1. https://download.csdn.net/download/boling_cavalry/86908222
  2. https://download.csdn.net/download/boling_cavalry/86908229
  3. https://download.csdn.net/download/boling_cavalry/86908433
  4. https://download.csdn.net/download/boling_cavalry/86908647
  • 確認一下,四個文件名依次是:sealos_4.1.3_linux_amd64.tar.gz、helm.tar、calico.tar、kubernetes.tar
  • ssh進入上述四個文件的存放目錄
  • 首先是操作sealos_4.1.3_linux_amd64.tar.gz文件
tar zxvf sealos_4.1.3_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin
  • 再用sealos工具載入其他三個文件
sealos load -i kubernetes.tar
sealos load -i helm.tar
sealos load -i calico.tar
  • 此時,再執行以下命令安裝k8s
sealos run labring/kubernetes-docker:v1.22.8-4.1.3 labring/helm:v3.8.2 labring/calico:v3.24.1 --single
  • 等待三分鐘左右,K8S單機版安裝完成,控制台輸出如下
    在這裡插入圖片描述
  • 查看系統pod,一切正常
[root@VM-12-12-centos k8s]# kubectl get pods -A
NAMESPACE          NAME                                       READY   STATUS    RESTARTS   AGE
calico-apiserver   calico-apiserver-67b7856948-bg2wh          1/1     Running   0          12s
calico-apiserver   calico-apiserver-67b7856948-fz64n          1/1     Running   0          12s
calico-system      calico-kube-controllers-78687bb75f-z2r7m   1/1     Running   0          41s
calico-system      calico-node-l6nmw                          1/1     Running   0          41s
calico-system      calico-typha-b46ff96f6-qqzxb               1/1     Running   0          41s
calico-system      csi-node-driver-lv2g2                      2/2     Running   0          21s
kube-system        coredns-78fcd69978-57r7x                   1/1     Running   0          47s
kube-system        coredns-78fcd69978-psjcs                   1/1     Running   0          46s
kube-system        etcd-vm-12-12-centos                       1/1     Running   0          60s
kube-system        kube-apiserver-vm-12-12-centos             1/1     Running   0          61s
kube-system        kube-controller-manager-vm-12-12-centos    1/1     Running   0          62s
kube-system        kube-proxy-x8nhg                           1/1     Running   0          47s
kube-system        kube-scheduler-vm-12-12-centos             1/1     Running   0          60s
tigera-operator    tigera-operator-6f669b6c4f-t8t9h           1/1     Running   0          46s
  • 由於是單機版,需要去除污點才能使用,執行以下命令
kubectl taint nodes --all node-role.kubernetes.io/master-

安裝本地pv

  • 本地pv的作用是給所有pvc提供存儲空間
  • 實測發現,安裝本地pv的過程中,有兩個鏡像經常會拉取失敗,建議您先下載tar到伺服器,在伺服器上通過docker load命令載入後再部署本地pv
  • 請在CSDN下載兩個鏡像的tar文件,地址如下(不要積分,免費下載)
  1. https://download.csdn.net/download/boling_cavalry/86908763 (下載後是個zip,解壓後,文件夾裡面才是真正的tar)
  2. https://download.csdn.net/download/boling_cavalry/86908874 (下載後是個zip,解壓後,文件夾裡面才是真正的tar)
  • 上述文件上傳到CentOS,執行以下命令載入兩個鏡像
docker load < busybox.tar
docker load < local-pv.tar
  • 下載本地pv的配置文件,地址是:https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.22/deploy/local-path-storage.yaml
  • 然後打開此文件,做以下四步操作
  • 第一,如下圖,刪除debug哪一行
    在這裡插入圖片描述
  • 第二,找到reclaimPolicy,將其值從Delete改為Retain
    在這裡插入圖片描述
  • 第三,增加下麵這句,使當前storageclass成為預設的storageclass
    在這裡插入圖片描述
  • 第四,修改下圖紅色箭頭位置,指向您自己電腦為pv準備的位置
    在這裡插入圖片描述
  • 設置完畢後,執行命令kubectl apply -f local-path-storage.yaml即可完成本地pv的創建
  • 如下圖紅色箭頭,新增的pv的pod
    在這裡插入圖片描述
  • 此時,k8s環境中的pvc,都可以使用storageClass=local-path來使用本地磁碟了

安裝Prometheus+Grafana(下載配置文件)

  • 接下來會用operator的方式部署Prometheus+Grafana,這是一種非常簡單使用的方法
  • 有幾個鏡像下載會超時,因此改為下載國內鏡像,然後用tag命令改為同名鏡像即可,命令如下:
docker pull docker.io/willdockerhub/prometheus-adapter:v0.9.1

docker tag docker.io/willdockerhub/prometheus-adapter:v0.9.1 k8s.gcr.io/prometheus-adapter/prometheus-adapter:v0.9.1

docker pull bolingcavalry/kube-state-metrics:v2.3.0

docker tag bolingcavalry/kube-state-metrics:v2.3.0 k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.3.0
  • 現在要下載operator的配置文件了, 打開Prometheus operator的GitHub主頁,首先確認自己的kubernetes版本應該使用哪個版本的Prometheus operator,如下圖,我這裡的kubernetes是1.22版本,因此使用的operator應該是release-0.9或者release-0.10
    在這裡插入圖片描述
  • 在operator的release頁面,找到release-0.10版本點擊下載
    在這裡插入圖片描述

安裝Prometheus+Grafana(修改配置文件:對外暴露服務)

  • 接下來對下載的配置文件做些修改

  • 首先是修改Grafana的service文件,因為預設的service是ClusterIP類型,無法從kubernetes外部訪問的,這裡改成集群外也可以訪問service,打開文件kube-prometheus-0.10.0/manifests/grafana-service.yaml,新增箭頭所指的兩行,註意31330埠是我隨便找的一個可用埠,您也可以隨意,在30000-32767之間即可
    在這裡插入圖片描述

  • 如果想通過外部訪問prometheus,可以用上述同樣的方法修改prometheus-service.yaml文件

  • 另外,如果您像我一樣是將服務部署在雲上(我這裡是騰訊雲),就涉及到公網IP的使用,請查找文件grafana-networkPolicy.yaml,如果有就刪除(0.10.0-release版本沒有這個文件),如果不刪除,就無發通過公網IP訪問grafana

  • 對於prometheus也是一樣,如果想從公網IP訪問prometheus,需要刪除文件prometheus-networkPolicy.yaml

安裝Prometheus+Grafana(配置外部存儲)

  • 解決了外部訪問的問題,接下來是存儲問題了,如果不將Prometheus和grafana的數據保存在容器外部的話,只要pod被刪,數據就丟失了,這在很多場景下是不可接受的
  • 既然前面咱們已經準備好了pv,那麼這裡就可以把prometheus和grafana的存儲改為pvc,讓它們的數據保存在pv上
  • 首先修改prometheus的存儲配置,打開文件prometheus-prometheus.yaml,如下圖,紅框內是新增內容(稍後我會把文字貼出來便於複製)
    在這裡插入圖片描述
  • 上圖紅框中的內容如下
  storage:
    volumeClaimTemplate:
      spec:
        storageClassName: local-path
        resources:
          requests:
            storage: 10Gi
  • 接著是grafana的存儲,進入目錄kube-prometheus-0.10.0/manifests/setup,新增名為grafana-pvc.yaml的文件,內容如下:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: grafana
  namespace: monitoring
spec:
  storageClassName: local-path
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  • 然後還要修改deployment配置,打開文件grafana-deployment.yaml,找到下圖紅色箭頭所指內容
    在這裡插入圖片描述
  • 替換成下圖紅框中的內容
    在這裡插入圖片描述

安裝Prometheus+Grafana(數據採集許可權)

  • 需要給足prometheus許可權,這樣它才能採集到用於展示的數據,打開文件prometheus-clusterRole.yaml,新增一些許可權配置,修改完畢後的完整內容如下所示,新增的位置主要在resources和varbs兩處
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    app.kubernetes.io/component: prometheus
    app.kubernetes.io/instance: k8s
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 2.32.1
  name: prometheus-k8s
  namespace: monitoring
rules:
- apiGroups:
  - ""
  resources:
  - nodes/metrics
  - services
  - endpoints
  - pods
  verbs:
  - get
  - list
  - watch
- nonResourceURLs:
  - /metrics
  verbs:
  - get
  • 再執行以下操作,給prometheus增加管理員身份(可酌情選擇)
kubectl create clusterrolebinding kube-state-metrics-admin-binding \
--clusterrole=cluster-admin  \
--user=system:serviceaccount:monitoring:kube-state-metrics
  • 至此,配置已經修改完成,可以啟動了

安裝Prometheus+Grafana(安裝和啟動)

  • 啟動過程分為兩步:先安裝再啟動
  • 首先,回到prometheus/kube-prometheus-0.10.0目錄,執行以下命令開始安裝
kubectl apply --server-side -f manifests/setup
  • 可能會遇到以下提示,我這邊放心起見重覆執行了一次安裝命令,就沒有此錯誤了
Error from server (NotFound): namespaces "monitoring" not found
  • 接下來可以啟動了,執行以下命令
kubectl apply -f manifests/
  • 查看pod情況,如下圖,大部分pod創建得很快,也有一兩個稍微慢一點的,實測兩三分鐘可以全部ready
    在這裡插入圖片描述
  • 再去看看數據捲使用情況,如下圖,已經分配好三個了
    在這裡插入圖片描述
  • 最後,如果您用的是雲伺服器,記得在公網放開埠,我這邊是騰訊雲伺服器,放開方式如下圖
    在這裡插入圖片描述

訪問grafana

  • 現在可以訪問grafana了,輸入IP:埠,會提示輸入賬號密碼,預設的賬號密碼都是admin
    在這裡插入圖片描述
  • 登錄成功後會提示修改初始密碼,按照提示操作即可
  • 然後就進入grafana頁面了,裡面已經內置了很多監控數據,這裡挑一個物理伺服器信息的監控數據看看,如下圖
    在這裡插入圖片描述
  • 再去看看給pv使用的伺服器磁碟,如下所示,已經創建了三個文件夾,都是容器在用的
[root@VM-12-12-centos local-path-provisioner]# pwd
/opt/local-path-provisioner
[root@VM-12-12-centos local-path-provisioner]# ls -al
total 20
drwxr-xr-x  5 root root 4096 Nov  5 10:02 .
drwxr-xr-x. 7 root root 4096 Oct 31 08:29 ..
drwxrwxrwx  3 root root 4096 Nov  5 10:06 pvc-0b8b93ae-944c-4433-a904-71c00d65c8ad_monitoring_prometheus-k8s-db-prometheus-k8s-0
drwxrwxrwx  6 root root 4096 Nov  5 10:53 pvc-9a5dccda-673f-4db8-a64e-baf4df5006cf_monitoring_grafana
drwxrwxrwx  3 root root 4096 Nov  5 10:06 pvc-bccf40a7-59a5-4472-a6a3-65f4898255d6_monitoring_prometheus-k8s-db-prometheus-k8s-1
  • 至此,k8s+pv+prometheus+grafana環境已經搭建完成,這樣的環境離生產環境還差得遠,但是作為日常開發和測試已經基本合格,如果您對雲原生感興趣,想要簡單快速的從零開始搭建一套環境用於學習和研發,希望本文能給您提供一些參考

  • 編寫本文時,有些操作步驟參考了這位大佬的,在此表示感謝:http://www.javajun.net/posts/5019/index.html

歡迎關註博客園:程式員欣宸

學習路上,你不孤單,欣宸原創一路相伴...


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.原始值和引用值 ECMScript變數包含兩種不同類型是數據:原始值和引用值。 原始值:最簡單的數據。有6中原始值:Undefined、Null、Boolean、Number、String和Symbol。原始值是按值訪問。 引用值:由多個值構成的對象。三大引用類型:1.object 2.Arra ...
  • 1、案例:猜數字 設置一個1-10之間的隨機數,然後輸入進行猜數字,猜的大了怎麼樣、猜的小了怎麼樣、猜對了怎麼樣 知識點:設置隨機數 、if判斷 、while迴圈 寫題思路: 1.設置彈框提出問題 2.定義一個隨機數0-10的數組 3.if 判斷 取值的範圍,在其範圍內反饋的結果 4.while迴圈 ...
  • 搭建後臺管理系統模板 2.1項目初始化 今天來帶大家從0開始搭建一個vue3版本的後臺管理系統。一個項目要有統一的規範,需要使用eslint+stylelint+prettier來對我們的代碼質量做檢測和修複,需要使用husky來做commit攔截,需要使用commitlint來統一提交規範,需要使 ...
  • Uber公司技術棧介紹 Uber(Uber Technologies,Inc.)中文譯作“優步”,是一家美國矽谷的科技公司。Uber在2009年,由加利福尼亞大學洛杉磯分校輟學生特拉維斯·卡蘭尼克和好友加勒特·坎普(Garrett Camp)創立。因旗下同名打車APP而名聲大噪。Uber已經進入中國 ...
  • 1. 定義通用返回結果類 ​ 定義ResultVO類,作返回給前端的對象結構,主要有4個欄位 code : 錯誤碼 data : 內容 message : 消息 description : 具體描述 import lombok.Data; import java.io.Serializable; / ...
  • 接上篇,當我們創建了很多類,比如 圖書館里的藏書,分社會科學類,藝術類、生活類、農業類、工業類等,而工業類又分為輕工業、重工業、信息工業,然後再細分。當分的越來越細時,程式就會越來越大。如何管理,便成了程式開發過程中一個重要的環節。於是可以按照圖書館分類管理的思想,對程式代碼進行管理。 將一個應用程 ...
  • Ribbon 簡介 Ribbon 是 Netfix 客戶端的負載均衡器,可對 HTTP 和 TCP 客戶端的行為進行控制。為 Ribbon 配置服務提供者地址後,Ribbon 就可以基於某種負載均衡演算法自動幫助服務消費者去請求。Ribbon 預設提供了很多負載均衡演算法,例如輪詢、隨機等,也可以為 R ...
  • 編譯nw-node版本的插件 下載nwjs對應版本的nodejs 原始源碼目錄 yh@yh:~/addon$ tree . ├── addon.cc ├── binding.gyp ├── CppLib │ ├── mynumber.cpp │ └── mynumber.h ├── myobject ...
一周排行
    -Advertisement-
    Play Games
  • 前言 微服務架構已經成為搭建高效、可擴展系統的關鍵技術之一,然而,現有許多微服務框架往往過於複雜,使得我們普通開發者難以快速上手並體驗到微服務帶了的便利。為瞭解決這一問題,於是作者精心打造了一款最接地氣的 .NET 微服務框架,幫助我們輕鬆構建和管理微服務應用。 本框架不僅支持 Consul 服務註 ...
  • 先看一下效果吧: 如果不會寫動畫或者懶得寫動畫,就直接交給Blend來做吧; 其實Blend操作起來很簡單,有點類似於在操作PS,我們只需要設置關鍵幀,滑鼠點來點去就可以了,Blend會自動幫我們生成我們想要的動畫效果. 第一步:要創建一個空的WPF項目 第二步:右鍵我們的項目,在最下方有一個,在B ...
  • Prism:框架介紹與安裝 什麼是Prism? Prism是一個用於在 WPF、Xamarin Form、Uno 平臺和 WinUI 中構建鬆散耦合、可維護和可測試的 XAML 應用程式框架 Github https://github.com/PrismLibrary/Prism NuGet htt ...
  • 在WPF中,屏幕上的所有內容,都是通過畫筆(Brush)畫上去的。如按鈕的背景色,邊框,文本框的前景和形狀填充。藉助畫筆,可以繪製頁面上的所有UI對象。不同畫筆具有不同類型的輸出( 如:某些畫筆使用純色繪製區域,其他畫筆使用漸變、圖案、圖像或繪圖)。 ...
  • 前言 嗨,大家好!推薦一個基於 .NET 8 的高併發微服務電商系統,涵蓋了商品、訂單、會員、服務、財務等50多種實用功能。 項目不僅使用了 .NET 8 的最新特性,還集成了AutoFac、DotLiquid、HangFire、Nlog、Jwt、LayUIAdmin、SqlSugar、MySQL、 ...
  • 本文主要介紹攝像頭(相機)如何採集數據,用於類似攝像頭本地顯示軟體,以及流媒體數據傳輸場景如傳屏、視訊會議等。 攝像頭採集有多種方案,如AForge.NET、WPFMediaKit、OpenCvSharp、EmguCv、DirectShow.NET、MediaCaptre(UWP),網上一些文章以及 ...
  • 前言 Seal-Report 是一款.NET 開源報表工具,擁有 1.4K Star。它提供了一個完整的框架,使用 C# 編寫,最新的版本採用的是 .NET 8.0 。 它能夠高效地從各種資料庫或 NoSQL 數據源生成日常報表,並支持執行複雜的報表任務。 其簡單易用的安裝過程和直觀的設計界面,我們 ...
  • 背景需求: 系統需要對接到XXX官方的API,但因此官方對接以及管理都十分嚴格。而本人部門的系統中包含諸多子系統,系統間為了穩定,程式間多數固定Token+特殊驗證進行調用,且後期還要提供給其他兄弟部門系統共同調用。 原則上:每套系統都必須單獨接入到官方,但官方的接入複雜,還要官方指定機構認證的證書 ...
  • 本文介紹下電腦設備關機的情況下如何通過網路喚醒設備,之前電源S狀態 電腦Power電源狀態- 唐宋元明清2188 - 博客園 (cnblogs.com) 有介紹過遠程喚醒設備,後面這倆天瞭解多了點所以單獨加個隨筆 設備關機的情況下,使用網路喚醒的前提條件: 1. 被喚醒設備需要支持這WakeOnL ...
  • 前言 大家好,推薦一個.NET 8.0 為核心,結合前端 Vue 框架,實現了前後端完全分離的設計理念。它不僅提供了強大的基礎功能支持,如許可權管理、代碼生成器等,還通過採用主流技術和最佳實踐,顯著降低了開發難度,加快了項目交付速度。 如果你需要一個高效的開發解決方案,本框架能幫助大家輕鬆應對挑戰,實 ...