【Kubernetes】三證集齊 Kubernetes實現資源超賣(附鏡像包)

目錄

  • 插敘
  • 前言
  • 一、思考和原理
  • 二、實現步驟
    • 0. 資料包
    • 1. TLS證書簽發
    • 2. 使用 certmanager 生成簽發證書
    • 3. 獲取secret的內容 并替換CA_BUNDLE
    • 4.部署svc + deploy
  • 三、測試驗證
    • 1. 觀察pod情況
    • 2. 給node 打上不需要超售的標簽【可以讓master節點資源不超賣】
    • 3. 資源實現超賣
    • 4. 刪除還原
  • 四、總結

插敘

友友們好久不見,插播一個最近get的證書,完成了第一步,一起努力鴨~
在這里插入圖片描述

前言

小濤運維時遇到一個問題,發現:容器在Kubernetes中,使用率要遠低于申請率
比如:申請了1G內存,實際只用了200M左右,
就會產生這種情況:node上還有資源,但是不能調度了(Why?因為k8s默認調度器是 按allocate算的,并不是真實剩余的)

那么怎么辦呢?

  1. 用scheduler extender寫一個調度器 ,用usage調度pod
  2. 按照namespace 把業務分開,在每個ns上設置resourceQuota -->相對最容易實現【yaml文件限制】
  3. 把pod的request降低
  4. 基于MutatingWebhook 把node的 allocatable 調高

今天,小濤講解的方法,是第四種----基于MutatingWebhook 把node的 allocatable 調高
下面和小濤看看吧~

一、思考和原理

思想:基于MutatingWebhook將allocatable調高,實現node資源超賣

#查看某個node節點當前資源情況
kubectl get nodes node2 -o yaml |grep allocatable: -A6

在這里插入圖片描述

核心點:動態修改節點Node對象的allocatable字段值

  • 而我們看到allocatable字段屬于Status字段
  • 顯然不能直接通過kubectl edit命令來直接修改。
  • 因為Status字段和Spec字段不同,Spec是用戶設置的期望數據
  • 而Status是實際數據(Node節點通過不斷向apiServer發送心跳來更新自己的實時狀態,最終存在etcd中)。那么怎么去修改Stauts字段呢?

二、實現步驟

0. 資料包

鏈接:https://pan.baidu.com/s/12AmYn5h_c_XrlH6iS-gSDQ
提取碼:sell

  • 實現的核心步驟
    • 證書和簽名:tls雙向認證需要
    • 編寫go項目代碼,實現webhook服務器,對node status字段更改
    • 部署webhook服務,編寫MutatingWebhookConfiguration 測試【把node 的status推送到中間件服務中】

1. TLS證書簽發

借助certmanager 簽發證書

#安裝部署
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.2/cert-manager.yaml#================================================================
#如果是內網環境,將yaml文件 wget后,再docker pull 對應的鏡像后,再導入到離線環境的鏡像倉庫【資料包里有相關鏡像資料】
wget https://github.com/cert-manager/cert-manager/releases/download/v1.8.2/cert-manager.yaml
docker pull quay.io/jetstack/cert-manager-cainjector:v1.8.2
docker pull quay.io/jetstack/cert-manager-controller:v1.8.2
docker pull quay.io/jetstack/cert-manager-webhook:v1.8.2
docker pull registry.cn-beijing.aliyuncs.com/dbatao/k8s-node-oversell:v1

檢查certmanager服務是否正常

$ kubectl apply -f cert-manager.yaml
$ kubectl get pod -n cert-manager

在這里插入圖片描述

2. 使用 certmanager 生成簽發證書

# cat cert.yaml
---
apiVersion: v1
kind: Namespace
metadata:name: node-oversell-webhook
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:name: selfsigned-issuernamespace: node-oversell-webhook
spec:selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:name: serving-certnamespace: node-oversell-webhook
spec:dnsNames:- node-oversell-webhook.node-oversell-webhook.svc- node-oversell-webhook.node-oversell-webhook.svc.cluster.localissuerRef:kind: Issuername: selfsigned-issuersecretName: webhook-server-cert
---# kubectl apply -f cert.yaml

查看證書是否已簽發完成

$ kubectl get certificate -n node-oversell-webhook

在這里插入圖片描述

3. 獲取secret的內容 并替換CA_BUNDLE

CA_BUNDLE=$(kubectl -n node-oversell-webhook get secrets webhook-server-cert  -o jsonpath="{.data.ca\.crt}")echo ${CA_BUNDLE}
sed -i "s|\${CA_BUNDLE}|${CA_BUNDLE}|g"  mutating_webhook.yamlcat mutating_webhook.yaml
kubectl apply -f mutating_webhook.yaml

在這里插入圖片描述

4.部署svc + deploy

kubectl apply -f webhook_deployment.yamlkubectl apply -f svc.yaml
curl -k https://svc_ip:443/readyz   #預期---返回ok

在這里插入圖片描述

三、測試驗證

1. 觀察pod情況

kubectl logs -n node-oversell-webhook node-oversell-webhook-7b75dd467b-hs9m9 --tail 10

2. 給node 打上不需要超售的標簽【可以讓master節點資源不超賣】

#將<node_name>更換為不用超賣節點的名稱,非常智能!!
$ kubectl label node <node_name> node-oversell/disable=true#例如
kubectl label node master01 node-oversell/disable=true#如果需要這個節點超賣,將標簽去掉即可
kubectl label node master01  node-oversell/disable-

3. 資源實現超賣

$ kubectl get nodes node2 -o yaml |grep allocatable: -A6#在Prometheus里用PromeQL也能查看到
kube_node_status_allocatable{}		#QL查詢語句

在這里插入圖片描述

4. 刪除還原

$ kubectl delete deploy -n node-oversell-webhook node-oversell-webhook
$ kubectl delete mutatingwebhookconfigurations node-oversell-webhook

四、總結

  • 我們再來回顧一下大致步驟
    在這里插入圖片描述

  • API-Server支持準入控制器中,準入控制器中有一個“修改性質的控制器”

    • 監聽node status的服務資源,牽引到某個服務上【這個服務中,把10G改成20G,再推送API-Server中】
    • Admission controller是攔截(經過身份驗證)API Server請求的網關,并且可以修改請求對象或拒絕請求。
    • k8s在Api-Server中就提供Admission Controller(準入控制器)的機制,包括MutatingAdmissionWebhook,通過這個webhook,所有在集群中和Api-Sever交互的請求都被發送到一個指定的接口中,我們只要提供一個這樣的接口,就可以獲取到Node往ApiServer發送心跳的Staus數據了。然后將這個數據進行我們的自定義修改,再往后傳給etcd,就能讓etcd以為我們修改過的Status數據就是節點的真實Status,最終實現資源的超賣。
    • MutatingAdmissionWebhook 作為kubernetes的 ApiServer中Admission Controller的一部分,提供了非常靈活的擴展機制,通過配置MutatingWebhookConfiguration對象,理論上可以監聽并修改任何經過ApiServer處理的請求。
  • 形象的通俗理解:古代時,大臣(node資源匯報)想匯報情況給皇帝(ETCD),需要通過太監進行傳達,那么太監可以修改奏本(allocatable)再傳給皇帝,以達到以假亂真的情形。

    • 而 k8s在Api-Server中就提供Admission Controller(準入控制器)的機制(可以修改性質的控制器)

今天也是充實的一天呢,有問題歡迎大家評論區交流,咱們下篇文章再見了~ 😉
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/23987.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23987.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23987.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[補題記錄]Leetcode 209.長度最小的子數組

傳送門&#xff1a;長度最小的子數組 Problem/題意 給定一個整數數組和一個整數 target&#xff0c;要求算出數組中最小長度的連續子數組&#xff0c;數組元素的和大于等于 target。 Thought/思路 題目要求維護最小的長度&#xff0c;因此我們希望&#xff1a;當條件不滿足…

IP域名關系的研究與系統設計(學習某知名測繪系統)

IP域名關系庫管理包括域名庫檢索和whois庫檢索&#xff0c;詳情如下。 域名庫檢索支持以下5項功能&#xff1a; 1.通過過濾器檢索 篩選條件包含IP地址、口令、工具名稱、可利用的漏洞編號、創建時間&#xff1b; 2.通過關鍵字檢索 在查詢框中輸入域名庫名稱的部分關鍵詞&a…

計算機組成結構—IO系統概述

目錄 一、I/O 系統的發展 1. 早期階段 2. 接口模塊和 DMA 階段 3. 通道結構階段 4. 處理機階段 二、I/O 系統的組成 1. I/O 軟件 2. I/O 硬件 三、I/O 設備 1. I/O 設備分類 2. I/O 設備的組成 在計算機中&#xff0c;除 CPU 和主存兩大模塊之外&#xff0c;第三個重…

Apple開發者應用商店(AppStore)描述文件及ADHOC描述文件生成

創建AD HOC描述文件 1.選中Profiles,然后點擊加號創建 2.創建已注冊設備可安裝描述文件 3.選擇要注冊的id 4.選擇證書 5.選擇設備 6.輸入文件名,點擊生成 7.生成成功,點擊下載

TCP為什么握手是三次,而揮手是四次

TCP&#xff08;傳輸控制協議&#xff09;使用三次握手&#xff08;3WHS&#xff09;來建立一個可靠的連接&#xff0c;并使用四次揮手&#xff08;4WHS&#xff09;來終止連接。以下是每個步驟的詳細解釋&#xff1a; 三次握手&#xff08;3WHS&#xff09;建立連接&#xff…

solidity的modifier修飾符

solidity的modifier修飾符 什么是modifier修飾符 修飾器&#xff08;modifier&#xff09;是solidity特有的語法&#xff0c;類似于面向對象編程中的decorator&#xff0c;聲明函數擁有的特性&#xff0c;并減少代碼冗余。 Solidity 中關鍵字 modifier 用于聲明一個函數修改…

electron調用dll時應用程序閃退

electron調用dll時&#xff0c;直接閃退&#xff0c;且用如下方式監聽無任何輸出&#xff1a; window-all-closed 或 will-quit 此時需要檢查傳給dll的參數及參數類型是否正確&#xff0c;特別是使用ffi-napi時調用dll&#xff0c;使用 ref-napi定義類型&#xff0c;經常容易…

go 源碼學習1:scanner學習

scanner所在包是scanner.go type scanner struct {// 步驟是一個函數&#xff0c;用于執行下一個轉換。// 也嘗試使用整數常量和單個函數以及帶有開關的函數&#xff0c;// 但是直接使用函數在64位Mac Mini上快了10%&#xff0c;// 而且閱讀起來更直觀。step func(*scanner, …

域名區分英文大小寫嗎?

在互聯網的早期&#xff0c;域名系統(DNS)的設計并沒有考慮大小寫敏感性。然而&#xff0c;隨著技術的發展和用戶需求的多樣化&#xff0c;域名的大小寫問題逐漸引起了人們的關注。本文將探討域名是否區分英文大小寫&#xff0c;以及這一特性對網站運營和用戶體驗的影響。 一、…

【Android】Git Patch生成的文件怎么合并到項目里面和遇到的一些問題

前言 Git patch是一種描述文件&#xff0c;它記錄了一系列的文件變更&#xff08;如新增、修改、刪除&#xff09;以及變更的具體內容。通過使用patch文件&#xff0c;可以將這些變更應用到其他代碼庫中&#xff0c;從而實現代碼的同步和更新。 Git 提供了兩種補丁方案&#…

Java使用OpenCV計算兩張圖片相似度

業務&#xff1a;找出兩個表的重復的圖片。 圖片在表里存的是二進制值&#xff0c;存在大量由于一些特殊情況例如掃描有差異&#xff0c;導致圖片存的二進制值不同&#xff0c;但圖片其實是一樣來的。 所以找出兩個表重復相同的圖片&#xff0c;不可能只是單純的比較二進制值…

flask招聘數據分析及展示平臺-計算機畢業設計源碼39292

目 錄 摘要 1 緒論 1.1研究意義 1.2國內外研究進展 1.3flask框架介紹 2 1.4論文結構與章節安排 3 2 招聘數據分析及展示平臺分析 4 2.1 可行性分析 4 2.2 系統流程分析 4 2.2.1數據增加流程 5 2.3.2數據修改流程 5 2.3.3數據刪除流程 5 2.3 系統功能分析 5 2.3.1 功能性分…

亞馬遜新品如何快速吸引流量?自養號測評助賣家一臂之力

在亞馬遜平臺上每天都會有大量的新品推出&#xff0c;而這些新品中有部分可能并沒有什么流量和訂單&#xff0c;有些可能上架后立馬就能獲得流量了&#xff0c;那么亞馬遜上新品一般幾天出單&#xff1f; 一、亞馬遜上新品一般幾天出單&#xff1f; 亞馬遜上新品出單的時間因…

DispatcherTimer應用

DispatcherTimer 是 WPF 中用于執行定時任務的類&#xff0c;用于在指定的時間間隔內執行任務。它與 UI 線程的 Dispatcher 相關聯&#xff0c;因此可以用來更新 UI 元素&#xff0c;而不必擔心線程安全問題。 關鍵特性&#xff1a; 線程安全&#xff1a;DispatcherTimer 確保…

人工智能時代,想轉型AI產品經理?這篇文章你不應該錯過

前言 在這個日新月異的智能時代&#xff0c;人工智能&#xff08;AI&#xff09;已經從未來概念轉變為推動各行各業發展的核心驅動力。作為連接技術與市場的橋梁&#xff0c;AI產品經理的角色愈發關鍵&#xff0c;他們不僅是技術的翻譯者&#xff0c;更是創新的推動者。如果你…

Mintegral解析休閑游戲如何靠創意素材吸引玩家

核心玩法簡單清晰、容易讓人無限上頭的休閑游戲&#xff0c;玩法機制一般比較明確、簡單&#xff0c;如果要在短時間內吸引玩家注意&#xff0c;除了完整展示游戲流程以外&#xff0c;開發者需要在素材中設置更多亮點性的內容&#xff0c;如吸睛的劇情、爆炸性的視聽效果等元素…

組件的注冊和引用

在Vue中&#xff0c;開發者可以將頁面中獨立的、可重用的部分封裝成組件&#xff0c;對組件的結構&#xff0c;樣式和行為進行設置。組件是 Vue 的基本結構單元&#xff0c;組件之間可以相互引用。 一.注冊組件 當在Vue項目中定義了一個新的組件后&#xff0c;要想在其他組件中…

Vue3_對接騰訊云COS_大文件分片上傳和下載

目錄 一、騰訊云后臺配置 二、安裝SDK 1.script 引入方式 2.webpack 引入方式 三、文件上傳 1.new COS 實例 2.上傳文件 四、文件下載 騰訊云官方文檔&#xff1a; 騰訊云官方文檔https://cloud.tencent.com/document/product/436/11459 一、騰訊云后臺配置 1.登錄 對…

[職場] 為什么不能加薪? #學習方法#知識分享#微信

為什么不能加薪&#xff1f; 不能加薪的根本原因&#xff0c;終于被我找到了&#xff01; 朋友們&#xff01;職場這個地方是個很神奇的世界&#xff0c;有些規則并不是你想象的那樣。我們都希望能在這個世界里施展自己的才華&#xff0c;獲得升職加薪的榮耀。然而&#xff0c…

seerfar丨OZON運營工具,OZON選品插件

隨著全球電商市場的蓬勃發展&#xff0c;OZON作為俄羅斯及東歐地區的重要電商平臺&#xff0c;吸引了眾多中國商家的目光。然而&#xff0c;如何在OZON平臺上脫穎而出&#xff0c;實現高效的商品運營&#xff0c;成為了眾多商家亟待解決的問題。在這樣的背景下&#xff0c;seer…