Kubernetes API 資源使用

應(yīng)該使用哪個 Group 和 Version?

日常使用的過程中我們經(jīng)常碰到使用 YAML 定義 deployment等資源文件時躲履, 經(jīng)常弄不清楚資源的版本以及資源使用的組等信息厨剪, 如apiVersion: rbac.authorization.k8s.io/v1beta1 痰洒。

那么我們到底應(yīng)該使用哪一個呢?哪一個才是正確的呢瘟裸?如何檢查Kubernetes集群支持哪些客叉?其實我們使用kubectl工具就可以來解決我們的這些疑惑。

01.獲取kubernetes支持API resource

我們使用如下指令獲取當(dāng)前版本的kubernetes支持哪些KIND话告, 屬于哪個APIGROUP以及每個KIND支持哪些方法兼搏。

$  kubectl api-resources -o wide
NAME                              SHORTNAMES   APIGROUP                       NAMESPACED   KIND                             VERBS
selfsubjectaccessreviews                       authorization.k8s.io           false        SelfSubjectAccessReview          [create]
selfsubjectrulesreviews                        authorization.k8s.io           false        SelfSubjectRulesReview           [create]
subjectaccessreviews                           authorization.k8s.io           false        SubjectAccessReview              [create]
horizontalpodautoscalers          hpa          autoscaling                    true         HorizontalPodAutoscaler          [create delete deletecollection get list patch update watch]
cronjobs                          cj           batch                          true         CronJob                          [create delete deletecollection get list patch update watch]
jobs                                           batch                          true         Job                              [create delete deletecollection get list patch update watch]
certificatesigningrequests        csr          certificates.k8s.io            false        CertificateSigningRequest        [create delete deletecollection get list patch update watch]
leases                                         coordination.k8s.io            true         Lease                            [create delete deletecollection get list patch update watch]
endpointslices                                 discovery.k8s.io               true         EndpointSlice                    [create delete deletecollection get list patch update watch]
events                            ev           events.k8s.io                  true         Event                            [create delete deletecollection get list patch update watch]
ingresses                         ing          extensions                     true         Ingress                          [create delete deletecollection get list patch update watch]
ingressclasses                                 networking.k8s.io              false        IngressClass                     [create delete deletecollection get list patch update watch]
ingresses                         ing          networking.k8s.io              true         Ingress                          [create delete deletecollection get list patch update watch]
networkpolicies                   netpol       networking.k8s.io              true         NetworkPolicy                    [create delete deletecollection get list patch update watch]
runtimeclasses                                 node.k8s.io                    false        RuntimeClass                     [create delete deletecollection get list patch update watch]
poddisruptionbudgets              pdb          policy                         true         PodDisruptionBudget              [create delete deletecollection get list patch update watch]
podsecuritypolicies               psp          policy                         false        PodSecurityPolicy                [create delete deletecollection get list patch update watch]
clusterrolebindings                            rbac.authorization.k8s.io      false        ClusterRoleBinding               [create delete deletecollection get list patch update watch]
clusterroles                                   rbac.authorization.k8s.io      false        ClusterRole                      [create delete deletecollection get list patch update watch]
rolebindings                                   rbac.authorization.k8s.io      true         RoleBinding                      [create delete deletecollection get list patch update watch]
roles                                          rbac.authorization.k8s.io      true         Role                             [create delete deletecollection get list patch update watch]
priorityclasses                   pc           scheduling.k8s.io              false        PriorityClass                    [create delete deletecollection get list patch update watch]
csidrivers                                     storage.k8s.io                 false        CSIDriver                        [create delete deletecollection get list patch update watch]
..........

上面的命令輸出了很多有用的信息:

  • SHORTNAMES - 資源名稱的簡寫,比如 deployments 簡寫就是 deploy沙郭,我們可以將這些快捷方式與kubectl一起使用
  • APIGROUP - 我們可以查看官方文檔以了解更多信息佛呻,但簡而言之,您將在yaml文件中使用它像apiVersion:<APIGROUP>/v1
  • KIND - 資源名稱
  • VERBS - 可用的方法病线,在您想要定義ClusterRole RBAC規(guī)則時也很有用吓著,您還可以選擇獲取特定 API 組的 API 資源,例如:
$ kubectl api-resources --api-group apps -o wide
NAME                  SHORTNAMES   APIGROUP   NAMESPACED   KIND                 VERBS
controllerrevisions                apps       true         ControllerRevision   [create delete deletecollection get list patch update watch]
daemonsets            ds           apps       true         DaemonSet            [create delete deletecollection get list patch update watch]
deployments           deploy       apps       true         Deployment           [create delete deletecollection get list patch update watch]
replicasets           rs           apps       true         ReplicaSet           [create delete deletecollection get list patch update watch]
statefulsets          sts          apps       true         StatefulSet

對于上面的每種資源類型送挑,我們都可以使用kubectl explain命令來獲取有關(guān)的資源詳細(xì)息:

$ kubectl explain configmap
DESCRIPTION:
ConfigMap holds configuration data for pods to consume.

FIELDS:
   apiVersion   <string>
     APIVersion defines the versioned schema of this representation of an
     object. Servers should convert recognized schemas to the latest internal
     value, and may reject unrecognized values. More info:
     https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

   data <object>
     Data contains the configuration data. Each key must consist of alphanumeric
     characters, '-', '_' or '.'.

   kind <string>
     Kind is a string value representing the REST resource this object
     represents. Servers may infer this from the endpoint the client submits
     requests to. Cannot be updated. In CamelCase. More info:
     https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds

   metadata <Object>
     Standard object's metadata. More info:
     https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata

kubectl explain命令非常有用绑莺,特別是在我們 不知道該如何編寫YAML文件的時候,就可以使用改命令來幫助我們獲得更多提示信息 惕耕。

需要注意的是explain命令可能會顯示舊的group/version纺裁,我們可以通過--api-version參數(shù)顯示設(shè)置它,比如: 請注意司澎,explain可能會顯示舊組/版本欺缘,但您可以使用–api-version顯式設(shè)置它,例如:

$ kubectl explain replicaset --api-version apps/v1

02.獲取支持的API VERSION

上節(jié)最后說到我們在查看資源的explain時可能并不知道集群支持的版本挤安, 可以使用如下指令獲取當(dāng)前集群支持的 API 版本谚殊。

$ kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
discovery.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1

03.kubernetes REST path的構(gòu)成

kubernetes 為了提供更好的擴展性所以才有了Apigroup的概念, 它是如何對外提供rest接口的呢蛤铜?

目前使用的apigroup:

  • 核心組络凿, 對應(yīng)的ApiVersion: v1對應(yīng)的rest path為/api/v1
  • 其它的group的rest path為/apis/$GROUP_NAME/$VERSION, 對應(yīng)的 apiVersion:$GROUP_NAME/$VERSION (e.g. apiVersion: batch/v1)

04.啟用/關(guān)閉 apigroup

默認(rèn)情況下有一些apigroup是啟用狀態(tài), 可以在apiserver中指定--runtime-config參數(shù)啟用/關(guān)閉apigroup昂羡。

  • 關(guān)閉 batch/v1 , 設(shè)置--runtime-config=batch/v1=false
  • 啟用 batch/v2alpha1 , 設(shè)置--runtime-config=batch/v2alpha1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摔踱,一起剝皮案震驚了整個濱河市虐先,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌派敷,老刑警劉巖蛹批,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撰洗,死亡現(xiàn)場離奇詭異,居然都是意外死亡腐芍,警方通過查閱死者的電腦和手機差导,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猪勇,“玉大人设褐,你說我怎么就攤上這事∑玻” “怎么了助析?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長椅您。 經(jīng)常有香客問我外冀,道長,這世上最難降的妖魔是什么掀泳? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任雪隧,我火速辦了婚禮,結(jié)果婚禮上员舵,老公的妹妹穿的比我還像新娘脑沿。我一直安慰自己,他們只是感情好固灵,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布捅伤。 她就那樣靜靜地躺著,像睡著了一般巫玻。 火紅的嫁衣襯著肌膚如雪丛忆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天仍秤,我揣著相機與錄音熄诡,去河邊找鬼。 笑死诗力,一個胖子當(dāng)著我的面吹牛凰浮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播苇本,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼袜茧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瓣窄?” 一聲冷哼從身側(cè)響起笛厦,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎俺夕,沒想到半個月后裳凸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贱鄙,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年姨谷,在試婚紗的時候發(fā)現(xiàn)自己被綠了逗宁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡梦湘,死狀恐怖瞎颗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情践叠,我是刑警寧澤言缤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站禁灼,受9級特大地震影響管挟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弄捕,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一僻孝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧守谓,春花似錦穿铆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至平酿,卻和暖如春凤优,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蜈彼。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工筑辨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人幸逆。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓棍辕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親还绘。 傳聞我的和親對象是個殘疾皇子楚昭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容