日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
使用Curl對(duì)Kubernetes進(jìn)行調(diào)試!

使用Curl對(duì)Kubernetes進(jìn)行調(diào)試!

作者: 祝祥 2021-06-15 20:59:14

云計(jì)算 Kubernetes是一個(gè)開(kāi)源的、用于管理云平臺(tái)中多個(gè)主機(jī)上的容器化應(yīng)用的系統(tǒng)。其目標(biāo)是讓部署容器化的應(yīng)用簡(jiǎn)單并且高效(powerful),它提供了應(yīng)用部署,規(guī)劃,更新,維護(hù)的一種機(jī)制。

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括甌海網(wǎng)站建設(shè)、甌海網(wǎng)站制作、甌海網(wǎng)頁(yè)制作以及甌海網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,甌海網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到甌海省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!

本文轉(zhuǎn)載自微信公眾號(hào)「新鈦云服」,作者祝祥 。轉(zhuǎn)載本文請(qǐng)聯(lián)系新鈦云服公眾號(hào)。

Kubernetes是一個(gè)開(kāi)源的、用于管理云平臺(tái)中多個(gè)主機(jī)上的容器化應(yīng)用的系統(tǒng)。其目標(biāo)是讓部署容器化的應(yīng)用簡(jiǎn)單并且高效(powerful),它提供了應(yīng)用部署,規(guī)劃,更新,維護(hù)的一種機(jī)制。

Kubernetes一個(gè)核心的特點(diǎn)就是能夠自主的管理容器來(lái)保證云平臺(tái)中的容器按照用戶(hù)的期望狀態(tài)運(yùn)行著(比如用戶(hù)想讓apache一直運(yùn)行,用戶(hù)不需要關(guān)心怎么去做,Kubernetes會(huì)自動(dòng)去監(jiān)控,然后去重啟,新建,總之,讓apache一直提供服務(wù))。

管理員可以加載一個(gè)微型服務(wù),讓規(guī)劃器來(lái)找到合適的位置,同時(shí),Kubernetes也系統(tǒng)提升工具以及人性化方面,讓用戶(hù)能夠方便的部署自己的應(yīng)用(就像canary deployments)。

現(xiàn)在Kubernetes著重于不間斷的服務(wù)狀態(tài)(比如web服務(wù)器或者緩存服務(wù)器)和原生云平臺(tái)應(yīng)用(Nosql),在不久的將來(lái)會(huì)支持各種生產(chǎn)云平臺(tái)中的各種服務(wù),例如,分批,工作流,以及傳統(tǒng)數(shù)據(jù)庫(kù)。

對(duì)于有些人而言,Kubernetes是一個(gè)非常復(fù)雜調(diào)度系統(tǒng)。

…因?yàn)樗軓?fù)雜,所以配置非常冗長(zhǎng)。

…由于配置YAML太多,我們需要配合其他多種工具軟件來(lái)處理該配置。

但是,在本文中,我認(rèn)為那些認(rèn)為kubernetns復(fù)雜的人,是因?yàn)闆](méi)有找到合理的方式去學(xué)習(xí)以及使用kubernetns,就像早期的操作系統(tǒng)一樣。

Kubernetes對(duì)于如何管理配置有一個(gè)簡(jiǎn)單而巧妙的方式,本文也將討論這種方式。

因?yàn)檫@種方式簡(jiǎn)單,一致,所以我們可以管理比以往更多的配置!現(xiàn)在,我們不僅可以管理更多的配置,也可以構(gòu)建復(fù)雜的系統(tǒng)。

當(dāng)然,配置本身可能很復(fù)雜。因此,在這篇文章中,我將跳過(guò)配置。我將僅專(zhuān)注于kubernetes API機(jī)制以及如何探索該API。

以這種方式構(gòu)建API可以使許多工具受益。

是啥方法?

為了解釋這種簡(jiǎn)單而高效的方式,讓我們從Unix系統(tǒng)的最核心思想開(kāi)始:

  
 
 
 
  1. Everything is a file. 

更確切地說(shuō),一切皆文本。Unix程序讀取和寫(xiě)入文本。文件系統(tǒng)是用于查找要讀取的文本的API。并非所有這些文本都是文件!

  • ~/hello-world.txt 是一個(gè)文本文件
  • /dev/null 是一個(gè)空文本流
  • /proc 是用于閱讀有關(guān)進(jìn)程的一組文本流

通過(guò)下面的漫畫(huà)圖,讓我們仔細(xì)看看/proc。

您可以通過(guò)以下的方式來(lái)查看以及了解系統(tǒng)上正在運(yùn)行什么/proc,例如:

  • 正在運(yùn)行多少個(gè)進(jìn)程(ls /proc——列出進(jìn)程)
  • 哪些命令行啟動(dòng)了流程PID(cat /proc/PID/cmdline——獲取進(jìn)程)
  • 進(jìn)程PID正在使用多少內(nèi)存(cat /proc/PID/status——獲取進(jìn)程狀態(tài))

什么是Kubernetes API?

Kubernetes API是集群系統(tǒng)中的重要組成部分,Kubernetes中各種資源(對(duì)象)的數(shù)據(jù)通過(guò)該API接口被提交到后端的持久化存儲(chǔ)(etcd)中,Kubernetes集群中的各部件之間通過(guò)該API接口實(shí)現(xiàn)解耦合,同時(shí)Kubernetes集群中一個(gè)重要且便捷的管理工具kubectl也是通過(guò)訪(fǎng)問(wèn)該API接口實(shí)現(xiàn)其強(qiáng)大的管理功能的。

Kubernetes API 是基于資源的(RESTful)、通過(guò) HTTP 提供的編程接口。API 支持通過(guò)標(biāo)準(zhǔn)的 HTTP 動(dòng)詞(POST、PUT、PATCH、DELETE 和 GET) 檢視、創(chuàng)建、更新和刪除主要資源,為很多允許細(xì)粒度權(quán)限控制的對(duì)象提供子資源 (如將 Pod 綁定到節(jié)點(diǎn)上),并且出于便利性或效率考慮,支持并提供這些資源的 不同表示形式。

Kubernetes API 還通過(guò) "watch" 和一致性的列表支持高效的資源變更通知, 從而允許其他組件對(duì)資源的狀態(tài)進(jìn)行高效的緩存和同步。

Kubernetes API適用/proc于分布式系統(tǒng)。

一切都是基于HTTP的資源。我們可以使用一些HTTP GET命令探索每個(gè)Kubernetes資源。

如果要繼續(xù)進(jìn)行下去,您需要熟悉以下的幾種工具:

  • kind ——一個(gè)使用 Docker 容器 “nodes” 運(yùn)行 Kubernetes 集群的工具
  • curl ——用于發(fā)送HTTP請(qǐng)求的CLI工具
  • jq ——用于解析JSON的CLI工具
  • kubectl——命令管理Kubernetes 集群,幫助curl認(rèn)證

下面,讓我們從快速創(chuàng)建集群開(kāi)始:

  
 
 
 
  1. $ kind create cluster 
  2. Creating cluster "kind" ... 
  3.  Ensuring node image (kindest/node:v1.19.1)  
  4.  Preparing nodes    
  5.  Writing configuration   
  6.  Starting control-plane ?  
  7.  Installing CNI   
  8.  Installing StorageClass   
  9. Set kubectl context to "kind-kind" 
  10. You can now use your cluster with: 
  11.  
  12. kubectl cluster-info --context kind-kind 
  13.  
  14. Have a nice day!  
  15.  
  16. $ kubectl proxy & 
  17. Starting to serve on 127.0.0.1:8001 

本質(zhì)上kubectl proxy為訪(fǎng)問(wèn)kubernetes apiserver的REST api充當(dāng)反向代理角色,這里反向代理的作用與通常意義上的反向代理作用相同,比如提供統(tǒng)一入口進(jìn)行訪(fǎng)問(wèn)控制、監(jiān)控、管理,在代理中管理后端,在代理中進(jìn)行認(rèn)證等。

當(dāng)然可以不經(jīng)過(guò)kubectl proxy反向代理直接訪(fǎng)問(wèn)kubernetes apiserver的REST api,但是需要手動(dòng)管理kubernetes apiserver的地址、手動(dòng)獲取token、手動(dòng)將token加請(qǐng)到請(qǐng)求的頭部,相對(duì)來(lái)說(shuō)要繁瑣而已。

Kubernetes API比/proc具有更多的層次結(jié)構(gòu)。按版本,名稱(chēng)空間和資源類(lèi)型將其分為多個(gè)文件夾。API路徑格式如下:

  
 
 
 
  1. /api/[version]/namespaces/[namespace]/[resource]/[name] 

在一個(gè)新的kind集群上,可以看到的命名空間kube-system中已經(jīng)有一些Pod正在運(yùn)行 。讓我們列出集群中的所有系統(tǒng)進(jìn)程:

  
 
 
 
  1. $ curl -s http://localhost:8001/api/v1/namespaces/kube-system/pods | head -n 20 
  2. "kind": "PodList", 
  3. "apiVersion": "v1", 
  4. "metadata": { 
  5.   "selfLink": "/api/v1/namespaces/kube-system/pods", 
  6.   "resourceVersion": "1233" 
  7. }, 
  8. "items": [ 
  9.   { 
  10.     "metadata": { 
  11.       "name": "coredns-f9fd979d6-5zxtx", 
  12.       "generateName": "coredns-f9fd979d6-", 
  13.       "namespace": "kube-system", 
  14.       "selfLink": "/api/v1/namespaces/kube-system/pods/coredns-f9fd979d6-5zxtx", 
  15.       "uid": "a30e70cc-2b53-4511-a5de-57c80e5b68ad", 
  16.       "resourceVersion": "549", 
  17.       "creationTimestamp": "2021-03-04T15:51:21Z", 
  18.       "labels": { 
  19.         "k8s-app": "kube-dns", 
  20.         "pod-template-hash": "f9fd979d6" 

上述命令會(huì)返回大量的內(nèi)容!我們可以使用jq來(lái)提取對(duì)象的名稱(chēng)。

  
 
 
 
  1. $ curl -s http://localhost:8001/api/v1/namespaces/kube-system/pods | jq '.items[].metadata.name' 
  2. "coredns-f9fd979d6-5zxtx" 
  3. "coredns-f9fd979d6-bn6jz" 
  4. "etcd-kind-control-plane" 
  5. "kindnet-fcjkd" 
  6. "kube-apiserver-kind-control-plane" 
  7. "kube-controller-manager-kind-control-plane" 
  8. "kube-proxy-sn64n" 
  9. "kube-scheduler-kind-control-plane" 

/pods羅列出了所有的進(jìn)程,就像ls /proc一樣。如果我們要查看一個(gè)特定的進(jìn)程,可以查詢(xún)/pods/POD_NAME。

  
 
 
 
  1. $ curl -s http://localhost:8001/api/v1/namespaces/kube-system/pods/kube-apiserver-kind-control-plane | head -n 10 
  2. "kind": "Pod", 
  3. "apiVersion": "v1", 
  4. "metadata": { 
  5.   "name": "kube-apiserver-kind-control-plane", 
  6.   "namespace": "kube-system", 
  7.   "selfLink": "/api/v1/namespaces/kube-system/pods/kube-apiserver-kind-control-plane", 
  8.   "uid": "a8f893b7-1cdb-48fd-9505-87d71c81adcb", 
  9.   "resourceVersion": "458", 
  10.   "creationTimestamp": "2021-03-04T15:51:17Z", 

然后,我們可以再次使用jq來(lái)獲取特定字段。

  
 
 
 
  1. $ curl -s http://localhost:8001/api/v1/namespaces/kube-system/pods/kube-apiserver-kind-control-plane | jq '.status.phase' 
  2. "Running" 

kubectl又是怎么做的?

上面的所有操作本質(zhì)上都是可以使用kubectl來(lái)完成。kubectl提供了更友好的界面。但是,如果您想知道kubectl正在調(diào)用什么API ,可以使用以下命令加上-v 6來(lái)運(yùn)行它:

  
 
 
 
  1. $ kubectl get -v 6 -n kube-system pods kube-apiserver-kind-control-plane 
  2. I0304 12:47:59.687088 3573879 loader.go:375] Config loaded from file: /home/nick/.kube/config 
  3. I0304 12:47:59.697325 3573879 round_trippers.go:443] GET https://127.0.0.1:44291/api/v1/namespaces/kube-system/pods/kube-apiserver-kind-control-plane 200 OK in 5 milliseconds 
  4. NAME                               READY   STATUS   RESTARTS   AGE 
  5. kube-apiserver-kind-control-plane   1/1     Running   0         116m 

有關(guān)更高級(jí)別的調(diào)試,請(qǐng)使用-v 8來(lái)查看完整的響應(yīng)結(jié)果。

最后:

本文的關(guān)鍵不是要拋棄kubectl而是使用curl來(lái)與Kubernetes進(jìn)行交互。就像您不應(yīng)該拋棄ps而僅使用ls / proc一樣。

但是我發(fā)現(xiàn)像這樣剖析Kubernetes有助于對(duì)系統(tǒng)的深入了解有很大的幫助:

  • 一切都是基于HTTP的資源。
  • 每個(gè)對(duì)象的讀取和寫(xiě)入方式都相同。
  • 所有對(duì)象狀態(tài)都是可讀的。

就像我們可以將Unix工具一起管道化(例如jq)一樣,我們可以定義新的Kubernetes對(duì)象并將其與現(xiàn)有對(duì)象組合。

這些方式可能看起來(lái)會(huì)有點(diǎn)簡(jiǎn)單,有點(diǎn)傻,但是卻往往是最有效的方式。

原文:https://blog.tilt.dev/2021/03/18/kubernetes-is-so-simple.html

祝祥

資深云計(jì)算架構(gòu)師

OpenStack官方特邀講師

上萬(wàn)臺(tái)云主機(jī)和幾十PB分布式存儲(chǔ)的建設(shè)管理經(jīng)驗(yàn)


分享文章:使用Curl對(duì)Kubernetes進(jìn)行調(diào)試!
分享路徑:http://m.5511xx.com/article/ccdgcdp.html