iT邦幫忙

2021 iThome 鐵人賽

DAY 2
3
DevOps

k8s 入門學習 30天系列 第 2

IT 鐵人賽 k8s 入門30天 -- day2 k8s 元件介紹

  • 分享至 

  • xImage
  •  

前言

為了能夠更全面的去理解k8s的原理

今天主要從k8s 幾個基礎的元件開始介紹

Node & Pod

Pod: 在k8s中,代表的是最小的一個運行單位,是對於Container群集的一種抽象,
裏面可以跑多個Container,但通常是一個Pod內只有一個 container

Node: 在k8s中,代表的是一台伺服器,不論是虛擬機器或是一台實體的伺服器
裏面可以跑多個Pod

特別要注意的是每個Pod產生時都自動被賦予一個虛擬IP

而每個Pod可以透過這個虛擬IP來做溝通

以上圖為例:my-app pod 就可以透過 DB pod的虛擬IP 來存取到 DB 這個container

Service

雖然每個Pod可以透過虛擬IP來做溝通

然而當每個Pod重新被建立時所屬的虛擬IP就重新被分配

加上Pod本身並非是穩定

所以透過虛擬IP來做Pod之間的溝通並非好方法

Service就是可以處理這個問題的元件

Service: 在k8s中, Service提供了一永久的IP讓Pod可以掛載在上面,

並且生命周期跟Pod不相依

所以不擔心Pod重建立之後存取點會變動

另外, Service會分位可以被外部存取與否分為, 外部Service還有內部Service兩種

Ingress

Service提供了一個永久IP 然而對實際上的應用來說

可是透過IP的方式仍然不夠方便

Ingress元件提供了域名服務,讓外部使用者可以透過域名來存取對外的Service

Ingress:在k8s, Ingress 提供了域名服務,讓外部使用者可以透過域名來存取對外的Service,

並且能夠提供平衡負載跟路由的能力來有效分配封包給對應的Service

ConfigMap and Secret

如果需要更新Pod內部的container內容時,就會需要重新建立container的映像檔

然而有時只是需要更新一些設定而已, 這樣的代價會有點高

ConfigMap元件讓Pod放置應用程式設定值,並且在整個pod可以共享設定值

因此當應用程式值做了修改,不需要經過整個重建container的過程

ConfigMap元件存儲設定檔的方式是明文,對一些敏感資料比如資料庫連線使用者帳密

不建議存放於此

Secret元件提供了Pod存放機敏資料的功能,以base64編碼存放資料

ConfigMap:在k8s中,ConfigMap提供存放Pod應用程式設定值的功能,

但是明碼存放,不適合存放機敏資料

Secret:提供了Pod存放機敏資料的功能,以base64編碼存放資料

Volumes

在前面的架構中, DB Pod或是 APP Pod如果重新啟動之時

如果沒有另外掛載在container之外的存儲系統

存在container內的資料會在重新啟動後消失

所以如果希望container資料能夠在重啟後被保存

就需要用Volumes元件掛載資料到存儲系統

這個存儲系統可以在遠端也可以是雲端或是本地機器上

Volumes: 在k8s,提供Pod掛載存儲系統的元件,

這個存儲系統可以在遠端也可以是雲端或是本地機器上

要注意的是,k8s只維護狀態,並不會維護Pod所掛載的存儲系統狀態

概念如下:

Deployment and StatefulSet

k8s為了達到高可用性,因此每個對於每個Pod都是採用Replica的方式

直接複製一份Pod到另一個Node

複製的時候並非重新建制一個,而是使用Deployment元件來建制

Deployment是Pod的藍圖

可是對於有狀態的Pod,比如說Database,通常會掛載Volumes

在複製時需要考慮到寫入Volumes資料的一致性

這時就需要使用StatefulSet這個元件來做複製

Deployment: 在k8s中,用來建構無狀態Pod的藍圖

StatefulSet: 在k8s中,用來建構有狀態Pod的藍圖

特別的是,建構有狀態的Pod往往比無狀態的Pod複雜許多

因此k8s傾向建制無狀態的Pod


上一篇
IT 鐵人賽 k8s 入門30天 -- day1 什麼是k8s? k8s能做到什麼?
下一篇
IT 鐵人賽 k8s 入門30天 -- day3 k8s 架構:k8s Node Compoents
系列文
k8s 入門學習 30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
QQBoxy
iT邦研究生 5 級 ‧ 2021-09-16 17:12:30

請問大大的流程圖是用什麼做的? 好厲害!

json_liang iT邦研究生 4 級 ‧ 2021-09-16 17:16:25 檢舉

我是用這個 draw.io , 有問題都歡迎提出唷XD

QQBoxy iT邦研究生 5 級 ‧ 2021-09-28 08:08:44 檢舉

好哦好哦,感謝大大XD

我要留言

立即登入留言