# Kubernetes的整體架構

- Master節點: 作為控制節點,對集群進行調度管理;Master由kube-apiserver、kube-scheduler和kube-controller-manager所組成。
- Node節點: 作為真正的工作節點,運行業務應用的容器;Node包含kubelet、kube-proxy和Container Runtime;kubectl用于通過命令行與API Server進行交互,而對Kubernetes進行操作,實現在集群中進行各種資源的增刪改查等操作。
- ETCD:是Kubernetes用來備份所有集群數據的數據庫。它存儲集群的整個配置和狀態。主節點查詢etcd以檢索節點,容器和容器的狀態參數。
- Add-on:是對Kubernetes核心功能的擴展,例如增加網絡和網絡策略等能力。
## Master節點
**kube-apiserver**:主要用來處理REST的操作,確保它們生效,并執行相關業務邏輯,以及更新etcd(或者其他存儲)中的相關對象。API Server是所有REST命令的入口,它的相關結果狀態將被保存在etcd(或其他存儲)中。API Server的基本功能包括:
- REST語義,監控,持久化和一致性保證,API 版本控制,放棄和生效
- 內置準入控制語義,同步準入控制鉤子,以及異步資源初始化
- API注冊和發現
> 另外,API Server也作為集群的網關。默認情況,客戶端通過API Server對集群進行訪問,客戶端需要通過認證,并使用API Server作為訪問Node和Pod(以及service)的堡壘和代理/通道。
**kube-controller-manager**:用于執行大部分的集群層次的功能,它既執行生命周期功能(例如:命名空間創建和生命周期、事件垃圾收集、已終止垃圾收集、級聯刪除垃圾收集、node垃圾收集),也執行API業務邏輯(例如:pod的彈性擴容)。控制管理提供自愈能力、擴容、應用生命周期管理、服務發現、路由、服務綁定和提供。Kubernetes默認提供Replication Controller、Node Controller、Namespace Controller、Service Controller、Endpoints Controller、Persistent Controller、DaemonSet Controller等控制器。
**kube-scheduler**:scheduler組件為容器自動選擇運行的主機。依據請求資源的可用性,服務請求的質量等約束條件,scheduler監控未綁定的pod,并將其綁定至特定的node節點。Kubernetes也支持用戶自己提供的調度器,Scheduler負責根據調度策略自動將Pod部署到合適Node中,調度策略分為預選策略和優選策略,Pod的整個調度過程分為兩步:
- 預選Node:遍歷集群中所有的Node,按照具體的預選策略篩選出符合要求的Node列表。如沒有Node符合預選策略規則,該Pod就會被掛起,直到集群中出現符合要求的Node。
- 優選Node:預選Node列表的基礎上,按照優選策略為待選的Node進行打分和排序,從中獲取最優Node。
## Node節點
**kubelet**:Kubelet是Kubernetes中最主要的控制器,它是Pod和Node API的主要實現者,Kubelet負責驅動容器執行層。在Kubernetes中,應用容器彼此是隔離的,并且與運行其的主機也是隔離的,這是對應用進行獨立解耦管理的關鍵點。
在Kubernets中,Pod作為基本的執行單元,它可以擁有多個容器和存儲數據卷,能夠方便在每個容器中打包一個單一的應用,從而解耦了應用構建時和部署時的所關心的事項,已經能夠方便在物理機/虛擬機之間進行遷移。API準入控制可以拒絕或者Pod,或者為Pod添加額外的調度約束,但是Kubelet才是Pod是否能夠運行在特定Node上的最終裁決者,而不是scheduler或者DaemonSet。kubelet默認情況使用cAdvisor進行資源監控。負責管理Pod、容器、鏡像、數據卷等,實現集群對節點的管理,并將容器的運行狀態匯報給Kubernetes API Server。
**Container Runtime**:每一個Node都會運行一個Container Runtime,其負責下載鏡像和運行容器。Kubernetes本身并不停容器運行時環境,但提供了接口,可以插入所選擇的容器運行時環境。kubelet使用Unix socket之上的gRPC框架與容器運行時進行通信,kubelet作為客戶端,而CRI shim作為服務器。常用于docker。不過1.24版本已經不支持docker-shim。
protocol buffers API提供兩個gRPC服務,ImageService和RuntimeService。ImageService提供拉取、查看、和移除鏡像的RPC。RuntimeSerivce則提供管理Pods和容器生命周期管理的RPC,以及與容器進行交互(exec/attach/port-forward)。容器運行時能夠同時管理鏡像和容器(例如:Docker和Rkt),并且可以通過同一個套接字提供這兩種服務。在Kubelet中,這個套接字通過–container-runtime-endpoint和–image-service-endpoint字段進行設置。Kubernetes CRI支持的容器運行時包括docker、rkt、cri-o、frankti、kata-containers和clear-containers等。
**kube-proxy**:基于一種公共訪問策略(例如:負載均衡),服務提供了一種訪問一群pod的途徑。此方式通過創建一個虛擬的IP來實現,客戶端能夠訪問此IP,并能夠將服務透明的代理至Pod。每一個Node都會運行一個kube-proxy,kube proxy通過iptables規則引導訪問至服務IP,并將重定向至正確的后端應用,通過這種方式kube-proxy提供了一個高可用的負載均衡解決方案。服務發現主要通過DNS實現。
在Kubernetes中,kube proxy負責為Pod創建代理服務;引到訪問至服務;并實現服務到Pod的路由和轉發,以及通過應用的負載均衡。
- 前言
- 架構
- 部署
- kubeadm部署
- kubeadm擴容節點
- 二進制安裝基礎組件
- 添加master節點
- 添加工作節點
- 選裝插件安裝
- Kubernetes使用
- k8s與dockerfile啟動參數
- hostPort與hostNetwork異同
- 應用上下線最佳實踐
- 進入容器命名空間
- 主機與pod之間拷貝
- events排序問題
- k8s會話保持
- 容器root特權
- CNI插件
- calico
- calicoctl安裝
- calico網絡通信
- calico更改pod地址范圍
- 新增節點網卡名不一致
- 修改calico模式
- calico數據存儲遷移
- 啟用 kubectl 來管理 Calico
- calico卸載
- cilium
- cilium架構
- cilium/hubble安裝
- cilium網絡路由
- IP地址管理(IPAM)
- Cilium替換KubeProxy
- NodePort運行DSR模式
- IP地址偽裝
- ingress使用
- nginx-ingress
- ingress安裝
- ingress高可用
- helm方式安裝
- 基本使用
- Rewrite配置
- tls安全路由
- ingress發布管理
- 代理k8s集群外的web應用
- ingress自定義日志
- ingress記錄真實IP地址
- 自定義參數
- traefik-ingress
- traefik名詞概念
- traefik安裝
- traefik初次使用
- traefik路由(IngressRoute)
- traefik中間件(middlewares)
- traefik記錄真實IP地址
- cert-manager
- 安裝教程
- 頒布者CA
- 創建證書
- 外部存儲
- 對接NFS
- 對接ceph-rbd
- 對接cephfs
- 監控平臺
- Prometheus
- Prometheus安裝
- grafana安裝
- Prometheus配置文件
- node_exporter安裝
- kube-state-metrics安裝
- Prometheus黑盒監控
- Prometheus告警
- grafana儀表盤設置
- 常用監控配置文件
- thanos
- Prometheus
- Sidecar組件
- Store Gateway組件
- Querier組件
- Compactor組件
- Prometheus監控項
- grafana
- Querier對接grafana
- alertmanager
- Prometheus對接alertmanager
- 日志中心
- filebeat安裝
- kafka安裝
- logstash安裝
- elasticsearch安裝
- elasticsearch索引生命周期管理
- kibana安裝
- event事件收集
- 資源預留
- 節點資源預留
- imagefs與nodefs驗證
- 資源預留 vs 驅逐 vs OOM
- scheduler調度原理
- Helm
- Helm安裝
- Helm基本使用
- 安全
- apiserver審計日志
- RBAC鑒權
- namespace資源限制
- 加密Secret數據
- 服務網格
- 備份恢復
- Velero安裝
- 備份與恢復
- 常用維護操作
- container runtime
- 拉取私有倉庫鏡像配置
- 拉取公網鏡像加速配置
- runtime網絡代理
- overlay2目錄占用過大
- 更改Docker的數據目錄
- Harbor
- 重置Harbor密碼
- 問題處理
- 關閉或開啟Harbor的認證
- 固定harbor的IP地址范圍
- ETCD
- ETCD擴縮容
- ETCD常用命令
- ETCD數據空間壓縮清理
- ingress
- ingress-nginx header配置
- kubernetes
- 驗證yaml合法性
- 切換KubeProxy模式
- 容器解析域名
- 刪除節點
- 修改鏡像倉庫
- 修改node名稱
- 升級k8s集群
- 切換容器運行時
- apiserver接口
- 其他
- 升級內核
- k8s組件性能分析
- ETCD
- calico
- calico健康檢查失敗
- Harbor
- harbor同步失敗
- Kubernetes
- 資源Terminating狀態
- 啟動容器報錯