一、架構
master節點:
運行如下deamon服務:
- apiserver:提供restful api服務
- scheduler:用於調度pod到node
- Controller Manager:用於管理各種controller
- etcd:配置管理
- 網絡:如flannel
node節點:
- kubelet:從scheduler獲取pod配置信息,並在節點創建pod。
- kube-proxy:轉發service的請求
- 網絡:如flannel
二、核心概念
pod:調度的最基本單元,最基本工作單元,調度的時候整體調度。
pod中所有容器使用同一個網絡namespace,共享存儲。
pod裏一般只有一個容器,或者裏面的容器的關聯很緊密,共享資源。
kubernetes通過controller來管理pod,controller中定義了pod的部署特性。
controller類型:
1.deployment:最常用的controller,用來部署應用。
2.ReplicaSet:實現pod的多個副本管理。通過部署deployment來自動創建rs,不用直接操作。
3.DaemonSet:用於每個node最多運行一個副本的場景,即deamon。比如ceph,kubernetes自身的服務kube-proxy等。
4.StatefuleSet:用於有狀態的應用部署。需要穩定的集羣成員應用部署,如etcd
穩定的唯一的網絡標識,用於發現集羣內部其他成員。如etcd-0,etcd-1
穩定的持久化存儲。
啓動和關閉時保證有序。
存儲必須用pv/pvc或者外部存儲。刪除或縮容不會刪除相關卷,保證數據安全。需要一個headless service生成唯一表示,開發人員手動創建。手工升級。
生成的pod根據名稱來匹配存儲,實現狀態持久化。
5.job:用於運行結束就刪除的應用。其他controller裏的pod通常是持續運行的長期應用。
6.service:service用於爲pod提供負載均衡,用於提供ip和端口訪問pod。用kube-proxy使用iptables實現。
7.namespace:命名空間,用於controller和pod等資源的隔離。
default:默認命名空間
kube-system:放系統資源
label:使用label來影響pod的調度,如在某個節點添加label屬性有ssd,有該label的pod會調度到指定節點。
job執行失敗:失敗後會一直重試。容器失敗會自動重啓。
dns:kubeadm安裝後會默認安裝kube-dns組件,用於對service做dns映射。是namespace隔離的。
外網訪問service:
ClusterIP:默認service,只有cluster內部可以訪問。
NodePort:映射到cluster靜態端口。每個節點都可以,實際實現用的iptables。
LoadBalancer:雲負載均衡
健康檢查:
默認健康檢查機制:每個容器啓動時執行一個進程,判斷返回碼是不是0,非0則重啓容器。
liveness:自定義判斷容器是否健康條件,如文件是否存在。不健康則重啓。
Readiness:自定義判斷容器是否健康條件,不健康設置容器不可用,不對service提供服務。
存儲資源:
emptyDir:host上空目錄,pod從節點上刪除就沒了。 hostpath:跟host綁定,host沒了就沒了。
外部存儲:各種雲存儲,共享存儲。
pv和pvc:pv,將外部存儲重新規劃出一塊,由管理員創建和維護。pvc,對pv的申請。
根據回收策略,刪除pvc用於回收清理pv,數據清空。也可以保留數據。保留的話再想刪除數據就需要刪除pv了。
動態pv:指定容量和存儲類型等,動態分配pv。使用storageclass。
配置安全管理:
configmap:
非敏感信息,明文存儲。volume或者環境變量形式使用。
secret:
加密保存敏感信息,如用戶名密碼。
以volume形式掛載到pod,也可以用環境變量形式使用。
Helm:包管理器。
網絡模型:
每個pod有各自的ip地址,pod內部容器可以通過localhost通信,pod之間可以直接通信。
pod可能不斷創建和銷燬,ip不固定,所以用service來抽象出pod的ip來訪問,同時提供高可用和負載均衡。
CNI:容器網絡規範。
插件形式支持很多種網絡方案,如Flannel、Calico等
network-policy:使用label來選擇pod,並指定與外界通信方式。Flannel沒實現,Calico實現了。
k8s集羣監控:
Weave Scope
日誌管理:
Kubernetes 開發了一個 Elasticsearch 附加組件來實現集羣的日誌管理。這是一個 Elasticsearch、Fluentd 和 Kibana 的組合。Elasticsearch 是一個搜索引擎,負責存儲日誌並提供查詢接口;Fluentd 負責從 Kubernetes 蒐集日誌併發送給 Elasticsearch;Kibana 提供了一個 Web GUI,用戶可以瀏覽和搜索存儲在 Elasticsearch 中的日誌。
ElasticSearch實現