kubernetes 2022-05-05

一颂鸿、 核心組件

· etcd 保存了整個集群的狀態(tài)

· apiserver 提供了資源操作的唯一入口吗冤,并提供了認(rèn)證授權(quán)便贵、訪問控制问顷、API注冊和發(fā)現(xiàn)機(jī)制昂秃;

· controller manager 負(fù)責(zé)維護(hù)集群的狀態(tài),比如故障檢測杜窄、自動擴(kuò)展肠骆、滾動更新等;

·?scheduler 負(fù)責(zé)資源的調(diào)度塞耕,按照預(yù)定的調(diào)度策略將 Pod 調(diào)度到相應(yīng)的機(jī)器上蚀腿;

·?kubelet 負(fù)責(zé)維護(hù)容器的生命周期,同時也負(fù)責(zé) Volume(CVI)和網(wǎng)絡(luò)(CNI)的管理扫外;

· Container runtime 負(fù)責(zé)鏡像管理以及 Pod 和容器的真正運(yùn)行(CRI)莉钙;

· kube-proxy 負(fù)責(zé)為 Service 提供 cluster 內(nèi)部的服務(wù)發(fā)現(xiàn)和負(fù)載均衡

除了核心組件,還有一些推薦的 Add-ons:

·?kube-dns 負(fù)責(zé)為整個集群提供 DNS 服務(wù)

·?Ingress Controller 為服務(wù)提供外網(wǎng)入口

·?Heapster 提供資源監(jiān)控

·?Dashboard 提供 GUI

·?Federation 提供跨可用區(qū)的集群

·?Fluentd-elasticsearch 提供集群日志采集筛谚、存儲與查詢

參考文檔:https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/
二磁玉、kubernetes 基本概念

1.Container(容器)是一種便攜式、輕量級的操作系統(tǒng)級虛擬化技術(shù)驾讲。它使用 namespace 隔離不同的軟件運(yùn)行環(huán)境蚊伞,并通過鏡像自包含軟件的運(yùn)行環(huán)境,從而使得容器可以很方便的在任何地方運(yùn)行吮铭。

由于容器體積小且啟動快时迫,因此可以在每個容器鏡像中打包一個應(yīng)用程序。這種一對一的應(yīng)用鏡像關(guān)系擁有很多好處谓晌。使用容器掠拳,不需要與外部的基礎(chǔ)架構(gòu)環(huán)境綁定, 因為每一個應(yīng)用程序都不需要外部依賴,更不需要與外部的基礎(chǔ)架構(gòu)環(huán)境依賴扎谎。完美解決了從開發(fā)到生產(chǎn)環(huán)境的一致性問題碳想。

容器同樣比虛擬機(jī)更加透明烧董,這有助于監(jiān)測和管理。尤其是容器進(jìn)程的生命周期由基礎(chǔ)設(shè)施管理胧奔,而不是被進(jìn)程管理器隱藏在容器內(nèi)部逊移。最后,每個應(yīng)用程序用容器封裝龙填,管理容器部署就等同于管理應(yīng)用程序部署胳泉。

2.?Pod 是一組緊密關(guān)聯(lián)的容器集合,它們共享 IPC 和 Network namespace岩遗,是 Kubernetes 調(diào)度的基本單位扇商。Pod 內(nèi)的多個容器共享網(wǎng)絡(luò)和文件系統(tǒng),可以通過進(jìn)程間通信和文件共享這種簡單高效的方式組合完成服務(wù)宿礁。

Kubernetes 使用 Pod 來管理容器案铺,每個 Pod 可以包含一個或多個緊密關(guān)聯(lián)的容器。

3.?Node 是 Pod 真正運(yùn)行的主機(jī)梆靖,可以是物理機(jī)控汉,也可以是虛擬機(jī)。為了管理 Pod返吻,每個 Node 節(jié)點上至少要運(yùn)行 container runtime(比如 docker 或者 rkt)姑子、kubelet 和 kube-proxy 服務(wù)。

4.?Namespace 是對一組資源和對象的抽象集合测僵,比如可以用來將系統(tǒng)內(nèi)部的對象劃分為不同的項目組或用戶組街佑。常見的 pods, services, replication controllers 和 deployments 等都是屬于某一個 namespace 的(默認(rèn)是 default),而 node, persistentVolumes 等則不屬于任何 namespace捍靠。

5.?Service 是應(yīng)用服務(wù)的抽象沐旨,通過 labels 為應(yīng)用提供負(fù)載均衡和服務(wù)發(fā)現(xiàn)。匹配 labels 的 Pod IP 和端口列表組成 endpoints剂公,由 kube-proxy 負(fù)責(zé)將服務(wù) IP 負(fù)載均衡到這些 endpoints 上希俩。

每個 Service 都會自動分配一個 cluster IP(僅在集群內(nèi)部可訪問的虛擬地址)和 DNS 名,其他容器可以通過該地址

或 DNS 來訪問服務(wù)纲辽,而不需要了解后端容器的運(yùn)行颜武。


6.?Label 是識別 Kubernetes 對象的標(biāo)簽,以 key/value 的方式附加到對象上(key 最長不能超過 63 字節(jié)拖吼,value 可以為空鳞上,也可以是不超過 253 字節(jié)的字符串)。

Label 不提供唯一性吊档,并且實際上經(jīng)常是很多對象(如 Pods)都使用相同的 label 來標(biāo)志具體的應(yīng)用篙议。

Label 定義好后其他對象可以使用 Label Selector 來選擇一組相同 label 的對象(比如 ReplicaSet 和 Service 用 label 來選擇一組 Pod)。Label Selector 支持以下幾種方式:

· 等式,如 app=nginx 和 env!=production

· 集合鬼贱,如 env in (production, qa)

· 多個 label(它們之間是 AND 關(guān)系)移怯,如 app=nginx,env=test

7.?Annotations 是 key/value 形式附加于對象的注解。不同于 Labels 用于標(biāo)志和選擇對象这难,Annotations 則是用來記錄一些附加信息舟误,用來輔助應(yīng)用部署、安全策略以及調(diào)度策略等姻乓。比如 deployment 使用 annotations 來記錄 rolling update 的狀態(tài)嵌溢。

三、基礎(chǔ)命令

1.

$ kubectl run --image=nginx:alpine nginx-app --port=80

deployment "nginx-app" created

$ kubectl get pods

NAME? ? ? ? ? ? ? ? ? ? ? ? READY? ? STATUS? ? RESTARTS? AGE

nginx-app-4028413181-cnt1i? 1/1? ? ? Running? 0? ? ? ? ? 52s

· kubectl get - 類似于 docker ps蹋岩,查詢資源列表

· kubectl describe - 類似于 docker inspect赖草,獲取資源的詳細(xì)信息

· kubectl logs - 類似于 docker logs,獲取容器的日志

· kubectl exec - 類似于 docker exec剪个,在容器內(nèi)執(zhí)行一個命令

2.?使用 yaml 定義 Pod

上面是通過 kubectl run 來啟動了第一個 Pod秧骑,但是 kubectl run 并不支持所有的功能。在 Kubernetes 中禁偎,更經(jīng)常使用 yaml 文件來定義資源腿堤,并通過 kubectl create -f file.yaml 來創(chuàng)建資源。比如如暖,一個簡單的 nginx Pod 可以定義為:

apiVersion: v1

kind: Pod

metadata:

? name: nginx

? labels:

? ? app: nginx

spec:

? containers:

? - name: nginx

? ? image: nginx

? ? ports:

? ? - containerPort: 80

3.?使用 Volume

Pod 的生命周期通常比較短,只要出現(xiàn)了異常忌堂,就會創(chuàng)建一個新的 Pod 來代替它盒至。那容器產(chǎn)生的數(shù)據(jù)呢?容器內(nèi)的數(shù)據(jù)會隨著 Pod 消亡而自動消失士修。Volume 就是為了持久化容器數(shù)據(jù)而生枷遂,比如可以為 redis 容器指定一個 hostPath 來存儲 redis 數(shù)據(jù)

apiVersion: v1

kind: Pod

metadata:

? name: redis

spec:

? containers:

? - name: redis

? ? image: redis

? ? volumeMounts:

? ? - name: redis-persistent-storage

? ? ? mountPath: /data/redis

? volumes:

? - name: redis-persistent-storage

? ? hostPath:

? ? ? path: /data/

Kubernetes volume 支持非常多的插件,可以根據(jù)實際需要來選擇

·?emptyDir

· hostPath

·?gcePersistentDisk

·?awsElasticBlockStore

·?nfs

·?iscsi

·?flocker

·?glusterfs

·?rbd

·?cephfs

·?gitRepo

·?secret

·?persistentVolumeClaim

·?downwardAPI

·?azureFileVolume

·?vsphereVolume

4.使用 Service

前面雖然創(chuàng)建了 Pod棋嘲,但是在 kubernetes 中酒唉,Pod 的 IP 地址會隨著 Pod 的重啟而變化,并不建議直接拿 Pod 的 IP 來交互沸移。那如何來訪問這些 Pod 提供的服務(wù)呢痪伦?使用 Service。Service 為一組 Pod(通過 labels 來選擇)提供一個統(tǒng)一的入口雹锣,并為它們提供負(fù)載均衡和自動服務(wù)發(fā)現(xiàn)网沾。比如,可以為前面的 nginx-app 創(chuàng)建一個 service

$ kubectl expose deployment nginx-app --port=80 --target-port=80 --type=NodePort

service "nginx-app" exposed

$ kubectl describe service nginx-app

Name:? ? ? ? ? ? ? nginx-app

Namespace:? ? ? ? ? ? default

Labels:? ? ? ? ? ? run=nginx-app

Selector:? ? ? ? ? ? ? run=nginx-app

Type:? ? ? ? ? ? ? ClusterIP

IP:? ? ? ? ? ? ? ? 10.0.0.66

Port:? ? ? ? ? ? ? <unset>? ? 80/TCP

NodePort:? ? ? ? ? ? ? <unset>? ? 30772/TCP

Endpoints:? ? ? ? ? ? 172.17.0.3:80

Session Affinity:? ? ? ? ? None

No events.

這樣蕊爵,在 cluster 內(nèi)部就可以通過 http://10.0.0.66 和 http://node-ip:30772 來訪問 nginx-app辉哥。而在 cluster 外面,則只能通過 http://node-ip:30772 來訪問。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末醋旦,一起剝皮案震驚了整個濱河市恒水,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌饲齐,老刑警劉巖钉凌,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異箩张,居然都是意外死亡甩骏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門先慷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饮笛,“玉大人,你說我怎么就攤上這事论熙「G啵” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵脓诡,是天一觀的道長无午。 經(jīng)常有香客問我,道長祝谚,這世上最難降的妖魔是什么宪迟? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮交惯,結(jié)果婚禮上次泽,老公的妹妹穿的比我還像新娘。我一直安慰自己席爽,他們只是感情好意荤,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著只锻,像睡著了一般玖像。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上齐饮,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天捐寥,我揣著相機(jī)與錄音,去河邊找鬼沈矿。 笑死上真,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的羹膳。 我是一名探鬼主播睡互,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了就珠?” 一聲冷哼從身側(cè)響起寇壳,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎妻怎,沒想到半個月后壳炎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡逼侦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年匿辩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榛丢。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡铲球,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晰赞,到底是詐尸還是另有隱情稼病,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布掖鱼,位于F島的核電站然走,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏戏挡。R本人自食惡果不足惜芍瑞,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望褐墅。 院中可真熱鬧啄巧,春花似錦、人聲如沸掌栅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猾封。三九已至,卻和暖如春噪珊,著一層夾襖步出監(jiān)牢的瞬間晌缘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工痢站, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留磷箕,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓阵难,卻偏偏與公主長得像岳枷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354