參考鏈接:https://github.com/opsnull/follow-me-install-kubernetes-cluster
kubernetes 概述
1、kubernetes 是什么
Google2014年推出的容器集群管理系統
k8s用於容器化應用程序的部署、擴展和管理
k8s提供了容器編排、資源調度、彈性伸縮、部署管理、服務發現等一系列功能
k8s的目標是讓部署容器化應用簡單高效
總結:可以理解成一個容器平台、微服務平台(非常適合微服務架構)、便攜式雲平台
2、kebernetes 能做什么
3、kubernetes 特性
3.1 自我修復:
在節點故障時重新啟動失敗的容器,替換和重新部署,保證預期我們設置的副本的數量;
殺死健康檢車失敗的容器,並且在沒有准備好之前是不會處理客戶端請求的(不對外提供服務),保證線上服務不中斷
3.2 彈性伸縮(比如618活動,保證我們服務的快速縮容和擴容):
使用命令、UI或者基於CPU使用情況自動快速擴容和縮容應用的程序實例(容器的副本數),
保證應用業務高峰並發時的高可用性;
在業務低峰時期回收資源,以減小成本運行服務
3.3 自動部署和回滾
k8s 采用滾動更新的策略更新應用,一次更新一個Pod,而不是同時刪除所有的pod,如果更新過程中出現問題,將回滾更改,確保升級不影響業務
3.4 服務發現和負載均衡
k8s為多個容器提供一個統一訪問入口(內部IP地址和一個DNS名稱),並且負載均衡關聯的所有容器,使得用戶無需考慮容器IP的問題
3.5 機密數據(密碼,證書)和配置管理
k8s提供存儲能力(可以把密碼加密放在容器存儲中)
管理機密數據和應用程序的配置,而不需要把敏感的數據暴露在鏡像里,提高敏感數據的安全性,並且可以把一些常用的配置存儲在k8s中,方便應用程序的使用
3.6 存儲編排
掛載外部的存儲系統,無論是來自本地存儲,公有雲,還是網絡存儲(NFS《GlustFS,Ceph)
都作為集群資源的一部分使用,極大的提高存儲使用靈活性
3.7 批處理
提供一次性任務,定時任務,滿足批量數據處理和分析的場景
4、Kubernetes 集群架構與組件(http://docs.kubernetes.org.cn/251.html)
master(api、schedular、contorller)+2node(kubelet、k ubeproxy、container_runtime(容器引擎的一個環境))
master組件(集群中控制面板的功能,來管理整個集群,控制包括全局的角色和調度)
kubectl 是一個客戶端的管理工具,直接管理API server,提供一個請求到一個api server,中間有一個auth認證(判斷是否有權限訪問),api 將信息存儲到etcd數據庫中,然后scheduler和
API Server(k8s 提供的整個集群統一入口,提供了http RESTFUl api 的方式)
controller-manager做各自的事情
scheduler 做集群節點的調度(調度器,根據調度算法綁定到指定的node上)
contorller-manager 負責任務(控制器)
Node 組件
kubelet:接收k8s master下發的任務,並進行處理,比如說master讓創建一個容器,那么這個時候kubelet就會調用docker-engine的接口創建container(主要管理k8s容器的創建和一些生命周期的管理)
kube-proxy :負責網路代理(處理用戶怎么訪問container?),維護網絡規則和四層的負載均衡,怎樣才能讓下面的Pod(一個或者多個容器)能對外提供服務
Pod 由多個或者一個容器組成
架構圖:
總結:
Master 組件:
kube-apiserver :
Kubernetes API 集群的統一入口,各組件的協調者,以RESTful API提供接口方式,所有的對象資源的
增刪改查和監聽操作都交給APIServer處理后再提交給etcd數據庫做持久化存儲
Kube-controller-manager
處理集群中常規后台任務,一個資源對應一個控制器,而controllerManager就是負責處理這些控制器的
kube-scheduler
根據調度算法為新創建的pod選擇一個Node節點,可以任意部署,可以部署在同一個節點上,也可以部署在不同的節點上
etcd
分布式鍵值存儲系統,用於保存集群狀態數據,比如Pod,Service等對象信息
Node組件:
kubelet:
kubelet 是Master在Node節點上的Agent,管理本機運行容器的生命周期,比如創建容器,Pod掛載數據卷,下載secret,獲取容器和節點狀態等工作,kubelet 將每個Pod轉換成一組容器
kube-proxy:
在Node節點上實現Pod網絡代理,維護網絡規則和四層負載均衡工作。實現讓Pod節點(一個或者多個容器)對外提供服務
docker或rocket
容器引擎,運行容器
5、Kubernetes 核心概念
模型對象
Pod
• 最小部署單元
• 一組容器的集合
• 一個Pod中的容器共享網絡命名空間
• Pod是短暫的
Controllers
• ReplicaSet : 確保預期的Pod副本數量
• Deployment : 無狀態應用部署
• StatefulSet : 有狀態應用部署
• DaemonSet : 確保所有Node運行同一個Pod
• Job : 一次性任務
• Cronjob : 定時任務
更高級層次對象,部署和管理Pod
Service
• 防止Pod失聯
• 定義一組Pod的訪問策略
Label : 標簽,附加到某個資源上,用於關聯對象、查詢和篩選
Namespaces : 命名空間,將對象邏輯上隔離
Annotations :注釋