概覽
Kubernetes是容器集羣管理系統,是一個開源的平臺,能夠實現容器集羣的自動化部署、自動擴縮容、維護等功能。nginx
特色
- 可移植: 支持公有云,私有云,混合雲,多重雲
- 可擴展: 模塊化, 插件化, 可掛載, 可組合
- 自動化: 自動部署,自動重啓,自動複製,自動伸縮/擴展
傳統的應用部署方式是經過插件或腳原本安裝應用。這樣作的缺點是不利於應用的升級更新、回滾等其它一系列複雜管理操做,固然經過建立虛機來擴展功能並不利於可移植性。docker
使用容器
新的方式是經過部署容器方式實現。相對於虛擬機能快速部署且能在不一樣雲、不一樣版本操做系統間進行遷移。api
特色
- 快速建立部署應用:與VM虛擬機相比,容器鏡像的建立更加容易。
- 持續開發、集成和部署:提供可靠且頻繁的容器鏡像構建/部署,並使用快速和簡單的回滾。
- 開發和運行相分離:在build或者release階段建立容器鏡像,使得應用和基礎設施解耦。
- 開發,測試和生產環境一致性:在本地或外網(生產環境)運行的一致性。
- 雲平臺或其餘操做系統:能夠在 Ubuntu、RHEL、 CoreOS、on-prem、Google Container Engine或其它任何環境中運行。
- Loosely coupled,分佈式,彈性,微服務化:應用程序分爲更小的、獨立的部件,能夠動態部署和管理。
- 資源隔離
- 資源利用:更高效
Kubernetes
主要功能
- 存儲系統掛載
- 應用健康檢測
- 應用實例的複製
- Pod自動伸縮擴展
- 負載均衡
- 資源監控
- 日誌訪問
- 調試應用程序
組件
Master組件
概覽
- Master組件提供集羣的管理控制中心。
- 爲了簡單起見,一般在一臺VM機器上啓動全部Master組件,而且不會在此VM機器上運行用戶容器。
包含組件
- kube-apiserver:暴露全部資源請求接口
- ETCD:存儲系統
- kube-scheduler:監視新建立沒有分配到Node的Pod,爲Pod選擇一個Node。
- 容器資源監測:提供一個UI瀏覽監控數據。
- Cluster-level Logging:負責保存容器日誌,搜索/查看日誌。
- kube-controller-manager:後臺線程管理器
它們是集羣中處理常規任務的後臺線程。邏輯上,每一個控制器是一個單獨的進程,但爲了下降複雜性,它們都被編譯成單個二進制文件,並在單個進程中運行。數據結構
功能
- 節點控制器
- 路由控制器
- Service控制器
- 卷控制器
Node組件
- kubelet:節點代理
- kube-proxy:鏈接轉發實現服務抽象
- docker:運行容器
- RKT:docker的替代方案
- supervisord:輕量級監控系統
- fluentd:守護進程,提供cluster-level logging
Kubernetes對象
Kubernetes對象是Kubernetes系統中的持久化實體,用於記錄容器化正在運行的情況、應用可用的資源、應用的運行策略等。能夠用Kubernetes API管理。
數據結構app
- Object Spec: 描述了對象所需的狀態,好比但願啓動3個Pod
- Object Status: 描述了對象的實際狀態,好比實際也啓動了3個Pod
yaml文件結構負載均衡
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
字段解釋分佈式
- apiVersion: 建立對象的Kubernetes API 版本
- kind: 要建立什麼樣的對象
- metadata: 具備惟一標示對象的數據,包括 name(字符串)、UID和Namespace(可選項)
Namespaces的使用
用於劃分資源管理空間,不一樣空間具備不一樣的用途。對於稍有不一樣用途的資源不必區分。
使用 kubectl命令能夠直接建立
建立模塊化
$ kubectl create namespace new-namespace
刪除微服務
$ kubectl delete namespaces new-namespace
查看測試
$ kubectl get namespaces
Labels 和 Selectors
label:label實際上是一對 key/value。
labels Selectors:標籤選擇器。經過標籤選擇器,客戶端/用戶 能方便辨識出一組對象。
Annotations
Annotations不用於標識和選擇對象。能夠將一些其它的元數據放入Annotations,其也是Key/Value格式
"annotations": {
"key1" : "value1",
"key2" : "value2"
}
Volume
存在於pod的卷,可掛載到指定位置
做用:
- 當容器重啓時,保證磁盤文件不丟失
- 容器之間文件共享
Volume具備本身的生命週期,其生命週期比pod中運行的任何容器都要持久。
Node
節點
狀態信息:
- Addresses
- Condition: 描述全部running節點狀態
- Capacity: CPU、內存和能夠調度到節點上的最大pod數。
- Info: 節點基礎信息
Pod
ubernetes建立或部署的最小且最簡單的基本單位,一個Pod表明集羣上正在運行的一個進程。
Node結構圖