1.前言
容器服務建立 kubernetes 集羣后,系統默認建立一批 kubernetes 集羣的系統組件與進程,理解他們的部署配置方式和含義,是優化集羣,排除 k8s 集羣故障的技術基礎之一。
2.系統組件介紹:
2.1 Master 組件
2.1.1 kube-apiserver
基於generic server 上封裝的一層官方默認的 apiserver:
- 提供了集羣管理的REST API接口(包括認證授權、數據校驗以及集羣狀態變更);
- 提供其他模塊之間的數據交互和通信的樞紐 (其他模塊通過API Server查詢或修改數據,只有API Server才直接操作etcd);
- 資源配額控制的入口,完備的集羣安全機制,對相關集羣對象增刪查改等操作。
部署方式
kube-apiserver 以 Static pod 靜態POD 方式部署,其配置的 yaml 在 master 機器的/etc/kubernetes/manifests/kube-apiserver.yaml,修改該設置,保存後 k8s 集羣會自動重啓部署 apiserver pod 到Master 機器上。
# ssh 登錄 master 機器
cd /etc/kubernetes/manifests
# 查看 yaml 文件
vi /etc/kubernetes/manifests/kube-apiserver.yaml
服務暴露方式
通過 SLB 負載均衡暴露服務,slb 後端服務器爲 apiserver 所在的3臺 Master 機器,偵聽 pod 提供的6443 https 服務端口。
2.1.2 ETCD:
用來保存 k8s 集羣所有對象的狀態信息和網絡信息。
部署方式
Master 機器上啓動進程, etcd 在阿里雲容器服務中以系統 Service 方式部署。
服務暴露
2379端口
2.1.3 kube-scheduler:
kubernetes 調度器,調度 pod 到 ECS 的部署。
部署方式
靜態 POD方式部署,其配置的 yaml 在 master 機器的/etc/kubernetes/manifests/kube- scheduler.yaml,修改該設置,保存後 k8s 集羣會自動重啓部署。
# ssh 登錄 master 機器
cd /etc/kubernetes/manifests
# 查看 yaml 文件
vi /etc/kubernetes/manifests/kube-scheduler.yaml
服務暴露方式
http 10251 端口提供服務
2.1.4 kube-controller-manager:
k8s 資源對象管理控制器,包括 默認啓動的Node Controller, Daemon Controller, Deployment Controller 以及阿里雲擴展的相關 Controller 控制器 等;
部署方式
靜態 POD方式部署,其配置的 yaml 在 master 機器的/etc/kubernetes/manifests/kube-controller-manager.yaml,修改該設置,保存後 k8s 集羣會自動重啓部署。
# ssh 登錄 master 機器
cd /etc/kubernetes/manifests
# 查看 yaml 文件
vi /etc/kubernetes/manifests/kube-controller-manager.yaml
服務暴露方式
http 10252 端口提供服務
2.1.5 cloud-controller-manager:
雲資源管理控制器,實現 Cloud provider,用以雲資源的管理。
部署方式
Daemonset 守護進程方式部署,部署在 Master 機器上,使用 。
# 查看部署文件
kubectl get daemonset cloud-controller-manager -o=yaml -n kube-system
# 查看 pod
kubectl get pods -n kube-system|grep cloud-controller-manager
服務暴露方式
http 10252 端口提供服務
2.2 Node 組件
2.2.1 kubelet:
kubelet 服務進程,每個 node 上運行該節點,向 Master 註冊節點信息。
部署方式
節點上運行該服務進程
暴露服務
包括 10250 端口的認證 API、4194 端口的 cAdvisor API、10255 端口的只讀 API 以及 10248 端口的健康檢查 API
2.2.2 kube-proxy:
網絡通信組件
部署方式
Daemonset 守護進程方式部署,部署在 Master,Node 機器上都有使用 。
# 查看部署文件
kubectl get daemonset kube-proxy-master -o=yaml -n kube-system
# 查看 pod
kubectl get pods -n kube-system|grep kube-proxy-master
2.3 附加組件
名稱 | 部署形式 | 提供的服務 | 備註 |
---|---|---|---|
kube-DNS(Core-DNS) | Deployment | 端口:53 域名解析服務 | 建立擴容至多個 POD 副本 |
nginx ingress controller/default-http-backend | Deployment | Nginx http 七層協議路由與 http 後臺服務 端口:80,443 | 對於 http 服務訪問量高的必須擴容或者獨立另外部署 |
heapster & influxdb | Deployment | 80-->8082 | pod 雲監控組件: influxdb爲存儲監控數據的時序數據庫; heapster 爲容器集羣監控和性能分析工具,HPA、Dashborad、Kubectl top都依賴於heapster收集的數據。 坑:注意 influxdb 的內存做限制,防止其內存無限增長。 |
kube-flannel | Daemonset | 網絡設施進程 | |
logtail | Daemonset | 日誌採集守護進程 | |
flexvolume | Daemonset | volumen 磁盤管理進程 | |
tiller-deploy | Deployment | port:44134 | helm工具的服務端 |
metrics-server | Deployment | 443 | 功能通 Heapster,採集容器監控與性能數據。 |
alibaba-log-controller | Deployment | cloud-controller-manager 擴展 | 日誌管理控制器 |
alicloud-application-controller | Deployment | cloud-controller-manager 擴展 | 應用管理控制器 |
alicloud-disk-controller | Deployment | cloud-controller-manager 擴展 | 磁盤存儲控制器 |
alicloud-monitor-controller | Deployment | cloud-controller-manager 擴展 | 雲監控 |
aliyun-acr-credential-helper | Deployment | cloud-controller-manager 擴展 | 認證 |