iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 1
1
DevOps

從題目中學習k8s系列 第 1

【從題目中學習k8s】-【Day1】K8s初探


title: 【從題目中學習k8s】-【Day1】K8s初探
description: 以無比的恆毅力堅持30天鍊成鐵人--連續30天,一天發表一篇IT技術文章

【從題目中學習k8s】-【Day1】K8s初探

tags: DevOps CICD K8s Docker

序言

大家好!歡迎大家來到【從題目中學習k8s】這個小學堂,這個主題主要是想介紹CICD流程中非常火紅的Container管理工具 - kubernetes,簡稱K8s (∵k ~ s中間剛好8個字母)。k8s有兩個相當重要的證照考試:CKACKAD。而筆者最近剛好在準備這個考試。因此想藉由這30天,介紹一些CKA考試中常見的考題,筆者和大家一起腦力激盪,藉由考題用到的觀念,講解一下背後的原理和其他延伸應用,一方面幫助自己複習考題;一方面也可以和大家討論,教學相長,互相學習。由於筆者目前還只是個研究生,還在學習的階段,也還沒有大型的K8s開發經驗,都只是一些小型的應用,也許涵蓋的範圍不是很廣,當中也可能有些疏漏,再請各位先進不吝指教,有任何想法或建議都可以提出互相討論唷~


30Day鐵人賽規劃

首先不免俗的會介紹一下k8s,包含介紹環境如何建置還有k8s中基本的觀念,之後藉由帶入題目將介紹過的觀念串聯起來應用,會對k8s整體更加了解。可能的話也可以介紹一些經常搭配k8s使用的工具,大部分我也沒用過,剛好可藉由這個機會順便學習。規劃如下:

【Day1~Day8】K8s基本介紹及環境建置
【Day9~Day25】一天一道題目,藉由考題帶入K8s觀念
【Day26~Day29】K8s常用工具&套件
【Day30】30天學習總結


K8s初探

Source: https://codingcompiler.com/wp-content/uploads/2018/01/kubernetes-tutorials.png

K8s 是甚麼?

K8skubernetes 的簡稱 (∵K ~ s中間剛好8個字母)。在DevOps開發環節中,最重要的部分即為CI/CD(Continuous Integration/Continuous Deployment,持續整合/持續佈署)。什麼是 CICD
CI 最主要的目的是讓團隊中的開發人員完成各自的工作後,在每一次的 Commit & Push,都能夠於相同環境自動 Build 程式,以避免每個開發人員因本機的環境&套件版本不相同,造成 Service 異常。(CI其實還包含測試,但不是我們的重點,就先略過~)
CDCI的延伸,將整合後的程式佈署道實際環境中,並確保可以最快速的方式向客戶發布新的更改也會透過監控系統進行服務存活檢查,若服務異常時會即時發送通知告至開發人員。而K8s即是屬於CD中的一環。
K8s的目的只有一個,那就是

自動化地以容器的形式管理你的應用程式
To host your application in the form of containers in a automated fashion


CICD流程圖

Source: https://www.fiverr.com/akilasenarath/do-devops-middleware-k8s-cicd-pipelines-related-work

那麼K8s到底可以幫我們完成甚麼事呢?


What K8s can do?

  • 服務發現&負載平衡
    K8s 可以使用DNS或其自己的IP位址將 container expose給外部使用者。若某個container的負載很高,K8s可以實現負載平衡並分配網絡流量,從而使部署穩定。
  • 儲存協調
    K8s 允許自動掛載你選擇的儲存系統,例如本地儲存,公有雲提供商等(e.g., GCP, Azure)。
  • 自動佈署&回滾
    你可以使用K8s描述已部署container的所需狀態,它可將"可受控資源"從實際狀態更改為所需狀態。例如,你可以自動化K8s來創建新container,刪除現有container並將其所有資源用於新container。
  • 自動資源打包
    你可以為K8s提供了一個節點集群,可用於運行容器化任務(containerized applications)。告訴K8s每個容器需要多少CPU和RAM。K8s可以將容器安裝到節點上,以充分利用資源。
  • 自我修復
    K8s重新啟動發生故障的容器,替換容器,殺死不回應request的容器。
  • 機密資料&配置管理
    K8s允許儲存和管理敏感訊息,例如密碼,OAuth token和SSH keys。可以部署和更新Secret (之後會介紹) 和Application的配置,而無需重建container images,也無需在stack configuration中公開機密。

Why K8s

你可能會想,為甚麼要用K8s,直接使用Docker不行嗎?我每次寫完Dockerfile還要在寫一個YAML把image包成一個Pod,好像很麻煩?
的確,如果你的應用或服務是一次性的,不需要維護,而且基本的Docker就能完成所有工作,那我會建議用Docker就好,畢竟K8s還是有很多沒碰過的地雷區,可以避免不必要的麻煩。但K8s強大的地方就在於,他有很多只憑Docker無法辦到的事情,例如:

  • K8s是整合開發和維運的關鍵技術
    應用程式的建置,是開發者的課題,而執行和部署則是IT維運者的挑戰,「只有K8s能連結兩個世界,這是整合開發和維運的關鍵技術,K8s已經是現在的主流技術。
  • 微服務(microservices)架構
    K8s可以將龐大的專案拆成幾個不同面向的小專案,開發效率能被提高,各個服務之間也可獨立部署,不因一個服務癱瘓而癱瘓整個系統,各團隊可以依照自己的需求使用適合自己的開發環境,每個服務也可以依照自己的需求,選擇在不同機器上部署。
  • 隨時將系統整體遷移到公有雲上
    K8s最初的設計目標就是讓使用者的應用執行在Google自家的公有雲GCE中,華為雲(CCE)、阿里雲(ACK)和騰訊雲(TKE)也先後宣布支援K8s集群。未來也會有更多公有/私有雲支援K8s。在K8s中完全隱藏了底層網路的細節,以Service為基礎的虛擬IP位址(Cluster IP)的設計讓架構與底層硬體拓樸無關,因此無須改變設定檔,即可輕易將現有環境從實體機無縫遷移到公有雲上。
  • 龐大的社群參與開發與支援,持續且頻繁的更新
    K8s是一套高成熟度的開源軟體系統,用於管理容器化的工作或服務,由 Google 於 2014 年對外發佈。DockerKubernetes 運作在不同的層次上。Docker 提供應用的容器封裝機制,而 K8s 則控制著 Docker 的生命周期。透過 K8s 可以幫助 Docker 的應用容器依據資源或規則分配容器到合適的結點上,並可設定副本與負載平衡機制來提升應用的擴展與可靠性。另外 K8s 亦對儲存與網路有多種選擇和支援,可滿足大多數的容器應用需求。

結論

市面上介紹K8s的書或網路文章應該多到數不完了,今天主要是general的帶入K8s的背景,讓大家了解K8s的重要性和優點,明天開始就正式開始進入我們的內容囉~

Kubernetes,我要進來囉~

參考資料

kubernetes (k8s)
What is Kubernetes?
使用 Kubernetes 管理 Docker 之優點與益處

Thank you!

You can find me on

  • george4908090@gmail.com

下一篇
【從題目中學習k8s】-【Day2】K8s 集群中有什麼
系列文
從題目中學習k8s31

1 則留言

0
Jay Chang
iT邦新手 5 級 ‧ 2020-11-27 11:14:04

Hi 版大你好,你的 title 那邊格式怪怪的
可能他不支援 YAML Front Matter?

我要留言

立即登入留言