部署一個簡單pod

例1:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

例2:在上面yaml的基礎(chǔ)上添加了volume
[root@kub-k8s-master prome]# vim deployment.yaml

apiVersion: apps/v1  #注意版本號
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:  #屬性,選擇器
    matchLabels:
      app: nginx
  replicas: 2  #管理的副本個數(shù)
  template:  #模板屬性
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: daocloud.io/library/nginx
        ports:
        - containerPort: 80
        volumeMounts:  #定義掛載卷
        - mountPath: "/usr/share/nginx/html"
          name: nginx-vol
      volumes:   #定義共享卷
      - name: nginx-vol
        emptyDir: {}

創(chuàng)建Deployment:

將上述的YAML文件保存為deployment.yaml,然后創(chuàng)建Deployment:

[root@kub-k8s-master prome]# kubectl apply -f deployment.yaml
deployment.apps/nginx-deployment created

*檢查Deployment的列表:啟動之后需要創(chuàng)建時間比較長

通過 kubectl get 命令檢查這個 YAML 運行起來的狀態(tài):

[root@kub-k8s-master prome]# kubectl get deployments
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2/2     2            2           2m22s

[root@kub-k8s-master prome]# kubectl get pods -l app=nginx
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-59c4b86474-2llrt   1/1     Running   0          2m51s
nginx-deployment-59c4b86474-n2r2m   1/1     Running   0          2m51s
  • 在這里加上了一個 -l 參數(shù)钧忽,即獲取所有匹配 app: nginx 標簽的 Pod。需要注意的是瘟则,在命令行中,所有 key-value 格式的參數(shù)枝秤,都使用"="而非":"表示醋拧。

刪除Deployment:

[root@k8s-master ~]# kubectl delete deployments nginx-deployment
deployment "nginx-deployment" deleted
或者
[root@k8s-master ~]# kubectl delete -f   deployment.yaml

如果Pod出現(xiàn)故障,對應(yīng)的服務(wù)也會掛掉宿百,所以Kubernetes提供了一個Deployment的概念 趁仙,
目的是讓Kubernetes去管理一組Pod的副本洪添,也就是副本集 垦页,這樣就能夠保證一定數(shù)量的副本一直可用,不會因為某一個Pod掛掉導(dǎo)致整個服務(wù)掛掉干奢。
Deployment 還負責在 Pod 定義發(fā)生變化時痊焊,對每個副本進行滾動更新(Rolling Update)。

這樣使用一種 API 對象(Deployment)管理另一種 API 對象(Pod)的方法忿峻,在 k8s 中薄啥,叫作"控制器"模式(controller pattern)。Deployment 扮演的正是 Pod 的控制器的角色逛尚。

apiVersion:注意這里apiVersion對應(yīng)的值是extensions/v1beta1或者apps/v1.這個版本號需要根據(jù)安裝的Kubernetes版本和資源類型進行變化垄惧,記住不是寫死的。此值必須在kubectl apiversion中 :

[root@kub-k8s-master prome]# kubectl api-versions
    apps/v1beta1
    authentication.k8s.io/v1beta1
    authorization.k8s.io/v1beta1
    autoscaling/v1
    batch/v1
    certificates.k8s.io/v1alpha1
    extensions/v1beta1
    policy/v1beta1
    rbac.authorization.k8s.io/v1alpha1
    storage.k8s.io/v1beta1
    v1
  • kind:資源類型:這里指定為Deployment绰寞。

  • metadata:指定一些meta信息到逊,包括名字或標簽之類的。
    每一個 API 對象都有一個叫作 Metadata 的字段滤钱,這個字段是 API 對象的"標識"觉壶,即元數(shù)據(jù),
    也是我們從 Kubernetes 里找到這個對象的主要依據(jù)件缸。

  • labels:Labels是最主要的字段,是一組 key-value 格式的標簽,k8s中的所有資源都支持攜帶label,默認情況下铜靶,pod的label會復(fù)制rc的label
    k8s使用用戶自定義的key-value鍵值對來區(qū)分和標識資源集合(就像rc、pod等資源)他炊,這種鍵值對稱為label争剿。
    像 Deployment 這樣的控制器對象已艰,就可以通過這個 Labels 字段從 Kubernetes 中過濾出它所關(guān)心的被控制對象。

  • Annotations:在 Metadata 中蚕苇,還有一個與 Labels 格式旗芬、層級完全相同的字段叫 Annotations,
    它專門用來攜帶 key-value 格式的內(nèi)部信息捆蜀。所謂內(nèi)部信息疮丛,指的是對這些信息感興趣的,
    是 Kubernetes 組件本身辆它,而不是用戶誊薄。所以大多數(shù) Annotations,都是在 Kubernetes 運行過程中锰茉,被自動加在這個 API 對象上呢蔫。

  • selector:過濾規(guī)則的定義,是在 Deployment 的"spec.selector.matchLabels"字段飒筑。一般稱之為:Label Selector片吊。
    pod的label會被用來創(chuàng)建一個selector,用來匹配過濾攜帶這些label的pods协屡。

使用labels定位pods:

[root@kub-k8s-master prome]# kubectl get pods -l app=nginx -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP            NODE       
nginx-deployment-59c4b86474-2llrt   1/1     Running   0          16m   10.244.2.15   kub-k8s-node2   
nginx-deployment-59c4b86474-n2r2m   1/1     Running   0          16m   10.244.1.39   kub-k8s-node1   

檢查你的Pod的IPs:

[root@kub-k8s-master prome]# kubectl get pods -l app=nginx -o json | grep podIP
                "podIP": "10.244.2.15",
                "podIPs": [
                "podIP": "10.244.1.39",
                "podIPs": [
  • spec : 一個 k8s 的 API 對象的定義俏脊,大多可以分為 Metadata 和 Spec 兩個部分。
    前者存放的是這個對象的元數(shù)據(jù)肤晓,對所有 API 對象來說爷贫,這一部分的字段和格式基本上是一樣的;
    而后者存放的补憾,則是屬于這個對象獨有的定義漫萄,用來描述它所要表達的功能。
    這里定義需要兩個副本盈匾,此處可以設(shè)置很多屬性腾务,主要是受此Deployment影響的Pod的選擇器

  • replicas:定義的 Pod 副本個數(shù) (spec.replicas) 是:2

  • template:定義了一個 Pod 模版(spec.template),這個模版描述了想要創(chuàng)建的 Pod 的細節(jié)削饵。
    例子里岩瘦,這個 Pod 里只有一個容器,這個容器的鏡像(spec.containers.image)是 nginx:latest葵孤,這個容器監(jiān)聽端口(containerPort)是 80担钮。

  • volumes:是屬于 Pod 對象的一部分。需要修改 template.spec 字段
    例2中尤仍,在 Deployment 的 Pod 模板部分添加了一個 volumes 字段箫津,定義了這個 Pod 聲明的所有 Volume。它的名字叫作 nginx-vol,類型是 emptyDir苏遥。

關(guān)于emptyDir 類型:等同于 Docker 的隱式 Volume 參數(shù)饼拍,即:不顯式聲明宿主機目錄的 Volume。
所以田炭,Kubernetes 也會在宿主機上創(chuàng)建一個臨時目錄师抄,這個目錄將來就會被綁定掛載到容器所聲明的 Volume 目錄上。
k8s 的 emptyDir 類型教硫,只是把 k8s 創(chuàng)建的臨時目錄作為 Volume 的宿主機目錄叨吮,交給了 Docker。這么做的原因瞬矩,是 k8s 不想依賴 Docker 自己創(chuàng)建的那個 _data 目錄茶鉴。

  • volumeMounts:Pod 中的容器,使用的是 volumeMounts 字段來聲明自己要掛載哪個 Volume景用,并通過 mountPath 字段來定義容器內(nèi)的 Volume 目錄涵叮,比如:/usr/share/nginx/html。

  • hostPath:k8s 也提供了顯式的 Volume 定義伞插,它叫做 hostPath割粮。比如下面的這個 YAML 文件:
    ...
    volumes:
    - name: nginx-vol
    hostPath:
    path: /var/data
    這樣,容器 Volume 掛載的宿主機目錄媚污,就變成了 /var/data

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舀瓢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子杠步,更是在濱河造成了極大的恐慌氢伟,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幽歼,死亡現(xiàn)場離奇詭異,居然都是意外死亡谬盐,警方通過查閱死者的電腦和手機甸私,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來飞傀,“玉大人皇型,你說我怎么就攤上這事≡曳常” “怎么了弃鸦?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長幢痘。 經(jīng)常有香客問我唬格,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任购岗,我火速辦了婚禮汰聋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘喊积。我一直安慰自己烹困,他們只是感情好,可當我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布乾吻。 她就那樣靜靜地躺著髓梅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绎签。 梳的紋絲不亂的頭發(fā)上女淑,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天,我揣著相機與錄音辜御,去河邊找鬼鸭你。 笑死,一個胖子當著我的面吹牛擒权,可吹牛的內(nèi)容都是我干的袱巨。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼碳抄,長吁一口氣:“原來是場噩夢啊……” “哼愉老!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起剖效,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤嫉入,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后璧尸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咒林,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年爷光,在試婚紗的時候發(fā)現(xiàn)自己被綠了垫竞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡蛀序,死狀恐怖欢瞪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情徐裸,我是刑警寧澤遣鼓,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站重贺,受9級特大地震影響骑祟,放射性物質(zhì)發(fā)生泄漏回懦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一曾我、第九天 我趴在偏房一處隱蔽的房頂上張望粉怕。 院中可真熱鬧,春花似錦抒巢、人聲如沸贫贝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稚晚。三九已至,卻和暖如春型诚,著一層夾襖步出監(jiān)牢的瞬間客燕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工狰贯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留也搓,地道東北人。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓涵紊,卻偏偏與公主長得像傍妒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子摸柄,可洞房花燭夜當晚...
    茶點故事閱讀 45,937評論 2 361

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