1. 程式人生 > 其它 >k8s的元件

k8s的元件

優勢:

基於API,yaml檔案等實現容器的自動建立、刪除
更快速實現業務的彈性橫向擴容
動態發現新擴容的容器並對自動使用者提供訪問
更簡單、更快速的實現業務程式碼升級和回滾

k8s的核心元件:

master節點

kube-api-server:

提供了資源操作的唯一入口,並提供認證、授權、訪問控制、API註冊和發現等機制

kube-controller-Manager:

負責維護叢集的狀態,比如故障檢測、自動擴充套件、滾動更新等

kube-scheduler:

負責資源的排程,按照預定的排程策略將pod排程到相應的機器上

kube-etcd:

儲存了整個叢集的資料資訊(鍵值對資料)

Node節點

docker

負責映象管理以及pod和容器的真正執行(CRI)

kubelet:

負責維護容器的生命週期,同時也負責volume(CVI)和網路(CNI)的管理

kube-proxy:

負責為service提供cluster內部的服務發現和負載均衡,維護節點上的網路規則

可選元件:

coredns:

負責為整個叢集提供DNS服務

dashboard:

提供web介面

ingress:

為服務提供外網入口

等等其他元件

kubeadm init初始化

1,安裝預檢

    kubeadm 在執行安裝之前進行了相當細緻的環境檢測,下面就來扒一朳:

    1) 檢查執行 init 命令的使用者是否為 root,如果不是 root,直接快速失敗(fail fast);

    2) 檢查待安裝的 k8s 版本是否被當前版本的 kubeadm 支援(kubeadm 版本 >= 待安裝 k8s 版本);

    3) 檢查防火牆,如果防火牆未關閉,提示開放埠 10250;

    4) 檢查埠是否已被佔用,6443(或你指定的監聽埠)、10251、10252;

    5) 檢查檔案是否已經存在,/etc/kubernetes/manifests/*.yaml;

    6) 檢查是否存在代理,連線本機網路、服務網路、Pod網路,都會檢查,目前不允許代理;

    7) 檢查容器執行時,使用 CRI 還是 Docker,如果是 Docker,進一步檢查 Docker 服務是否已啟動,是否設定了開機自啟動;

    8) 對於 Linux 系統,會額外檢查以下內容:

        8.1) 檢查以下命令是否存在:crictl、ip、iptables、mount、nsenter、ebtables、ethtool、socat、tc、touch;

        8.2) 檢查 /proc/sys/net/bridge/bridge-nf-call-iptables、/proc/sys/net/ipv4/ip-forward 內容是否為 1;

        8.3) 檢查 swap 是否是關閉狀態;

    9) 檢查核心是否被支援,Docker 版本及後端儲存 GraphDriver 是否被支援;

            對於 Linux 系統,還需檢查 OS 版本和 cgroup 支援程度(支援哪些資源的隔離);

    10) 檢查主機名訪問可達性;

    11) 檢查 kubelet 版本,要高於 kubeadm 需要的最低版本,同時不高於待安裝的 k8s 版本;

    12) 檢查 kubelet 服務是否開機自啟動;

    13) 檢查 10250 埠是否被佔用;

    14) 如果開啟 IPVS 功能,檢查系統核心是否載入了 ipvs 模組;

    15) 對於 etcd,如果使用 Local etcd,則檢查 2379 埠是否被佔用, /var/lib/etcd/ 是否為空目錄;

        如果使用 External etcd,則檢查證書檔案是否存在(CA、key、cert),驗證 etcd 服務版本是否符合要求;

    16) 如果使用 IPv6,

        檢查 /proc/sys/net/bridge/bridge-nf-call-iptables、/proc/sys/net/ipv6/conf/default/forwarding 內容是否為 1;

        以上就是 kubeadm init 需要檢查的所有專案了!

2,完成安裝前的配置

    1) 在 kube-system 名稱空間建立 ConfigMap kubeadm-config,同時對其配置 RBAC 許可權;

    2) 在 kube-system 名稱空間建立 ConfigMap kubelet-config-<version>,同時對其配置 RBAC 許可權;

    3) 為當前節點(Master)打標記:node-role.kubernetes.io/master=;

    4) 為當前節點(Master)補充 Annotation;

    5) 如果啟用了 DynamicKubeletConfig 特性,設定本節點 kubelet 的配置資料來源為 ConfigMap 形式;

    6) 建立 BootStrap token Secret,並對其配置 RBAC 許可權;

    7) 在 kube-public 名稱空間建立 ConfigMap cluster-info,同時對其配置 RBAC 許可權;

    8) 與 apiserver 通訊,部署 DNS 服務;

    9) 與 apiserver 通訊,部署 kube-proxy 服務;

    10) 如果啟用了 self-hosted 特性,將 Control Plane 轉為 DaemonSet 形式執行;

    11) 列印 join 語句;

    以上就是 kubeadm 最後所做的操作了,為執行 kubeadm join 做好了鋪墊。