kubernetes 基本概念和知識點腦圖
基本概念
kubernetes 中的絕大部分概念都抽象成kubernets管理的資源對象,主要有如下類別:node
- Master : Master節點是kubernetes的控制節點,負責對整個集羣的管理和控制,運行着kubernetes的核心管理、控制層組件。
- kube-apiserver: 集羣的入口,提供HTTP REST服務,同時又認證和受權訪問功能
- kube-controller-manager : 集羣的控制層,負責集羣資源的管理,自動化控制
- kube-scheduler: 集羣的調度器,負責pod的調度
- Node: Node節點是kubernetes的工做節點,工做負載主要運行容器應用,由Master節點分配工做負載,Node節點主要包括如下組件:
- kubelet: 管理node節點上的容器生命週期(建立、啓動、監控、重啓、銷燬),同時協調Master節點工做,實現對集羣的基本管理功能,是一個kube-apiserver的代理
- kube-proxy: 實現kubernetes service的通訊和負載均衡
- docker: 負責運行容器化應用(Pod)
![k8s basic](http://static.javashuo.com/static/loading.gif)
kubernetes 核心組件
- etcd 保存了整個集羣的狀態,是一個數據庫
- apiserver 提供資源操做的惟一入口,並提供認證、受權、訪問控制、api註冊和發現機制
- controller-manager 負責維護整個集羣的狀態,好比故障檢測、自動擴展、滾動更新等
- scheduler 負責資源的調度,按照預約的策略將資源調度到相應的機器上
- kubelet 負責維護容器的生命週期,同時負責Volume(CSI)和網絡(CNI)的管理
- kube-proxy 負責爲service 提供cluster的服務發現和負載均衡
- Container runtime 負責鏡像的管理以及pod和容器的真正運行(CRI)
標準配套組件:docker
- kube-dns(core-dns)提供集羣內部DNS服務
- ingress controller 提供訪問集羣容器應用的網絡接口
組件通訊
Kubernetes 多組件之間的通訊原理:數據庫
- apiserver 負責 etcd 存儲的全部操做,且只有 apiserver 才直接操做 etcd 集羣
- apiserver 對內(集羣中的其餘組件)和對外(用戶)提供統一的 REST API,其餘組件均經過 apiserver 進行通訊
- controller manager、scheduler、kube-proxy 和 kubelet 等均經過 apiserver watch API 監測資源變化狀況,並對資源做相應的操做
- 全部須要更新資源狀態的操做均經過 apiserver 的 REST API 進行
- apiserver 也會直接調用 kubelet API(如 logs, exec, attach 等),默認不校驗 kubelet 證書,但能夠經過
--kubelet-certificate-authority
開啓(而 GKE 經過 SSH 隧道保護它們之間的通訊)
好比最典型的建立 Pod 的流程:
json
- 用戶經過 REST API 建立一個 Pod
- apiserver 將其寫入 etcd
- scheduluer 檢測到未綁定 Node 的 Pod,開始調度並更新 Pod 的 Node 綁定
- kubelet 檢測到有新的 Pod 調度過來,經過 container runtime 運行該 Pod
- kubelet 經過 container runtime 取到 Pod 狀態,並更新到 apiserver 中
kubernetes資源對象
Pod k8s基本粒度單位api
ReplicaController 管理k8s網絡
ReplicaSet 下一代RC負載均衡
Deployment 管理RS,最新版RC,支持事務,版本回滾,滾動升級編碼
DaemonSet 守護程序部署,每一個node節點都部署一個pod加密
StatefulSet 有狀態應用,順序啓動,優雅關閉spa
Job 只執行一次任務類型
CronJob 定時任務類型
Namespace 邏輯隔離空間
Service 服務發現,負載均衡
HPA 自動彈性伸縮
ConfigMap 配置文件
Secret 加密配置文件,有三種類型
- Opaque:base64 編碼格式的 Secret,用來存儲密碼、密鑰等;但數據也能夠經過base64 –decode解碼獲得原始數據,全部加密性很弱。
- kubernetes.io/dockerconfigjson: 用來存儲docker registry的認證信息
- kubernetes.io/service-account-token:用於被
serviceaccount
引用,serviceaccout 建立時Kubernetes會默認建立對應的secret。Pod若是使用了serviceaccount,對應的secret會自動掛載到Pod目錄/run/secrets/kubernetes.io/serviceaccount
中。
Ingress 負載均衡,外網訪問接口
PersistentVolum pv持久化卷
PersistentVolumClaim pvc持久化卷聲明,消耗pv資源
StorageClass 存儲類,自動建立pv
RBAC 基於角色的訪問控制
SA ServiceAccount用戶
Role 角色
ClusterRole 集羣角色
RoleBinding 角色權限綁定
ClusterRoleBinding 集羣角色綁定
CustomResourceDefinition(CRD自定義資源對象)
kubectl api-resources 查看資源對象
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
kubectl api-version查看版本
![](http://static.javashuo.com/static/loading.gif)