1. 程式人生 > 其它 >1.k8s介紹

1.k8s介紹

1.歷史和現狀

Laas 基礎設施平臺服務 --代表廠商 阿里雲

Paas 平臺及服務 --新浪 (k8s) docker 是paas 的標準

Saas 軟體及服務

1、發展經歷

以前:mesos apache 分散式資源管理框架 2019-5 twitter > kubernetes

Docker swarm 2019-07 阿里雲宣佈 docker swarm 剔除

Kubernetes google 10年容器話基礎框架 borg go語言對borg進行重新編寫

特點:

輕量級(消耗的資源比較少)

開源

彈性伸縮

負載均衡:IPVS(IP虛擬伺服器)

適合人群:軟體工程師,測試工程師 ,運維工程師 ,軟體架構師 ,專案經理

雲原生的定義:

實際上,雲原生是一條最佳路徑或者最佳實踐。更詳細的說,雲原生為使用者指定了一條低心智負擔的、敏捷的、能夠以可擴充套件、可複製的方式最大化地利用雲的能力、發揮雲的價值的最佳路徑。

因此,雲原生其實是一套指導進行軟體架構設計的思想。按照這樣的思想而設計出來的軟體:首先,天然就“生在雲上,長在雲上”;其次,能夠最大化地發揮雲的能力,使得我們開發的軟體和“雲”能夠天然地整合在一起,發揮出“雲”的最大價值。

所以,雲原生的最大價值和願景,就是認為未來的軟體,會從誕生起就生長在雲上,並且遵循一種新的軟體開發、釋出和運維模式,從而使得軟體能夠最大化地發揮雲的能力。說到了這裡,大家可以思考一下為什麼容器技術具有革命性?

其實,容器技術和集裝箱技術的革命性非常類似,即:容器技術使得應用具有了一種“自包含”的定義方式。所以,這樣的應用才能以敏捷的、以可擴充套件可複製的方式釋出在雲上,發揮出雲的能力。這也就是容器技術對雲發揮出的革命性影響所在,所以說,容器技術正是雲原生技術的核心底盤。

2. 知識圖譜

介紹說明:前世今生 kubernetes 框架 kubernetes關鍵字含義

基礎概念:什麼是pod 控制器型別 k8s網路通訊模式

kubernetes:構建k8s叢集

資源清單:資源掌握資源清單的語法編寫pod掌握pod 的生命週期***

pod控制器:掌握各種控制器的特點以及使用定義方式

服務發現(servece):掌握svc(交換虛擬鏈路) 原理及其構建方式

儲存:掌握多種儲存型別的特點 ,並且能夠在不同環境中選擇合適的儲存方案(自己的見解)

排程器:掌握排程器原理 , 能夠根據要求把pod定義到想要的節點執行

叢集安全機制:叢集的認證 鑑權 訪問控制 , 原理及其流程

helm:型別linux裡面的yum包管理工具掌握HELM原理 , HELM模板自定義,HELM部署一些常用的外掛

運維 : 修改kubeadm達到證書可用期限為10年 能夠構建高可用狀態

伺服器分類

  • 有狀態服務:DBMS

  • 無狀態服務:lvs apache

高可用叢集副本資料最好是 》=3奇數個

檢視 k8s api支援版本的文件 https://kubernetes.io/docs/reference/

通過api 檢視各個控制器的支援版本

kubectl api-versions

api-resources

可以通過檢視api-resources來檢視受支援的資源。

這裡的資源包括Kubernetes自帶的,和使用者自建的CRD
kubectl api-resources 

第三列和第五列就可以看到title為APIVERSIONKIND,其實到此就已經可以明確如何對應使用資源了。

kubectl explain

通過kubectl explain {kind_name}可以參考到某個kind資源擁有的欄位以及對應的apiVersion

檢視資源支援所有欄位

kubectl explain { kind_name } --recursive

如:kubectl explain { kind_name } --recursive

因為太長這裡就不列出來了。

檢視具體欄位裡的子欄位

kubectl explain { kind_name }.欄位名1.欄位名2

其中從左往右是父子關係,如:deployment.spec.selector

當在自己寫yaml檔案時,沒有參考示例,可以使用這些命令來摸索

3.元件說明

etcd:官方將它定位成一個可信賴的分散式鍵值儲存服務 ,它能夠為整個分散式叢集儲存一些關鍵資料 , 協助分散式叢集的正常運轉

推薦在kubernetes 叢集中使用etcdv3 ,v2 版本已在kubernetsv1.11中棄用

server端安裝:

apiserver:所有服務訪問的統一入口

crontrollermanager:維持副本期望數目

scheduler:負責介紹任務 ,選擇合適的節點進行分配任務

etcd:鍵值對資料庫, 儲存k8s叢集所有重要資訊(持久化)

kubelet:直接跟容器引擎互動實現容器的生命週期管理

kube-proxy:負責寫入規則至iptables ,IPvs實現服務對映訪問的

coreDNS:可以為叢集中的svc建立一個域名IP的對於關係解析

DASHBOARD:給k8s叢集提供一個B/s結構訪問體系

INGRESS CONTROLLER:官方只能實現四層代理 , ingress 可以實現七層代理

fedetation:提供一個可以跨幾圈中心多個k8s統一管理

Prometheus :提供k8s叢集的監控能力

elk:提供k8s 叢集日誌統一分析接入平臺

4.雲原生

4.1發展史

首先從第一個要的問題,那就是“什麼是雲原生?”雲原生、CNCF 都是目前非常熱門的關鍵詞,但是這些技術並不是非常新鮮的內容。

  • 2004 年— 2007 年,Google 已在內部大規模地使用像 Cgroups 這樣的容器技術;
  • 2008 年,Google 將 Cgroups 合併進入了 Linux 核心主幹;
  • 2013 年,Docker 專案正式釋出。
  • 2014 年,Kubernetes 專案也正式釋出。這樣的原因也非常容易理解,因為有了容器和 Docker 之後,就需要有一種方式去幫助大家方便、快速、優雅地管理這些容器,這就是 Kubernetes 專案的初衷。在 Google 和 Redhat 釋出了 Kubernetes 之後,這個專案的發展速度非常之快。
  • 2015 年,由Google、Redhat 以及微軟等大型雲端計算廠商以及一些開源公司共同牽頭成立了 CNCF 雲原生基金會。CNCF 成立之初,就有 22 個創始會員,而且 Kubernetes 也成為了 CNCF 託管的第一個開源專案。在這之後,CNCF 的發展速度非常迅猛;
  • 2017 年,CNCF 達到 170 個成員和 14 個基金專案;
  • 2018 年,CNCF 成立三週年有了 195 個成員,19 個基金會專案和 11 個孵化專案,如此之快的發展速度在整個雲端計算領域都是非常罕見的。

4.2 雲原生的現狀

  1. 雲原生基金會 —— CNCF;
  2. 雲原生技術社群,比如像 CNCF 目前正式託管的 20 多個專案共同構成了現代雲端計算生態的基石,其中像 Kubernetes 這樣的專案已經成為了世界第四活躍的開源專案;
  3. 除了前面兩點之外,現在全球各大公有云廠商都已經支援了 Kubernetes。此外,還有 100 多家技術創業公司也在持續地進行投入。現在阿里巴巴也在談全面上雲,而且上雲就要上雲原生,這也是各大技術公司擁抱雲原生的一個例子。

五、各個版本支援情況說明

  • alpha
    名稱中帶有alpha的API版本是進入Kubernetes的新功能的早期候選版本。這些可能包含錯誤,並且不保證將來可以使用。

  • beta
    API版本名稱中的beta表示測試已經超過了alpha級別,並且該功能最終將包含在Kubernetes中。 雖然它的工作方式可能會改變,並且物件的定義方式可能會完全改變,但該特徵本身很可能以某種形式將其變為Kubernetes。

  • stable
    穩定的apiVersion這些名稱中不包含alpha或beta。 它們可以安全使用。

  • v1
    這是Kubernetes API的第一個穩定版本。 它包含許多核心物件。

  • apps/v1
    apps是Kubernetes中最常見的API組,其中包含許多核心物件和v1。 它包括與在Kubernetes上執行應用程式相關的功能,如Deployments,RollingUpdates和ReplicaSets。

  • autoscaling/v1
    此API版本允許根據不同的資源使用指標自動調整容器。此穩定版本僅支援CPU擴充套件,但未來的alpha和beta版本將允許您根據記憶體使用情況和自定義指標進行擴充套件。

  • batch/v1
    batchAPI組包含與批處理和類似作業的任務相關的物件(而不是像應用程式一樣的任務,如無限期地執行Web伺服器)。 這個apiVersion是這些API物件的第一個穩定版本。

  • batch/v1beta1
    Kubernetes中批處理物件的新功能測試版,特別是包括允許您在特定時間或週期執行作業的CronJobs。

  • certificates.k8s.io/v1beta1
    此API版本添加了驗證網路證書的功能,以便在群集中進行安全通訊。 您可以在官方文件上閱讀更多內容。

  • extensions/v1beta1
    此版本的API包含許多新的常用Kubernetes功能。 部署,DaemonSets,ReplicaSet和Ingresses都在此版本中收到了重大更改。

  • policy/v1beta1
    此apiVersion增加了設定pod中斷預算和pod安全性新規則的功能

  • rbac.authorization.k8s.io/v1
    此apiVersion包含Kubernetes基於角色的訪問控制的額外功能。這有助於您保護群集