前言:
docker集羣管理工具有:
swarm是docker官方的集羣管理工具
Mesos+馬拉松管理
kubernetes 佔用當前市場78% 雲原生環境 CKA認證
kubernetes就是對pod的資源管理
中間涉及到
-
linux
-
docker基本管理
-
ssl證書工作原理
-
負載均衡4/7原理
-
集羣分佈式概念
-
DNS域名解析原理
-
網絡協議
1.kubernetes是什麼
2.kubernetes特性
3.kubernetes集羣架構與組件
4.kubernetes核心概念
一:kubernetes概述
kubernetes是google在2014年開源的一個容器集羣管理系統,kubernetes簡稱k8s
kubernetes用於對容器化的應用程序的部署,擴展和管理
k8s提供了容器編排,資源調度,彈性伸縮,部署管理,服務發現等一系列功能
k8s的目標是讓部署容器化應用簡單高效
官方網站:http://www.kubernetes.io
備註:docker的默認容器編排工具是compose
資源調度:可以手動指定,也可以根據算法自動指定
部署管理:用到中間的核心組件 api server,它是k8s管理的唯一入口
二:K8S的特性
2.1 自我修復
在節點故障時可以刪除失效容器,重新創建新的容器,替換和重新部署,保證預期的副本數量,kill掉健康檢查失敗的容器,並且在容器未準備好之前不會處理客戶端情況,確保線上服務不會中斷
2.2 彈性伸縮
使用命令、UI或者k8s基於cpu使用情況自動快速擴容和縮容應用程序實例,保證應用業務高峯併發時的高可用性,業務低峯時回收資源,以最小成本運行服務
2.3 自動部署和回滾
k8s採用滾動更新策略更新應用,一次更新一個pod,而不是同時刪除所有pod,如果更新過程中出現問題,將回滾恢復,確保升級不影響業務
2.4 服務發現和負載均衡
k8s爲多個容器提供一個統一訪問入口(內部IP地址和一個dns名稱)並且負載均衡關聯的所有容器,使得用戶無需考慮容器IP問題
2.5 機密和配置管理
管理機密數據和應用程序配置,而不需要把敏感數據暴露在徑向力,提高敏感數據安全性,並可以將一些常用的配置存儲在k8s中,方便應用程序調用
2.6 存儲編排
掛載外部存儲系統,無論時來自本地存儲、公有云(aws)、還是網絡存儲(nfs、GFS、ceph),都作爲集羣資源的一部分使用,極大提高存儲使用靈活性
2.7 批處理
提供一次性任務,定時任務:滿足批量數據處理和分析的場景
三:k8s集羣架構與組件
node:業務節點
主控節點master
主控節點的API server是其中唯一入口
api server管理所有的事務,並把信息記錄到etcd數據庫中
etcd有一個自動服務發現的特性機制,etcd會搭建有三個節點的集羣,實現三副本
scheduler 調度器用來調度資源,查看業務節點的資源情況,確定在哪個node上創建pod,把指令告知給api server
控制管理器controller-manager管理pod
pod可以分爲有狀態和無狀態的pod,一個pod裏最好只放一個容器
api server 把任務下發給業務節點的kubelet去執行
客戶訪問通過kube-proxy去訪問pod
pod下面的不一定是docker,還有別的容器
一般pod中只包含一個容器,除了一種情況除外,那就是elk
elk會在pod內多放一個logstash去收集日誌
3.1 各節點安裝組件
kube-proxy 代理規則:
如果container消失了,那麼master的調度器會繼續創建
在kubenetes中查看信息都是去訪問etcd
3.1.1 master 組件
- kube-apiserver
kubernetes api,集羣的統一入口,各組件之間的協調者,以restful api提供接口服務,所有對象資源的增刪改查和監聽操作都交給apiserver處理後在提交給etcd存儲記錄
- kube-controller-manager
處理集羣中常規的後臺任務,一種資源對應一個控制器,controller-manager就是負責管理這些控制器的
- kube-scheduler
根據調度算法爲新創建的pod選擇一個node節點,可以任意部署,可以部署在同一個節點上,也可以部署在不同節點上
https://blog.csdn.net/li_101357/article/details/89980217
- etcd
分佈式鍵值存儲系統,用戶保存集羣狀態數據,比如pod、service等對象信息
3.1.2 node組件
- kubelet
kubelet時master在node節點上的代理agent,管理本node運行容器的生命週期
比如創建容器、pod掛載數據卷、下載sercet、獲取容器和節點狀態等工作
kubelet將每個pod轉換成一組容器
- kube-proxy
在node節點上實現pod的網絡代理,維護網絡規則和四層的負載均衡工作
- docker或rockert
容器引擎,運行容器
四:kubernetes核心概念
pod
- 最小部署單元
- 一組容器的集合
- 一個pod中的容器共享網絡命名空間
- pod是短暫的
controllers
- replicaset:確保預期的pod副本數量
- deployment:無狀態應用部署,比如nginx、apache,一定程度上的增減不會影響客戶體驗
- statefulset:有狀態應用部署,是獨一無二型的,會影響到客戶的體驗
- daemonset:確保所有node運行同一個pod,確保pod在統一命名空間
- job:一次性任務
- cronjob:定時任務
- 更高級層次對象:部署和管理pod
service
- 防止pod失聯
- 定義一組pod的訪問策略
- 確保了每個pod的獨立性和安全性
storage
- volumes
- persistent volumes
pollcies策略
- resource quotas
other
- label:標籤,附加到某個資源上,用戶關聯對象、查詢和篩選
- namespaces:命名空間,將對象從邏輯上隔離
- annotations:註釋