
作者 | 小明菜市場
來源 | 小明菜市場(ID:fileGeek)
頭圖 | CSDN 下載自東方IC

前言
都2020年了,你還不知道kubernetes就真的真的真的out啦。(販賣焦慮體) 什么是k8s,k8s這個詞來自于希臘語,有主管,舵手,船長的意思,我們從圖標中能看出來。

在k8s的網站上,描述是這樣的
生產級別的容器編排系統
從定義中可以提煉出三個關鍵字,分別是
生產級別
容器
編排系統
1、生產級別
說k8s是生產級別的有如下的幾個原因:
k8s 是谷歌的開源系統,基于谷歌的系統設計,并且已經在谷歌系統上平穩運行的很久。
k8s 是CNCF的首個畢業項目。
2、容器
容器有以下幾個特點
可移植性,容器可以被任何類型的操作系統安裝使用。
包容性:支持多種類型的軟件,這些軟件都可以打包在容器內。
標準格式。
共存,多個容器可以運行在同一個物理機上。
隔離,不同的容器的軟件彼此隔離。

最重要的一句話:沒有容器就沒有微服務。

容器和微服務化后,帶來了一些好處,比如:
模塊間更加獨立,可以獨立的部署和發布,加快了發布和更新的速度
隔離的運行環境,可以為不同模塊定制不同的運行環境
3、編排系統
容器的編排系統可以有效的管理在宿主機上的容器。
管理網絡和訪問
跟蹤容器的狀態
增大或縮小服務的規模
實現負載平衡
宿主機無響應后實現容器的重新分配
服務發現
管理容器的存儲 等等…

主要功能
1、數據卷
pod中容器之間共享數據,可以使用數據卷。
2、應用程序健康檢查
容器內服務可能進程阻塞無法處理請求,可以設置監控檢查的策略
3、復制應用程序實例
控制器維護者pod副本數量,保證一個pod或一組同類prod數量始終可用
4、彈性伸縮
根據設定的指標,自動縮放pod副本數
5、服務發現
使用環境變量或DNS插件保證容器中程序發現pod入口訪問地址。
6、負載均衡
一組pod副本分配一個私有的集群ip地址,負載均衡轉發請求到后端容器,在集群類其他pod可以通過clusterIP訪問應用。
7、滾動更新
更新服務不中斷,一次更新一個pod,而不是同時刪除整個服務。
8、服務編排
通過文件描述部署服務,使得應用程序部署變得高效。
9、資源監控
Node節點組件集成cAdvisor資源收集工具,通過Heapster匯總,并保存到influxDB時序數據庫,最后由Grafana展示。
10、提供認證授權
支持RBAC認證授權機制。
11、設計架構



功能組件
k8s 集群中有管理節點,Master與工作節點,Node兩種類型。
管理節點Master主要負責k8s集群管理,集群中各個節點之間信息交互,任務調度,還負責容器,pod, namespaces , pv 等生命周期的管理。
工作節點node主要為容器和pod提供計算資源,pod及其容器全部運行在工作節點上,工作節點通過kubelet服務與管理節點通信以管理容器的生命周期,并與集群其他節點進行通信。
1、master組件
kube-apiserver
kubernetes api 資源操作的唯一入口,各種組件的協調者,以HTTP API 提供接口服務,并提供相關的認證,授權等機制,
kube-controller-manager
處理集群中常規的后臺任務,一個資源對應一個控制器,而ControllerManager負責管理這些控制器,并維護集群的狀態。
kube-scheduler
負責資源的調度,按照預定的策略把pod調度到對應的Node節點上。
2、Node組件
kubelet
kubelet是Master在Node節點上的agent,管理本機運行容器的生命周期,同時也負責Volume和網絡的管理。例如創建容器,掛載數據卷,下載secret,獲取容器和節點的狀態等工作。
kube-proxy
在Node節點上實現Pod/serviced網絡代理,提供cluster內部的服務發現和四層負載均衡。
docker
真正運行容器的地方
etcd集群
分布式鍵值對儲存系統,用于保存集群狀態,比如pod,service等對象信息。
分層架構

核心層:最核心的功能,對外提供api 應用層,部署無狀態應用,等,和路由。管理層:系統度量,自動化,以及RBAC等 接口層:kubectl命令行工具,以及客戶端sdk 生態系統:分為外部的日志,監控等,內部的鏡像倉庫等。

安裝
創建集群
首先,查看所使用的 minikube 版本:
$ minikube version
minikube version: v0.25.0
啟動 minikube:
$ minikube start
Starting local Kubernetes v1.9.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.
minikube 啟動之后,會創建一個單節點 Kubernetes 集群。
查看集群版本:
$ kubectl version
Client Version: version.Info{Major:"1