k8s 基本使用(下)

如果你沒有看過上篇的話,推薦閱讀完 k8s 基本使用(上)后再閱讀本篇內(nèi)容匪凡。

kubectl create 創(chuàng)建資源劫乱!

k8s 中的所有東西都可以通過kubectl create命令創(chuàng)建织中,無論你是想創(chuàng)建一個 pod 還是一個大型的滾動升級服務(wù)deployment锥涕,create命令都可以做到。使用create生成一個資源主要有兩種常用方法狭吼,yaml配置文件創(chuàng)建簡易創(chuàng)建

yaml配置文件創(chuàng)建

如果你想讓 k8s 生成一個和你想象中一模一樣的資源层坠,那你就要充分而詳細(xì)的描述這個資源,k8s 就提供了這么一個方法刁笙,你可以使用yaml格式創(chuàng)建一個文件破花,按照 k8s 指定好的結(jié)構(gòu)定義一個對象,然后使用如下方法將該文件傳遞給 k8s采盒。它就可以按照你的描述進(jìn)行生成了:

kubectl create -f <配置文件名.yaml>

例如旧乞,使用下面的配置文件就可以創(chuàng)建一個最簡單的 pod:

kubia-manual.yaml

apiVersion: v1
kind: Pod
metadata:
  name: kubia-manual
spec:
  containers:
  - image: luksa/kubia
    name: kubia
    ports:
    - containerPort: 8080
      protocol: TCP

然后使用kubectl create -f kubia-manual.yaml即可創(chuàng)建

root@master1:~/k8s-yaml# k create -f kubia-manual.yaml 
pod/kubia-manual created

如果你的配置文件有問題的話那么 k8s 就會報(bào)錯,如下磅氨,錯誤一般都是拼寫導(dǎo)致的,比如下面這個就是Pod.spec.containers[0].ports[0]中存在一個無法識別的名稱contaienrPort

root@master1:~/k8s-yaml# k create -f kubia-manual.yaml 
error: error validating "kubia-manual.yaml": 
error validating data: [ValidationError(Pod.spec.containers[0].ports[0]): unknown field "contaienrPort" in io.k8s.api.core.v1.ContainerPort, 
ValidationError(Pod.spec.containers[0].ports[0]): missing required field "containerPort" in io.k8s.api.core.v1.ContainerPort]; 
if you choose to ignore these errors, turn validation off with --validate=false

這時(shí)你可能會問了嫡纠,這配置文件里一大堆名字我看不懂啊烦租,不要著急,下一條命令就會解答這個疑惑除盏,但是在此之前叉橱,我們先來看一下更簡單的 簡易創(chuàng)建 模式。

簡易創(chuàng)建

k8s 為一些常用的資源提供了簡易創(chuàng)建的方法者蠕,比如說service窃祝、namespacedeployment等踱侣,這些方法可以使用kubectl create <資源類型> <資源名>的方式創(chuàng)建粪小。例如我想創(chuàng)建一個名叫hello-world的命名空間,直接使用下面命令即可:

kubectl create namespace hello-world

這樣就不用再跟大而全的配置文件打交道了抡句,如果你想了解都有哪些資源可以快速生成的話探膊,使用kubectl create -h命令查看。

小結(jié)

kubectl create可以通過指定-f <配置文件名.yaml>參數(shù)來從一個yaml文件生成資源待榔,也可用使用kubectl create <資源類型> <資源名>來快速生成一個資源逞壁。

kubectl explain 解釋配置!

從上一小節(jié)中我們可以知道锐锣,k8s 可以通過配置文件來生成資源腌闯,而為了盡可能詳細(xì)的描述資源的模樣,k8s 提供了數(shù)量龐大的配置項(xiàng)雕憔,那么有沒有一種方式可以快速的了解到某個配置項(xiàng)的作用呢姿骏?有,那就是explain(解釋)命令橘茉。

kubectl explain <配置名>

咱們來實(shí)踐一下工腋,翻到上一小節(jié)里提到的生成 pod 的配置文件姨丈。首先,我想要了解創(chuàng)建 pod 的哪些基本屬性都是干什么的擅腰,輸入kubectl explain pod即可:

root@master1:~/k8s-yaml# kubectl explain pod
KIND:     Pod
VERSION:  v1

DESCRIPTION:
     Pod is a collection of containers that can run on a host. This resource is
     created by clients and scheduled onto hosts.

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

   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

   spec <Object>
     Specification of the desired behavior of the pod. More info:
     https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status

   status       <Object>
     Most recently observed status of the pod. This data may not be up to date.
     Populated by the system. Read-only. More info:
     https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status

可以看到蟋恬,給出的解釋非常詳細(xì),并且每個解釋的最后都附帶了一條鏈接趁冈,便于更加深入的進(jìn)行了解歼争,好了,那我想要了解matedata(元數(shù)據(jù))字段都有哪些配置項(xiàng)怎么辦呢渗勘?

kubectl explain pod.matedata
root@master1:~/k8s-yaml# kubectl explain pod.metadata
KIND:     Pod
VERSION:  v1

RESOURCE: metadata <Object>

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

     ObjectMeta is metadata that all persisted resources must have, which
     includes all objects users must create.

FIELDS:
   annotations  <map[string]string>
     Annotations is an unstructured key value map stored with a resource that
     may be set by external tools to store and retrieve arbitrary metadata. They
     are not queryable and should be preserved when modifying objects. More
     info: http://kubernetes.io/docs/user-guide/annotations

   clusterName  <string>
     The name of the cluster which the object belongs to. This is used to
     distinguish resources with same name and namespace in different clusters.
     This field is not set anywhere right now and apiserver is going to ignore
     it if set in create or update request.

    ...

又是一排十分詳細(xì)的解釋沐绒,通過這種方式,我們可以了解到每一個資源的每一個配置項(xiàng)旺坠。想了解某個屬性的子屬性乔遮,就加個.繼續(xù)查。不要說看不懂取刃,我覺得 谷歌翻譯 這種東西已經(jīng)挺常見了蹋肮。

kubectl delete 刪除一切!

delete命令的使用非常簡單璧疗,如下:

kubectl delete <資源類型> <資源名>

比如說你想刪除一個名為kubia-4n2tg的 pod坯辩。就可以這么寫:

kubectl delete pod kubia-4n2tg

如果你想刪除所有的 pod,就可以這么寫:

kubectl delete pod --all

如果你想刪除一切崩侠!那就這么寫:

kubectl delete all --all

注意漆魔!執(zhí)行刪除一切命令沒有二次驗(yàn)證,所有資源均會被直接刪除却音,在執(zhí)行前先考慮下跑路成本改抡。

kubectl edit 修改配置!

如果在日常維護(hù)過程中僧家,因?yàn)槟承┰蛭覀冃枰兏恍┓?wù)的設(shè)置該怎么辦呢雀摘?從創(chuàng)建新資源小節(jié)我們可以了解到,每個資源都是通過一個yaml配置文件生成的八拱,哪怕是簡易創(chuàng)建的資源阵赠,也是 k8s 從一個默認(rèn)的配置文件創(chuàng)建而來的。

我們可以在get命令后附加-o yaml文件查看某個現(xiàn)有資源的配置項(xiàng)肌稻。例如清蚀,查看 pod kubia-manual的配置項(xiàng):

kubectl get pod kubia-manual -o yaml

執(zhí)行之后就可以看到一個很長的配置列表,你也可以試一下自己創(chuàng)建的 pod 的配置項(xiàng)爹谭,你會發(fā)現(xiàn)同樣很長枷邪,這就是因?yàn)?k8s 會讀取你提供的信息,并將必要但是你沒有提供的其他信息設(shè)為默認(rèn)值填寫進(jìn)去诺凡。而kubectl edit就可以編輯剛才打開的這個列表东揣。例如践惑,編輯在create小節(jié)中創(chuàng)建的 pod kubia-manual

kubectl edit pod kubia-manual

之后就會彈出系統(tǒng)設(shè)置的默認(rèn)編輯器嘶卧。這時(shí)我們就可以做任意修改尔觉,例如將名稱改為kubia-manual-v2。首先定位到metadata.name字段芥吟,然后修改他的值:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2019-07-07T07:31:11Z"
  name: kubia-manual # > kubia-manual-v2
  namespace: default
  resourceVersion: "790349"
  selfLink: /api/v1/namespaces/default/pods/kubia-manual
  uid: 51eaa1e6-5749-4e79-aec9-12cf2a3e485d
spec:
  ...

修改完成后輸入:wq保存侦铜,隨后你會發(fā)現(xiàn), k8s 居然報(bào)錯了

A copy of your changes has been stored to "/tmp/kubectl-edit-vj0ts.yaml"
error: At least one of apiVersion, kind and name was changed

不要著急钟鸵,這個是 k8s 做出的限制钉稍,你無法修改一個運(yùn)行中資源的名稱或類型。那我們就來修改一下他的其他屬性好了棺耍。例如將拉取鏡像的標(biāo)簽指定為latest贡未。重新edit配置文件,找到spec烈掠。containers.image字段羞秤,然后在最后添加:latest后保存。隨后 k8s 會彈出保存成功左敌,如下:

pod/kubia-manual edited

這時(shí)我們再kubectl describe pod kubia-manual查看該 pod 的詳情,就可以發(fā)現(xiàn)對應(yīng)的字段已經(jīng)更新了:

Name:         kubia-manual
Namespace:    default
Priority:     0
Node:         worker1/192.168.56.21
Start Time:   Sun, 07 Jul 2019 07:31:11 +0000
Labels:       <none>
Annotations:  <none>
Status:       Running
IP:           10.244.1.14
Containers:
  kubia:
    Container ID:   docker://89617ffcc9b1455c514e5129a9b2694c43a2aff9b4c0449d5efc4aea1fe41db6
    # 已經(jīng)顯式的應(yīng)用了 latest 標(biāo)簽
    Image:          luksa/kubia:latest
    Image ID:       docker-pullable://luksa/kubia@sha256:3f28e304dc0f63dc30f273a4202096f0fa0d08510bd2ee7e1032ce600616de24
    Port:           8080/TCP

小節(jié)

kubectl edit <資源類型> <資源名> 可以編輯一個資源的具體配置項(xiàng)俐镐,更詳細(xì)的文檔請參考 k8s 中文網(wǎng) - kubectl edit 矫限。edit命令在實(shí)際使用中更偏向于人工修改某個配置項(xiàng)來解決問題,例如修改鏡像地址解決拉取不到鏡像的問題佩抹。更常用的編輯命令請參見下一節(jié)kubectl apply叼风。

kubectl apply 應(yīng)用配置!

上一節(jié)我們知道了一個簡單快捷的編輯配置方法kubectl edit棍苹,但是如果我們想對資源進(jìn)行大范圍的修改呢无宿?總不能打開配置項(xiàng)一個一個手動修改吧。這時(shí)候就可以用到我們的kubectl apply命令了枢里∧跫Γ基本用法如下:

kubectl apply -f <新配置文件名.yaml>

kubeclt apply可以說是edit命令的升級版,它和edit最大的區(qū)別就是栏豺,apply接受一個yaml配置文件彬碱,而不是打開一個編輯器去修改。k8s 在接受到這個配置文件后奥洼,會根據(jù)metadata中的元數(shù)據(jù)來查找目標(biāo)資源巷疼,如果沒有的話則直接新建,如果找到的話就依次比對配置文件之間有什么不同點(diǎn)灵奖,然后應(yīng)用不同的配置嚼沿。

這么做的好處有很多估盘,例如你通過kubectl apply -f https://some-network-site/resourse.yaml命令從一個網(wǎng)站上部署了你的資源,這樣當(dāng)它的管理者更新了這個配置文件后骡尽,你只需要再次執(zhí)行這個命令就可以應(yīng)用更新后的內(nèi)容了遣妥,而且完全不用關(guān)心修改了哪些配置項(xiàng)。

除了修改手段不同以外爆阶,apply命令的行為和edit保持一致燥透,你可以訪問 k8s 中文網(wǎng) - kubectl apply 來查看更多用法。

總結(jié)

本本介紹了如何新建create辨图、刪除delete和修改edit, apply k8s 中的資源班套。閱讀完本文之后,相信你已經(jīng)對 k8s 不再陌生故河,并且在學(xué)習(xí) k8s 的重頭戲 不同資源的用法和特性 時(shí)能起到不小的幫助吱韭。接下來你可以通過 k8s 如何讓你的應(yīng)用活的更久 來了解 k8s 中的重要資源 - 副本控制器ReplicationControllerReplicaSet

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鱼的,一起剝皮案震驚了整個濱河市理盆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凑阶,老刑警劉巖猿规,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宙橱,居然都是意外死亡姨俩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門师郑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來环葵,“玉大人,你說我怎么就攤上這事宝冕≌旁猓” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵地梨,是天一觀的道長菊卷。 經(jīng)常有香客問我,道長湿刽,這世上最難降的妖魔是什么的烁? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮诈闺,結(jié)果婚禮上渴庆,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好襟雷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布刃滓。 她就那樣靜靜地躺著,像睡著了一般耸弄。 火紅的嫁衣襯著肌膚如雪咧虎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天计呈,我揣著相機(jī)與錄音砰诵,去河邊找鬼。 笑死捌显,一個胖子當(dāng)著我的面吹牛茁彭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扶歪,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼理肺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了善镰?” 一聲冷哼從身側(cè)響起妹萨,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎炫欺,沒想到半個月后乎完,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡品洛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年囱怕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毫别。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖典格,靈堂內(nèi)的尸體忽然破棺而出岛宦,到底是詐尸還是另有隱情,我是刑警寧澤耍缴,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布砾肺,位于F島的核電站,受9級特大地震影響防嗡,放射性物質(zhì)發(fā)生泄漏变汪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一蚁趁、第九天 我趴在偏房一處隱蔽的房頂上張望裙盾。 院中可真熱鬧,春花似錦、人聲如沸番官。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽徘熔。三九已至门躯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間酷师,已是汗流浹背讶凉。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留山孔,地道東北人懂讯。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像饱须,于是被迫代替她去往敵國和親域醇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

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

  • 1蓉媳、基礎(chǔ)架構(gòu) 1.1 Master Master節(jié)點(diǎn)上面主要由四個模塊組成:APIServer譬挚、scheduler...
    阿斯蒂芬2閱讀 10,875評論 0 44
  • 1.Pod Pod是k8s的最基本的操作單元,包含一個或多個緊密相關(guān)的容器酪呻,類似于豌豆莢的概念减宣。一個Pod可以被一...
    jony456123閱讀 7,409評論 0 5
  • 排錯指南 - Pod 本文檔介紹 Pod 的異常狀態(tài),可能原因和解決辦法玩荠。 排查 Pod 異常的常用命令如下: 查...
    小孩子的童話2014閱讀 6,974評論 0 2
  • 本文將介紹 k8s 中的一些最基本的命令漆腌,并輔以解釋一些基本概念來方便理解,也就是說阶冈,本文是一篇偏向?qū)嵱眯远菍W(xué)術(shù)...
    HoPGoldy閱讀 32,579評論 0 33
  • ########文章是對官網(wǎng)給出的文檔做了翻譯-_-以及實(shí)操后的個人理解所得闷尿,若有存在不足或者不同之處還望各位大神...
    Feel_狗煥閱讀 84,294評論 2 20