SlideShare a Scribd company logo
如何運用 Kubernetes 打造
微服務生態圈
Yi-Fu Ciou
yfciou at itri.org.tw
Copyright ITRI 工業技術研究院
About Me
• Stevennick
• Developer @ ITRI
• https://stevennick.net
• Get this at
http://bit.ly/2ucswUK
2019/3/25 2
Copyright ITRI 工業技術研究院
今日主題
• 為何選擇 Kubernetes
• 案例分享
– DNN農場
– AI大資料雲端服務
• Kuard應用程式
• K8S的極限
• 相關資源
2019/3/25 3
Copyright ITRI 工業技術研究院
為何選擇 KUBERNETES
2019/3/25 4
Copyright ITRI 工業技術研究院
傳統架構 vs 微服務
2019/3/25 5
Source: Testing microservices - Los Techies
https://lostechies.com/andrewsiemer/2016/01/11/testing-microservices/
Copyright ITRI 工業技術研究院
微服務架構的挑戰
• 複雜度
微服務天生為分散式架構,自然無法避免分散式服務帶來的各種挑戰
• 開發與測試
由於架構複雜度提升,針對應用整合的開發就會變得更加困難
• 資料一致性與完整性
個別服務各自維護私有資料,如何將資料同步將是難題
• 版本控制
個別服務獨立開發,維護彼此間合適的適用版本將成為挑戰。另一方
面,在服務佈署上,容忍不同版本的相同服務一起工作也是個挑戰
• 維運
微服務提供了維運人員更精細的應用控制,但同時也加重了維護分散
式系統正確運作的難度
2019/3/25 6
Copyright ITRI 工業技術研究院
Kubernetes 是甚麼
• Kubernetes(簡稱k8s) 是開放原始碼的容器
化應用程式排程與分散式佈署系統
• 針對已經容器化的應用程式,k8s提供佈署、
維運,以及基於CPU、Memory或其他資源
為主的擴展功能
2019/3/25 7
Copyright ITRI 工業技術研究院
使用kubernetes的好處
• 複雜度
– 提供Pod/ReplicationSet/Deployment 給容器應用程式,
DNS為基礎的服務探索機制
• 開發與測試
– 引入Namespaces 進行應用隔離; RBAC做權限控制
• 資料一致性與完整性:
– ConfigMap 描述服務堆疊
• 版本控制
– 採組態檔案設置,並使用etcd儲存重要資訊
• 維運
– 提供API/CLI工具進行各種工作,遇到單點錯誤有機會
自動恢復,內建漸進式更新/回滾版本機制
2019/3/25 9
Copyright ITRI 工業技術研究院
微服務架構 vs Kubernetes
2019/3/25 10
Source: Spring Cloud for Microservices Compared to Kubernetes
https://developers.redhat.com/blog/2016/12/09/spring-cloud-for-microservices-compared-to-kubernetes/
Copyright ITRI 工業技術研究院
案例分享
DNN農場
2019/3/25 11
Copyright ITRI 工業技術研究院
DNN農場
• 1 個主要節點(Master)
• 7 個工作節點(Worker)
– 4台Nvidia DGX-1,個別內含8個V-100圖形處理
器
– 3台DIY工作站,個別內含8個Nvidia GTX-
1080Ti
• 2 儲存節點
– FTP服務進行資料傳輸, 容器透過NFS連接資料
– kubernetes 用來管理使用者的 GPU 容器服務
以及服務管理元件
2019/3/25 12
Copyright ITRI 工業技術研究院
案例分享
AI大資料雲端服務
2019/3/25 13
Copyright ITRI 工業技術研究院
AI大資料雲端服務
• 5個主要節點(Master)
– 包含VIP/HA,硬體防火牆整合與負載平衡,etcd
HA等功能
• 252個工作節點(Worker)
– 皆內含8張Nvidia V-100的客製化水冷機器,以及
infiniband、GPFS以及S3整合
– 可根據組態,動態分割資源給最多8個使用者,或
讓單一使用者獲得整台機器的資源
– 節點角色可透過管理系統切換為Slurm或K8S
• kubernetes 用來提供GPU容器服務以及
GPGPU工作排程,進行AI開發與應用串接工作
2019/3/25 14
Copyright ITRI 工業技術研究院
KUARD 應用程式
Kubernetes運作範例
2019/3/25 15
Copyright ITRI 工業技術研究院
從零開始
$ kubectl run alpaca-prod --image=gcr.io/kuar-
demo/kuard-amd64:1 --
labels="ver=1,app=alpaca,env=prod”
deployment.apps/alpaca-prod created
• 與docker相似的啟動指令
– Docker run –-name alpaca-prod gcr.io/kuar-
demo/kuard-amd64:1
2019/3/25 16
Copyright ITRI 工業技術研究院
“Run”實際發生的事
• 實際上建立了一個
Deployment 物件
• 於此同時,另一個
ReplicationSet物件也
被建立
• 最後,Pod物件依據
ReplicationSet被建立
• Pods 是k8s內的最小
單位
2019/3/25 17
Copyright ITRI 工業技術研究院
公開服務
$ kubectl expose deployment alpaca-prod
--port=8080
service/alpaca-prod exposed
$ kubectl edit service alpaca-prod
// 修改 spec.type 為 NodePort
• 現在,服務已對外公開,可被外部存取
2019/3/25 18
Copyright ITRI 工業技術研究院
“Expose”實際發生的事
• 每一個Pod都會有一個
Node IP
• Endpoint是Node IP與
Port的組合
• Service 物件內部使用
kube-proxy 轉發流量
至Endpoint
• NodePort 將Cluster
IP 特定端點與實體機
器的Port連結
2019/3/25 19
Copyright ITRI 工業技術研究院
“Expose”實際發生的事
• 另外一組元件kube-
dns(或CoreDNS) 提供
基於DNS查詢的服務探
索功能
• Pod中的應用程式可用
“podName.namespacesN
ame.svc.clusterName”
存取到其他Pod的公開服
務
– 例如:在 PodA 使用DNS
位址“PodB.default”找
到PodB的服務
2019/3/25 20
Copyright ITRI 工業技術研究院
擴展應用程式
$ kubectl scale --replicas=3
deployment/alpaca-prod
deployment.extensions/alpaca-prod scaled
• 現在,三個實體Kuard將同時提供服務
– 同時,負載平衡器自動介入,將流量平均分布
到各個Pod
– 也可以”縮小”應用程式,僅需改變replicas即可
2019/3/25 21
Copyright ITRI 工業技術研究院
“Scale”實際發生的事
• ReplicationSet 控制
應用程式的副本數量
• 當副本數量被改變,
ReplicationSet 會根
據改變後的數值,決定
要建立或刪除Pod的數
量後直接執行規則
• Service endpoints將
會在Pod數量變化時自
動更新
2019/3/25 22
Copyright ITRI 工業技術研究院
“Scale”實際發生的事
• ReplicationSet 控制
應用程式的副本數量
• 當副本數量被改變,
ReplicationSet 會根
據改變後的數值,決定
要建立或刪除Pod的數
量後直接執行規則
• Service endpoints 將
會在Pod數量變化時自
動更新
2019/3/25 23
Copyright ITRI 工業技術研究院
Kubernetes的HA
• ReplicationSet 提供分散式服務與自動故障
轉移的基礎
– 建立副本: 提供分散負載
– 故障轉移: 提供高可用性*
– 線上修改: 提供故障端點即時隔離與線上除錯
– 垂直自動擴展: 搭配heapster,提供資源使用率
為主的自動擴展
* 另需搭配Pod 內的健康檢查機制,實作Liveness及/或Readiness探測器,以實現完整的無
中斷故障轉移,單一問題端點自動隔離,以及在定義strategy物件的情況下,提供非破壞性
漸進式滾動升級(rolling-upgrade)與回滾(rollback)等功能。
2019/3/25 24
Copyright ITRI 工業技術研究院
Kubernetes的HA
• 若開啟了多於一個Pod來分散負載,則使用
ReplicationSet
• 另外一種物件DaemonSet 用於需要將一個
Pod應用,在全部或部分節點上皆執行一個
實體時使用
– 例如,Agent / Log Collector 等
2019/3/25 25
Copyright ITRI 工業技術研究院
宣告式佈署
• 本節範例皆為指令佈署
– 建議僅用於開發階段或緊急修正問題
• 已存在的佈署可轉存為YAML或JSON檔案
– 將佈署設定加入版本控制
$ kubectl get deployments alpaca-prod –export –o
yaml > alpaca-prod.yaml
$ kubectl replace –f alpaca-prod.yaml –save-
config
2019/3/25 26
Copyright ITRI 工業技術研究院
滾動更新
• 更新佈署檔案alpaca-prod.yaml,加入
strategy物件
– 決定滾動更新的方式與頻率
$ kubectl apply –f alpaca-prod.yaml
• Kubernetes套用更新後,將會開始Rollout !
– 執行rollout來觀看更新進度:
$ kubectl rollout status deployment alpaca-prod
– 觀察ReplicaSets來管理不同版本:
$ kubectl get replicasets –o wide
2019/3/25 27
Copyright ITRI 工業技術研究院
穩定滾動更新的策略
• maxUnavailable:最大不可用的Pod數量
• maxSurge:於更新時,最多允許的額外資源
• minReadySeconds: 確認新的Pod保持健康的時
間
– maxUnavailable = 25%: 允許最多兩成五的性能損失
– maxSurge = 20%: 允許過程中,使用相當於額外20%的
副本數量來建立新的Pods
– minReadySeconds = 60: 在新的Pod建立並由
Readiness檢查通過後,執行下一次滾動前的等待時間
• 搭配ReadinessProbe,確保穩定健康的更新
2019/3/25 28
Copyright ITRI 工業技術研究院
滾動更新的策略
2019/3/25 29
Copyright ITRI 工業技術研究院
更多功能…
• Label & Annotation: k8s連結各個物件的關
鍵
• Job: 建構平行處裡或工作隊列
• ConfigMap和Secret: 存放設定
• PresistentVolume: 整合外部儲存
2019/3/25 30
Copyright ITRI 工業技術研究院
KUBERNETES的極限
2019/3/25 31
Copyright ITRI 工業技術研究院
Kubernetes擅長的事情
• 資源排程
• 天生的分散式應用佈署
• 服務流量的負載平衡
• 資源控制與最大化使用率: CPU/GPU、記憶
體…
• 容器意外處理: 錯誤自動重啟、服務容錯
• 線上滾動更新
2019/3/25 32
Copyright ITRI 工業技術研究院
Kubernetes不擅長的事情
• 網路:需自行設計網路接取至k8s的方式
• 外部儲存: 需自行選用適合應用的儲存方案
• 安全性: 需由第三方方案提供保護
• 資料庫: 不建議將資料庫的資料儲存在k8s建
立的集群
• GPU虛擬化:完全沒有提供,需自行使用第
三方解決方案
2019/3/25 33
Copyright ITRI 工業技術研究院
Kubernetes實戰經驗
• 使用k8s實踐負載平衡
• 在k8s前放置LoadBalancer
• 實踐自動化佈署
• 把資料放到k8s外
• 監控你的k8s
• 設計Log方案
• 針對Masters節點設計HA架構
2019/3/25 34
Copyright ITRI 工業技術研究院
Kubernetes實戰經驗
• 享受k8s於微服務架構上的好處,
首要工作就是
–重構
–容器化元件
2019/3/25 35
Copyright ITRI 工業技術研究院
RESOURCES
2019/3/25 36
Copyright ITRI 工業技術研究院
Resources
• https://kubernetes.io/
• http://tinyurl.com/ycw6bpq7
• https://summit.ithome.com.tw/kubernetes/
• https://jimmysong.io/kubernetes-handbook/
2019/3/25 37
Copyright ITRI 工業技術研究院
THANK YOU
Q & A
2019/3/25 38

More Related Content

Similar to How to use kubernetes build microservices 如何運用 Kubernetes 打造微服務生態圈

《云计算入门指南》
《云计算入门指南》《云计算入门指南》
《云计算入门指南》
wiit
 
Service oriented computing and cloud computing
Service oriented computing and cloud computingService oriented computing and cloud computing
Service oriented computing and cloud computing志銘 劉志銘
 
CYBERSEC 2020 臺灣資安大會 - 第一次使用 k8s 就不埋漏洞
CYBERSEC 2020 臺灣資安大會 - 第一次使用 k8s 就不埋漏洞CYBERSEC 2020 臺灣資安大會 - 第一次使用 k8s 就不埋漏洞
CYBERSEC 2020 臺灣資安大會 - 第一次使用 k8s 就不埋漏洞
Secview
 
Cloud Computing for Bioinformatics
Cloud Computing for BioinformaticsCloud Computing for Bioinformatics
Cloud Computing for BioinformaticsJazz Yao-Tsung Wang
 
Oh K8s Is Swag - Kubernetes Basics
Oh K8s Is Swag - Kubernetes BasicsOh K8s Is Swag - Kubernetes Basics
Oh K8s Is Swag - Kubernetes Basics
Okis Chuang
 
云存储与虚拟化分论坛 基于云计算的海量数据挖掘
云存储与虚拟化分论坛 基于云计算的海量数据挖掘云存储与虚拟化分论坛 基于云计算的海量数据挖掘
云存储与虚拟化分论坛 基于云计算的海量数据挖掘
Riquelme624
 
Iaa s管理平台的规划与研发 社区
Iaa s管理平台的规划与研发 社区Iaa s管理平台的规划与研发 社区
Iaa s管理平台的规划与研发 社区benbenhappy
 
The Trend Of Cloud Computing And How Should Public Sectors Adjust
The Trend Of Cloud Computing And How Should Public Sectors AdjustThe Trend Of Cloud Computing And How Should Public Sectors Adjust
The Trend Of Cloud Computing And How Should Public Sectors AdjustJazz Yao-Tsung Wang
 
2019 Cloud Native Forum, Taipei
2019 Cloud Native Forum, Taipei2019 Cloud Native Forum, Taipei
2019 Cloud Native Forum, Taipei
YiDeWu1
 
2021 二月 Kasten K10 介紹與概觀
2021 二月 Kasten K10 介紹與概觀2021 二月 Kasten K10 介紹與概觀
2021 二月 Kasten K10 介紹與概觀
Wales Chen
 
Open stack中国社区开放测试平台(ostp)
Open stack中国社区开放测试平台(ostp)Open stack中国社区开放测试平台(ostp)
Open stack中国社区开放测试平台(ostp)
OpenCity Community
 
IBM Cloud Private Introduction
IBM Cloud Private IntroductionIBM Cloud Private Introduction
IBM Cloud Private Introduction
Guangya Liu
 
twMVC#30 | 你應該瞭解的 container-on-azure-二三事
twMVC#30 | 你應該瞭解的 container-on-azure-二三事twMVC#30 | 你應該瞭解的 container-on-azure-二三事
twMVC#30 | 你應該瞭解的 container-on-azure-二三事
twMVC
 
微服務對IT人員的衝擊
微服務對IT人員的衝擊微服務對IT人員的衝擊
微服務對IT人員的衝擊
Philip Zheng
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updated
Paul Chao
 
Challenges and opportunities computing Kuo-Yi Chen
Challenges and opportunities computing   Kuo-Yi ChenChallenges and opportunities computing   Kuo-Yi Chen
Challenges and opportunities computing Kuo-Yi Chenkuoyichen
 
Streaming architecture zx_dec2015
Streaming architecture zx_dec2015Streaming architecture zx_dec2015
Streaming architecture zx_dec2015
Zhenzhong Xu
 
天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011Yiwei Ma
 
Zh tw introduction_to_cloud_computing
Zh tw introduction_to_cloud_computingZh tw introduction_to_cloud_computing
Zh tw introduction_to_cloud_computingTrendProgContest13
 
Eucalyptus安装及实例映像制作
Eucalyptus安装及实例映像制作Eucalyptus安装及实例映像制作
Eucalyptus安装及实例映像制作liangxiao0315
 

Similar to How to use kubernetes build microservices 如何運用 Kubernetes 打造微服務生態圈 (20)

《云计算入门指南》
《云计算入门指南》《云计算入门指南》
《云计算入门指南》
 
Service oriented computing and cloud computing
Service oriented computing and cloud computingService oriented computing and cloud computing
Service oriented computing and cloud computing
 
CYBERSEC 2020 臺灣資安大會 - 第一次使用 k8s 就不埋漏洞
CYBERSEC 2020 臺灣資安大會 - 第一次使用 k8s 就不埋漏洞CYBERSEC 2020 臺灣資安大會 - 第一次使用 k8s 就不埋漏洞
CYBERSEC 2020 臺灣資安大會 - 第一次使用 k8s 就不埋漏洞
 
Cloud Computing for Bioinformatics
Cloud Computing for BioinformaticsCloud Computing for Bioinformatics
Cloud Computing for Bioinformatics
 
Oh K8s Is Swag - Kubernetes Basics
Oh K8s Is Swag - Kubernetes BasicsOh K8s Is Swag - Kubernetes Basics
Oh K8s Is Swag - Kubernetes Basics
 
云存储与虚拟化分论坛 基于云计算的海量数据挖掘
云存储与虚拟化分论坛 基于云计算的海量数据挖掘云存储与虚拟化分论坛 基于云计算的海量数据挖掘
云存储与虚拟化分论坛 基于云计算的海量数据挖掘
 
Iaa s管理平台的规划与研发 社区
Iaa s管理平台的规划与研发 社区Iaa s管理平台的规划与研发 社区
Iaa s管理平台的规划与研发 社区
 
The Trend Of Cloud Computing And How Should Public Sectors Adjust
The Trend Of Cloud Computing And How Should Public Sectors AdjustThe Trend Of Cloud Computing And How Should Public Sectors Adjust
The Trend Of Cloud Computing And How Should Public Sectors Adjust
 
2019 Cloud Native Forum, Taipei
2019 Cloud Native Forum, Taipei2019 Cloud Native Forum, Taipei
2019 Cloud Native Forum, Taipei
 
2021 二月 Kasten K10 介紹與概觀
2021 二月 Kasten K10 介紹與概觀2021 二月 Kasten K10 介紹與概觀
2021 二月 Kasten K10 介紹與概觀
 
Open stack中国社区开放测试平台(ostp)
Open stack中国社区开放测试平台(ostp)Open stack中国社区开放测试平台(ostp)
Open stack中国社区开放测试平台(ostp)
 
IBM Cloud Private Introduction
IBM Cloud Private IntroductionIBM Cloud Private Introduction
IBM Cloud Private Introduction
 
twMVC#30 | 你應該瞭解的 container-on-azure-二三事
twMVC#30 | 你應該瞭解的 container-on-azure-二三事twMVC#30 | 你應該瞭解的 container-on-azure-二三事
twMVC#30 | 你應該瞭解的 container-on-azure-二三事
 
微服務對IT人員的衝擊
微服務對IT人員的衝擊微服務對IT人員的衝擊
微服務對IT人員的衝擊
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updated
 
Challenges and opportunities computing Kuo-Yi Chen
Challenges and opportunities computing   Kuo-Yi ChenChallenges and opportunities computing   Kuo-Yi Chen
Challenges and opportunities computing Kuo-Yi Chen
 
Streaming architecture zx_dec2015
Streaming architecture zx_dec2015Streaming architecture zx_dec2015
Streaming architecture zx_dec2015
 
天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011
 
Zh tw introduction_to_cloud_computing
Zh tw introduction_to_cloud_computingZh tw introduction_to_cloud_computing
Zh tw introduction_to_cloud_computing
 
Eucalyptus安装及实例映像制作
Eucalyptus安装及实例映像制作Eucalyptus安装及实例映像制作
Eucalyptus安装及实例映像制作
 

How to use kubernetes build microservices 如何運用 Kubernetes 打造微服務生態圈