如何學習、了解kubernetes?

本人大二,最近學校有任務要跟著研一的同學一起做項目。是關於kubernetes的,類似這個吧kubernetes/deployment-manager · GitHub

已經學過:C++面向對象編程;數據結構;計算機系統基礎(正在學);離散數學

會用工具:一些IDE;git;svn

現在我對這個東西完全不了解,應該怎麼樣去學習呢?


(1)什麼是Kubernetes?

Kubernetes是一個在集群主機間進行自動化部署、擴展和容器操作的提供以容器為中心基礎設施的開源平台。

通過Kubernetes,你可以快速有效地響應用戶需求:

  • 快速而有預期地部署你的應用
  • 極速地擴展你的應用
  • 無縫鋪展新的應用功能
  • 節省資源,優化硬體資源的使用

我們的目標是孕育一個組件和工具的生態系統以資源在公有雲和私有雲中運行的應用的負擔。

Kubernetes特點:

  • 可移植: 支持公有雲,私有雲,混合雲,複合雲
  • 可擴展: 模塊化,熱插撥,可組合
  • 自愈: 自動替換,自動重啟,自動複製,自動擴展

Kubernetes始於Google 2014 年的一個項目。 Kubernetes的構建基於Google十多年運行大規模負載產品的經驗,同時也吸取了社區中最好的意見和經驗。

有沒有想試一試了?(2)為什麼要選擇容器?

當容器技術這麼熱門的時候有是不是在疑惑為什麼要選用這樣的技術呢?

傳統的應用部署方式是通過操作系統的包管理器來安裝應用。然而這樣做的一個劣勢在於,它把應用的運行,配置,庫和生存周期和機器的操作系統糾纏在一起。當然你可以通過創建虛機鏡像的方式來獲得可以預期的前滾和回滾操作,然而虛擬機太重量級並且不可移植。

新的方式是通過部署基於操作系統級別虛擬化的容器進行虛擬化而非通過硬體來進行虛擬化。這些容器之間相互隔離:它們有自己的文件系統,然而它們也無法看到彼此之間的進程,並且它們之間的計算資源也是有界限的。相較於虛擬機容器也更容易部署,並且因為它們是和底層設施和機器文件系統解耦的,它們可以在雲和不同版本的操作系統間進行遷移。

因為容器小而快,一個應用可以被打包進一個容器映像。正是應用與容器鏡像間一對一的關係解鎖了容器的很多優點:

  1. 在build或者release 的階段(而非部署階段)可以創建不變的容器鏡像,因為每個應用都用和其他的應用棧相組合,也不依賴於生產環境基礎設施。這使得從研發到生產過程中可以採用持續的環境。
  2. 容器比虛機要更加透明,這更便於監控和管理。尤其是因為窗口的進程的生命周期是被基礎設施直接管理而不是被容器中的進程管理器隱藏起來管理。
  3. 因為一個容器包含一個應用,這讓對容器的管理等同於對應用部署的管理。

總結一下容器的優點:

  • 敏捷地應用創建和部署:相較於VM增加了容器鏡像創建的效率。
  • 持續開發,集成和部署:通過快速的回滾操作(因為鏡像的穩定性)提供可靠的經常的容器鏡像的創建和部署。
  • 開發和運行相分離:在build或者release 的階段(而非部署階段),使得應用和基礎設施解耦。
  • 開發,測試和生產環境的持續:在筆記本上可以像在雲中一樣的運行。
  • 雲和操作系統版本的可移植性:可以運行在 Ubuntu, RHEL, CoreOS, on-prem, Google Container Engine,和任何其它的運行環境中。
  • 應用為中心的管理:提升了虛擬化的層次,從虛擬硬體上運行操作系統的抽象到操作系統中應用邏輯資源的虛擬。
  • 松耦合,分散式,彈性,自由的微服務:應用被打散成更小的,獨立的小碎片並且可以動態地部署和管理——而非是一個在用途單一的龐大機器中運行的一個臃腫堆棧中。
  • 資源隔離:可以預測的應用性能。
  • 資源使用:高效。

(3)為什麼需要Kubernetes,利用它又能做些什麼呢?

Kubernetes可以安排物理機或者虛擬機上運行的應用容器的使用。

當然它不只可以做這些。

為了充分發揮它的潛能,你需要剪斷物理機虛擬機的束縛。

然而,一旦特定的容器不再局限於特定的主機,主機為中心的基礎設施便不再適用了:組管理,負載均衡,自動擴展等。你需要的是以容器為中心的基礎設施。而這正是Kubernetes所提供的。

Kubernetes可以滿足很多運行環境中應用的通用的需求,比如:

  • 進程協同,利用複合應用保證應用和容器一對一的模型。
  • 存儲系統掛載
  • 分發密鑰
  • 應用健康檢測
  • 應用實例複製
  • 水平自動擴展
  • 命名和發現
  • 負載均衡
  • 滾動更新
  • 資源監控
  • 日誌訪問
  • 自檢和調試
  • 識別和認證

這為PaaS提供了IaaS層的便利,提供了基礎設施提供者間的可移植性。

詳細內容,參見用戶指南.

(4)Kubernetes為什麼又是怎麼樣的一個平台呢?

儘管Kubernetes提供了很多功能,總有一些新的場景可以從這些功能中獲益。特定的應用工作流可以提高開發者的開發速度。最新可以接受的組合常常需要強勁的大規模的自動化。這也是為什麼Kubernetes構建以來為什麼要做一個讓應用的部署、擴展和管理更便捷的生態平台的原因。

Labels讓用戶可以隨心所欲地組織自己的資源。 Annotations讓用戶可以給資源添加定製化的信息以充分使用自己的工作流,提供一種簡單的管理工具。

此外,Kubernetes control plane本身也是基於公布給開發者和用戶相同 的一組API。用戶可以自己定開發自己的controllers, schedulers等。如果願意,它們甚至可以用自己的API 開發自己的command-line tool.

這樣的設計也讓很多其它系統可以構建於Kubernetes之上。

(5)Kubernetes不是什麼:

Kubernetes不是一個傳統的,包羅一切的PaaS系統。我們保留用戶的選擇,這一點非常重要。

  • Kubernetes不限制支持應用的種類。它不限制應用框架,或者支持的運行時語言,也不去區分 「apps」 或者「services」。 Kubernetes致力於支持不同負載應用,包括有狀態、無狀態、數據處理類型的應用。只要這個應用可以在容器里運行,那麼它就可以在Kubernetes上很多地運行。
  • Kubernetes不提供中間鍵(如message buses),數據處理框架(如Spark),資料庫(如Mysql),或者集群存儲系統(如Ceph)。但這些應用都可以運行於Kubernetes。
  • Kubernetes沒有一個點擊即可用的應用市場。
  • Kubernetes不部署源碼不編譯應用。持續集成的 (CI)工作流方面,不同的用戶有不同的需求和偏好,因此,我們提供分層的 CI工作流,但並不定義它應該怎麼做。
  • Kubernetes允許用戶選擇自己的日誌、監控和報警系統。
  • Kubernetes不提供可理解的應用配置語言(e.g., jsonnet).
  • Kubernetes不提供或者任何綜合的機器配置,維護,管理或者自愈系統。

另一方面,大量的Paas系統都可以運行在Kubernetes上,比如Openshift, Deis, 和Gondor。你可以構建自己的Paas平台,集成CI。

因為Kubernetes運行在應用而非硬體層面,它提供了普通的Paas平台提供的一些通用功能,比如部署,擴展,負載均衡,日誌,監控等。然而,Kubernetes並非一個龐然大物,這些功能老師可選的。

另外,Kubernetes不僅僅是一個「編排系統」;它消彌了編排的需要。「編排」的定義是指執行一個預定的工作流:先做A,之後B,然後C。相反地,Kubernetes是由一系列獨立的、可組合的驅使當前狀態走向預想狀態的控制進程組成的。怎麼樣從A到C並不重要:達到目的就好。當然也是需要中心控制的;方法更像排舞的過程。這讓這個系統更加好用更加強大、健壯、 有彈性且可擴展。

(6)Kubernetes是什麼意思呢? K8s?

Kubernetes起源於希臘語, 是「舵手」或者「領航員」的意思,是「管理者」和「控制論」的根源。 K8s是把用8代替8個字元「ubernete」而成的縮寫。

原文鏈接:Kubernetes - What is Kubernetes?

歡迎訪問網站:奇趣兒 – 到天邊外去…

歡迎關注微信號:奇趣兒beta

歡迎掃描二維碼:


浙大出了一本不錯的書,容器和容器雲,docker和kubernetes都講的不錯。當然書只是讓你能更好理解,關鍵還是要多實踐。加油


最近要調研k8s,準備在生產環境中使用k8s。積累了很多資料, 後期也會寫相關的文章來介紹我對k8s的理解 。以下是學習k8s一些不錯的資源和文章, 請享用~~

--- updated in 2017.05.14

歡迎關注我的知乎專欄: 雲時代的運維開發 - 知乎專欄

好文系列

  • 《Kubernetes與雲原生應用》系列之Kubernetes的系統架構與設計理念 *****

容器設計模式

  • 如果有10000台機器,你想怎麼玩?(一)概述 *****
  • K8S Meetup 深圳站演講回顧(二):『才雲』CTO 鄧德源《基於 Kubernetes 的容器雲平台落地實踐》 *****

相關網站

docker專業介紹的網站dockerinfodocker專業介紹的網站dockoneStuq課程-從理論到生產環境實戰:掌握Docker大規模部署和管理kubernetes中文社區k8s官方博客

文檔手冊

  • kubernetes中文文檔 *****

各個發行版的release note

  • kubernetes官方指南 *****

coreos的k8s相關文檔etcd3學習筆記

  • http://blog.fleeto.us/

相關項目

專註於k8s工具鏈的開源倉庫awesome-kubernetes

  • community repo 通過這個github 倉庫可以了解最新的社區動態 ,和社區工具的發展

課程培訓

才雲k8s技術培訓

Kubernetes 架構及原理
Kubernetes 層級化資源模型
Kubernetes 基礎資源操作實踐
基於Kubernetes的分散式 Tensor Flow 系統

https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615

出版書籍

  • 《容器與容器雲》
  • 《Kubernetes實戰 》
  • 《Kubernetes權威指南:從Docker到Kubernetes實踐全接觸(第2版)》

歡迎關注我的知乎專欄: 雲時代的運維開發 - 知乎專欄


當然是自己動手部署一個,我不是是說用minikubernete那種玩玩。我是說自己動手在一個至少6台vm的cluster上部署一個。從docker etcd flannel kube-apiserver kube-scheduler kube-controler kubelet kube-proxy。一個組件一個組件的部署上去。你就會弄懂啦。我今天剛剛自己嘗試在買的阿里雲ecs上部署了一個 三個節點的master加三個worker節點 逃


學習,才坑,解決,提高。。。。。。


學習文檔,安裝起來,運行起來,然後深入了解原理。


推薦閱讀:

如何評價 hyper_?
如何通俗解釋Docker是什麼?
網易蜂巢的原理是什麼?通俗的舉例說明
VAGRANT 和 Docker的使用場景和區別?
Docker 有什麼優勢?

TAG:程序員 | 計算機 | Linux開發 | Docker | Kubernetes |