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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

利用K8S技术栈打造个人私有云(连载之:K8S资源控制)

發布時間:2025/3/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用K8S技术栈打造个人私有云(连载之:K8S资源控制) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


【利用K8S技術棧打造個人私有云系列文章目錄】

  • 利用K8S技術棧打造個人私有云(連載之:初章)
  • 利用K8S技術棧打造個人私有云(連載之:K8S集群搭建)
  • 利用K8S技術棧打造個人私有云(連載之:K8S環境理解和練手)
  • 利用K8S技術棧打造個人私有云(連載之:基礎鏡像制作與實驗)
  • 利用K8S技術棧打造個人私有云(連載之:資源控制研究)
  • 利用K8S技術棧打造個人私有云(連載之:私有云客戶端打造)
注: 本文首發于 My 公眾號 CodeSheep ,可 長按掃描 下面的 小心心 來訂閱 ↓ ↓ ↓


私有云K8S資源控制原理

基于前面系列文章的詳細闡述,我們已經可以手工去K8S集群的命令行下將CentOS 7.4操作系統的Docker鏡像啟動起來,然后用戶可以通過SSH登錄到CentOS容器之中進行使用。但實際使用過程中不同的用戶不可能每次都手動去命令行啟動一個CentOS鏡像,然后用命令去查看該容器的IP地址和端口是多少,然后再通過ssh去連接。我們最好可以將Docker容器的啟動、查詢、刪除等再封裝一層,然后通過WEB頁面去提供給用戶操作,這才符合用戶行為需求!

由于在我們的實踐中Docker容器是放在kubernetes集群中進行管理,所以這里的資源控制涉及的資源主要就是kubernetes的資源,如Pod、RC、Service等。

kubernetes中的Master節點運行kube-apiserver模塊,該模塊對外提供restful接口,我們可以基于該接口進行編程,從而完成對集群資源的控制管理、如Pod、RC、Service等的申請、查詢、刪除等任務。

要CRUD一個 kubernetes 資源,比如一個 pod,首先要知道和 kubernetes 集群交互的接口。在 kubernetes 的 master 節點上安裝有 kubectl 客戶端程序,該程序面向用戶提供命令行接口,供用戶和 kubernetes 集群交互。 kubectl 將用戶命令通過 restful 接口傳送給 apiserver,從而進行資源的增、刪、改等操作。該過程可以示意如下:

原理講完了,接下來講講代碼級別如何實現。


K8S資源控制客戶端

總結上文不難看出,k8s相關資源的CRUD控制可以通過restful接口來實現。要使用Kubernetes REST API編寫應用程序,當下大多語言都可以很方便地去實現HTTP請求來操作kubernetes的restful接口從而控制和查詢資源,但本文主要是利用已有的kubernetes客戶端來更加優雅地實現kubernetes的資源控制。你不需要自己編寫API來調用、請求/響應等類型,可以直接使用現成的客戶端庫來實現。

k8s的客戶端開源項目有很多,官方有支持,社區也維護了很多。

官方支持的Kubernetes客戶端庫比較有限,有下面幾種:

社區維護的客戶端庫則更加豐富,基本熱門的編程語言都支持,下面的這些Kubernetes API客戶端庫由社區創建者維護,Kubernetes團隊不會提供支持和維護:

本實踐選用的是Fabric8的k8s-client,基于Java實現。

下面就基于該Clinet講講代碼級別的實現


K8S資源控制代碼實現舉例

下面結合代碼來闡述一下Fabric8常用的k8s資源控制操作:

  • 創建K8S客戶端
String namespace = "default"; // namespace名 String master = "http://XXXX/"; // 配置為你的k8s集群的主節點地址 Config config = new ConfigBuilder().withMasterUrl(master).build(); KubernetesClient client = new DefaultKubernetesClient(config);

接下來對K8S資源的控制、查詢等操作基本都靠該client來完成!

  • 創建Pod

我們從一個pod.yaml文件來創建Pod資源:

List<HasMetadata> resources = client.load(new FileInputStream(fileName)).get(); // fileName為一個外部的pod.yaml文件if (resources.isEmpty()) {System.err.println("No resources loaded from file: " +fileName);return;}HasMetadata resource = resources.get(0);if (resource instanceof Pod){Pod pod = (Pod) resource;System.out.println("Creating pod in namespace " + namespace);NonNamespaceOperation<Pod, PodList, DoneablePod, PodResource<Pod, DoneablePod>> pods = client.pods().inNamespace(namespace);Pod result = pods.create(pod); // 此處創建pod資源!!!System.out.println("Created pod " + result.getMetadata().getName());} else {System.err.println("Loaded resource is not a Pod! " + resource);}
  • 刪除Pod

刪除很簡單,只要知道Pod所在的namespace和name,一行代碼即可搞定

client.pods().inNamespace("namespace名字").withName("pod名").delete();
  • 查詢Pod

查詢Pod的log日志并于控制臺打印:

client.pods().inNamespace("namespace名字").withName("pod名").tailingLines(10).watchLog(System.out))

欲查詢Pod的一些其他信息,可以參考創建Pod步驟中的代碼:

Pod result = pods.create(pod); // 此處創建pod資源!!! System.out.println("Created pod " + result.getMetadata().getName()); // 類似于此處,除了獲取Pod的名字外還可以獲取很多類似信息
  • 修改Pod配置
Pod updatedPod = client.pods().inNamespace("namespace名字").withName("pod名").edit().editMetadata().addToLabels("server2", "nginx2").and().done(); log("Replaced testPod:", updatedPod); 上文從創建一個K8S客戶端開始比較完整地介紹了一個Pod資源的CRUD操作,限于篇幅原因,其他資源如RC、Service、Deployment等等的增刪改查操作都類似,只是名字不同而已,其接口稍微類比一下Pod即可寫出對應的資源控制代碼,此處不再贅述了,舉一反三很重要。

后記

  • 作者更多的原創文章在此,歡迎觀賞
  • My Personal Blog

作者更多的SpringBt實踐文章在此:

  • Spring Boot應用監控實戰
  • SpringBoot應用部署于外置Tomcat容器
  • ElasticSearch搜索引擎在SpringBt中的實踐
  • 初探Kotlin+SpringBoot聯合編程
  • Spring Boot日志框架實踐
  • SpringBoot優雅編碼之:Lombok加持

如果有興趣,也可以抽點時間看看作者一些關于容器化、微服務化方面的文章:

  • 利用K8S技術棧打造個人私有云 連載文章
  • 從一份配置清單詳解Nginx服務器配置
  • Docker容器可視化監控中心搭建
  • 利用ELK搭建Docker容器化應用日志中心
  • RPC框架實踐之:Apache Thrift
  • RPC框架實踐之:Google gRPC
  • 微服務調用鏈追蹤中心搭建
  • Docker容器跨主機通信
  • Docker Swarm集群初探
  • 高效編寫Dockerfile的幾條準則


總結

以上是生活随笔為你收集整理的利用K8S技术栈打造个人私有云(连载之:K8S资源控制)的全部內容,希望文章能夠幫你解決所遇到的問題。

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