微服務(wù)-kubernetes

當(dāng)我們的web應(yīng)用跑在容器中,如何擴(kuò)容汉柒?如何管理容器間的調(diào)用,負(fù)載均衡责鳍?自己手動新建nginx管理碾褂?自己手動改代碼完成?不用历葛。已經(jīng)有大牛為我們造好了輪子---Kubernetes正塌,它是一個(gè)容器控制平臺。

Kubernetes 通過一個(gè)簡單的 API 提供底層基礎(chǔ)設(shè)施的抽象恤溶,我們可以向該 API 發(fā)送請求乓诽。這些請求可以讓 Kubernetes 盡最大能力應(yīng)對。例如咒程,可以簡單地要求“Kubernetes 添加映像 x 的 4 個(gè)容器鸠天。”然后 Kubernetes 會找出使用中的節(jié)點(diǎn)帐姻,并在內(nèi)添加新的容器稠集。

image

這對開發(fā)人員來說意味著什么?意味著開發(fā)人員不需要在意節(jié)點(diǎn)的數(shù)目饥瓷,也不需要在意從哪里運(yùn)行容器以及如何與它們交流剥纷。開發(fā)人員不需要管理硬件優(yōu)化,或擔(dān)心節(jié)點(diǎn)關(guān)閉(它們將遵循墨菲法則)扛伍,因?yàn)樾碌墓?jié)點(diǎn)會添加到 Kubernetes 集群筷畦。同時(shí) Kubernetes 會在其他運(yùn)行的節(jié)點(diǎn)中添加容器。Kubernetes 會發(fā)揮最大的作用刺洒。

在圖中我們看到了一些新東西:

API服務(wù)器:與集群交互的唯一方式鳖宾。負(fù)責(zé)啟動或停止另外一個(gè)容器,或檢查當(dāng)前狀態(tài)逆航,日志等鼎文;

Kubelet:監(jiān)視節(jié)點(diǎn)內(nèi)的容器,并與主節(jié)點(diǎn)交流因俐;

Pod:初始階段我們可以把 pod 當(dāng)成容器拇惋。


Pod

Kubernetes 給我們最小的可部署計(jì)算單元 Pod 。它可以理解為一個(gè)邏輯宿主機(jī)抹剩,可以啟動一個(gè)或者多個(gè)容器撑帖,這些容器共享同一個(gè)端口空間,他們可以通過 localhost 交流澳眷,與其他 Pod 內(nèi)容器的交流可以通過結(jié)合 Pod 的 IP 完成胡嘿。

一個(gè) Pod 內(nèi)的容器共享同一個(gè)卷、同一個(gè) IP钳踊、端口空間衷敌、IPC 命名空間勿侯。

注:容器有個(gè)自己獨(dú)立的文件系統(tǒng),盡管他們可以通過 Kubernetes 的資源卷共享數(shù)據(jù)

pod.yaml文件編寫方式:


apiVersion: v1

kind: Pod                                           

metadata:

  name: sa-frontend

  labels:

    app: sa-frontend                                

spec:                                                

  containers:

    - image: rinormaloku/sentiment-analysis-frontend 

      name: sa-frontend                             

      ports:

        - containerPort: 80                         

  • kind:指定我們想創(chuàng)建的 Kubernetes 資源的類型缴罗。這里是 Pod助琐。
  • name:定義該資源的名字。我們在這里命名為 sa-frontend面氓。
  • spec:該對象定義了資源應(yīng)有的狀態(tài)兵钮。Pod Spec 中最重要的屬性是容器的數(shù)組。
  • image:是指我們希望在本 Pod 中啟動的容器的映像侧但。
  • name:Pod 中容器中唯一的名字矢空。
  • containerPort:是指容器監(jiān)聽的端口號。

終端輸入
kubectl apply -f pod.yaml
創(chuàng)建pod


Service

Kubernetes 服務(wù)資源可以作為一組提供相同服務(wù)的 Pod 的入口禀横。這個(gè)資源肩負(fù)發(fā)現(xiàn)服務(wù)和平衡 Pod 之間負(fù)荷的重任屁药。
在 Kubernetes 集群內(nèi),我們擁有提供不同服務(wù)的 Pod(前端柏锄、Spring 網(wǎng)絡(luò)應(yīng)用和 Flask Python 應(yīng)用程序)酿箭。所以這里的問題是:服務(wù)如何知道該處理哪個(gè) Pod?例如:它如何生成這些 Pod 的終端列表趾娃?
這個(gè)問題可以用標(biāo)簽來解決缭嫡,具體分兩個(gè)步驟:

  • 給所有服務(wù)處理的對象 Pod 貼上標(biāo)簽(label);
  • 在服務(wù)中使用一個(gè)選擇器(selector)抬闷,該選擇器定義了所有貼有標(biāo)簽的對象 Pod妇蛀。
image.png

service.yaml文件編寫方式:

apiVersion: v1
kind: Service              
metadata:
  name: sa-frontend-lb
spec:
  type: LoadBalancer       
  ports:
  - port: 80              
    protocol: TCP          
    targetPort: 80         
  selector:                
    app: sa-frontend       
  • kind:服務(wù);
  • type:指定類型笤成,我們選擇 LoadBalancer评架,因?yàn)槲覀兿肫胶?Pod 之間的負(fù)荷;
  • ports:指定服務(wù)獲取請求的端口炕泳;
  • protocol:定義交流纵诞;#5 targetPort:可以將來訪的請求轉(zhuǎn)發(fā)到這個(gè)端口;
  • selector:包含選擇pod屬性的對象培遵;
  • app:sa-frontend定義了哪個(gè)是目標(biāo) Pod浙芙,只有擁有標(biāo)簽“app: sa-frontend”的才是目標(biāo) Pod。
    終端輸入
kubectl apply -f service.yaml

創(chuàng)建service


Deployment

Kubernetes 部署可以幫助每一個(gè)應(yīng)用程序的生命都保持相同的一點(diǎn):那就是變化籽腕。此外嗡呼,只有掛掉的應(yīng)用程序才會一塵不變,否則皇耗,新的需求會源源不斷地涌現(xiàn)晤锥,更多代碼會被開發(fā)出來、打包以及部署廊宪。這個(gè)過程中的每一步都有可能出錯(cuò)矾瘾。
部署資源可以自動化應(yīng)用程序從一版本升遷到另一版本的過程,并保證服務(wù)不間斷箭启,如果有意外發(fā)生壕翩,它可以讓我們迅速回滾到前一個(gè)版本。

現(xiàn)在我們有兩個(gè) Pod 和一個(gè)服務(wù)開放傅寡,而且它們之間有負(fù)載均衡放妈。我們提到過現(xiàn)有的 Pod 還遠(yuǎn)遠(yuǎn)不夠完美。需要分開管理每一個(gè) Pod(創(chuàng)建荐操、更新芜抒、刪除和監(jiān)視他們的情況)⊥衅簦快速更新和迅速回滾根本不可能宅倒!這樣是不行的,部署 Kubernetes 資源可以解決這里的每個(gè)問題屯耸。


image.png

deployment.yaml文件編寫方式:

apiVersion: extensions/v1beta1
kind: Deployment                                          
metadata:
  name: sa-frontend
spec:
  replicas: 2                                            
  minReadySeconds: 15
  strategy:
    type: RollingUpdate                                  
    rollingUpdate: 
      maxUnavailable: 1                                   
      maxSurge: 1                                       
  template:
    metadata:
      labels:
        app: sa-frontend                                 
    spec:
      containers:
        - image: rinormaloku/sentiment-analysis-frontend
          imagePullPolicy: Always                        
          name: sa-frontend
          ports:
            - containerPort: 80
  • kind:部署拐迁;
  • replicas:是部署 Spec 對象的一個(gè)屬性,定義了我們想運(yùn)行多少的 Pod疗绣。所以是 2线召;
  • type:指定從當(dāng)前版本升遷到下個(gè)版本的時(shí)候,部署使用的策略多矮。此處的策略 RollingUpdate 可以保證部署期間服務(wù)不間斷缓淹;
  • maxUnavailable:是 RollingUpdate 對象的一個(gè)屬性,定義了在升級的時(shí)候塔逃,最大允許停止的 Pod 數(shù)量(與希望的狀態(tài)相比)讯壶。對我們的部署來說,我們有 2 個(gè)副本患雏,這意味著在一個(gè) Pod 停止后鹏溯,我們還會有另外一個(gè) Pod 運(yùn)行,所以可以保證應(yīng)用程序可訪問淹仑;
  • maxSurge:是 RollingUpdate 對象的另一個(gè)屬性丙挽,定義了添加到部署的最大 Pod 數(shù)量(與希望的狀態(tài)相比)。對我們的部署來說匀借,這意味著在向新版本遷移的時(shí)候颜阐,我們可以加一個(gè) Pod,那么我們可以同時(shí)擁有個(gè) 3 個(gè) Pod吓肋;
  • template:指定 Pod 的模板凳怨,部署在創(chuàng)建新 Pod 的時(shí)候,會用到該模板。很可能這個(gè)非常相似的 Pod 會立即吸引你肤舞;
  • app: sa-frontend:根據(jù)模板創(chuàng)建的 Pod 將被貼上該標(biāo)簽紫新;
  • imagePullPolicy:當(dāng)設(shè)置成 Always 的時(shí)候,每一次新部署都會重新獲取容器映像李剖。

終端輸入

kubectl apply -f deployment.yaml

創(chuàng)建deployment

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芒率,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子篙顺,更是在濱河造成了極大的恐慌偶芍,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件德玫,死亡現(xiàn)場離奇詭異匪蟀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)宰僧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門材彪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人撒桨,你說我怎么就攤上這事查刻。” “怎么了凤类?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵穗泵,是天一觀的道長。 經(jīng)常有香客問我谜疤,道長佃延,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任夷磕,我火速辦了婚禮履肃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坐桩。我一直安慰自己尺棋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布绵跷。 她就那樣靜靜地躺著膘螟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪碾局。 梳的紋絲不亂的頭發(fā)上荆残,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機(jī)與錄音净当,去河邊找鬼内斯。 笑死蕴潦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的俘闯。 我是一名探鬼主播潭苞,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼备徐!你這毒婦竟也來了萄传?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蜜猾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后振诬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹭睡,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年赶么,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肩豁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辫呻,死狀恐怖清钥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情放闺,我是刑警寧澤祟昭,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站怖侦,受9級特大地震影響篡悟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜匾寝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一搬葬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧艳悔,春花似錦急凰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至码倦,卻和暖如春企孩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背袁稽。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工勿璃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尚卫。 一個(gè)月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓灭袁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親折砸。 傳聞我的和親對象是個(gè)殘疾皇子莲组,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評論 2 359