日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Kubernetes之curl調(diào)試

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

岐山網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站開發(fā)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站從2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站

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

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

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

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

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

…因為它很復雜,所以配置非常冗長。

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

但是,在本文中,我認為那些認為kubernetns復雜的人,是因為沒有找到合理的方式去學習以及使用kubernetns,就像早期的操作系統(tǒng)一樣。

Kubernetes對于如何管理配置有一個簡單而巧妙的方式,本文也將討論這種方式。

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

當然,配置本身可能很復雜。因此,在這篇文章中,我將跳過配置。我將僅專注于kubernetes API機制以及如何探索該API。

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

是啥方法?

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

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

~/hello-world.txt 是一個文本文件

/dev/null 是一個空文本流

/proc 是用于閱讀有關(guān)進程的一組文本流

通過下面的漫畫圖,讓我們仔細看看/proc。

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

正在運行多少個進程(ls /proc——列出進程)

哪些命令行啟動了流程PID(cat /proc/PID/cmdline——獲取進程)

進程PID正在使用多少內(nèi)存(cat /proc/PID/status——獲取進程狀態(tài))

什么是Kubernetes API?

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

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

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

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

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

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

kind ——一個使用 Docker 容器 “nodes” 運行 Kubernetes 集群的工具

curl ——用于發(fā)送HTTP請求的CLI工具

jq ——用于解析JSON的CLI工具

kubectl——命令管理Kubernetes 集群,幫助curl認證

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

$ kind create cluster
Creating cluster "kind" ...
 Ensuring node image (kindest/node:v1.19.1) 
 Preparing nodes   
 Writing configuration   
 Starting control-plane ?  
 Installing CNI   
 Installing StorageClass   
Set kubectl context to "kind-kind"
You can now use your cluster with:

kubectl cluster-info --context kind-kind

Have a nice day! 

$ kubectl proxy &
Starting to serve on 127.0.0.1:8001

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

當然可以不經(jīng)過kubectl proxy反向代理直接訪問kubernetes apiserver的REST api,但是需要手動管理kubernetes apiserver的地址、手動獲取token、手動將token加請到請求的頭部,相對來說要繁瑣而已。

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

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

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

$ curl -s http://localhost:8001/api/v1/namespaces/kube-system/pods | head -n 20
{
"kind": "PodList",
"apiVersion": "v1",
"metadata": {
 "selfLink": "/api/v1/namespaces/kube-system/pods",
 "resourceVersion": "1233"
},
"items": [
 {
   "metadata": {
     "name": "coredns-f9fd979d6-5zxtx",
     "generateName": "coredns-f9fd979d6-",
     "namespace": "kube-system",
     "selfLink": "/api/v1/namespaces/kube-system/pods/coredns-f9fd979d6-5zxtx",
     "uid": "a30e70cc-2b53-4511-a5de-57c80e5b68ad",
     "resourceVersion": "549",
     "creationTimestamp": "2021-03-04T15:51:21Z",
     "labels": {
       "k8s-app": "kube-dns",
       "pod-template-hash": "f9fd979d6"

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

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

/pods羅列出了所有的進程,就像ls /proc一樣。如果我們要查看一個特定的進程,可以查詢/pods/POD_NAME。

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

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

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

kubectl又是怎么做的?

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

$ kubectl get -v 6 -n kube-system pods kube-apiserver-kind-control-plane
I0304 12:47:59.687088 3573879 loader.go:375] Config loaded from file: /home/nick/.kube/config
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
NAME                               READY   STATUS   RESTARTS   AGE
kube-apiserver-kind-control-plane   1/1     Running   0         116m

有關(guān)更高級別的調(diào)試,請使用-v 8來查看完整的響應結(jié)果。

最后:

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

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

一切都是基于HTTP的資源。

每個對象的讀取和寫入方式都相同。

所有對象狀態(tài)都是可讀的。

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

這些方式可能看起來會有點簡單,有點傻,但是卻往往是最有效的方式。


網(wǎng)頁題目:Kubernetes之curl調(diào)試
網(wǎng)站鏈接:http://www.dlmjj.cn/article/dpspspo.html