Kubernetes 基礎概念整理

K8S基礎組件

官方文檔鏈接

Master 節點

整個集羣的控制中樞

Kube-APIServer

集羣控制中樞,各個模塊之間的信息交互都需要經過Kube-APIServer,同時也是集羣管理,資源配置,集羣安全機制的入口

Controller-Manager

集羣的狀態管理器,保證Pod或其他資源達到期望值,需要和APIServer進行通信,在需要的時候創建、更新或刪除它所管理的資源

Scheduler

集羣的調度中心,根據指定的一系列條件,選擇一個或一批最佳的節點,部署Pod

ETCD

鍵值數據庫,保存一些集羣的信息,生產環境中建議部署三個或三個以上奇數個節點

Node 節點

worker/node節點

Kubelet

負責監聽和上報節點上Pod狀態,與master節點通信並管理節點上面的Pod

Kube-porxy

負責Pod之間的通信和負載均衡,將指定的流量分發到後端正確的機器上

[root@master01 ~]# netstat -lntp | grep kube-proxy
tcp        0      0 0.0.0.0:30929           0.0.0.0:*               LISTEN      998/kube-proxy      
tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN      998/kube-proxy      
tcp6       0      0 :::10256                :::*                    LISTEN      998/kube-proxy 

ipvs 和 iptables 區別
從k8s的1.8版本開始,kube-proxy引入了IPVS模式,IPVS模式與iptables同樣基於Netfilter,但是ipvs採用的hash表,iptables採用一條條的規則列表。iptables又是爲了防火牆設計的,集羣數量越多iptables規則就越多,而iptables規則是從上到下匹配,所以效率就越是低下。因此當service數量達到一定規模時,hash查表的速度優勢就會顯現出來,從而提高service的服務性能

ipvs 模式
在這種模式下,kube-proxy監聽API Server中service和endpoint的變化情況,調用netlink接口創建相應的ipvs規則,並定期將ipvs規則與Kubernetes服 Services和Endpoints同步。保證IPVS狀態。

當訪問Services時,IPVS將流量定向到後端pod之一。

[root@master01 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  127.0.0.1:30929 rr
  -> 172.18.71.5:8443             Masq    1      0          0         
TCP  172.17.0.1:30929 rr
  -> 172.18.71.5:8443             Masq    1      0          0         
TCP  172.31.112.128:30929 rr
  -> 172.18.71.5:8443             Masq    1      0          0         
TCP  192.168.44.10:30929 rr
  -> 172.18.71.5:8443             Masq    1      0          0         
TCP  192.168.44.236:30929 rr
  -> 172.18.71.5:8443             Masq    1      0          0         
TCP  10.96.0.1:443 rr
  -> 192.168.44.10:6443           Masq    1      0          0         
  -> 192.168.44.11:6443           Masq    1      0          0         
  -> 192.168.44.12:6443           Masq    1      0          0         
TCP  10.96.0.10:53 rr
  -> 172.29.55.5:53               Masq    1      0          0         
TCP  10.96.0.10:9153 rr
  -> 172.29.55.5:9153             Masq    1      0          0         
TCP  10.96.223.156:8000 rr
  -> 172.20.59.196:8000           Masq    1      0          0         
TCP  10.107.33.199:443 rr
  -> 172.18.71.5:8443             Masq    1      0          0         
TCP  10.109.10.62:443 rr
  -> 172.21.231.133:4443          Masq    1      2          0         
UDP  10.96.0.10:53 rr
  -> 172.29.55.5:53               Masq    1      0          0  

[root@master01 ~]# netstat -lntp | grep kube-proxy
tcp        0      0 0.0.0.0:30929           0.0.0.0:*               LISTEN      998/kube-proxy      
tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN      998/kube-proxy      
tcp6       0      0 :::10256                :::*                    LISTEN      998/kube-proxy

[root@master01 ~]# kubectl get svc -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.96.223.156   <none>        8000/TCP        4d8h
kubernetes-dashboard        NodePort    10.107.33.199   <none>        443:30929/TCP   4d8h


[root@master01 ~]#  kubectl get po -n kubernetes-dashboard -owide
NAME                                         READY   STATUS    RESTARTS   AGE    IP              NODE       NOMINATED NODE   READINESS GATES
dashboard-metrics-scraper-7645f69d8c-rkntb   1/1     Running   3          4d8h   172.20.59.196   master02   <none>           <none>
kubernetes-dashboard-78cb679857-sptx2        1/1     Running   5          4d8h   172.18.71.5     master03   <none>           <none>

itables 模式
在這種模式下,kube-proxy監視API Server中service和endpoint的變化情況。對於每個service,它都生成相應的iptables規則,這些規則捕獲到service的clusterIP和port的流量,並將這些流量隨機重定向到service後端Pod。對於每個endpoint對象,它生成選擇後端Pod的iptables規則。

Pod

Calico

符合CNI標準的網絡插件,給每一個Pod生成一個唯一的IP地址,並把每個節點當作一個路由

[root@master01 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.44.2    0.0.0.0         UG    0      0        0 ens33
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens33
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.71.0     192.168.44.12   255.255.255.192 UG    0      0        0 tunl0
172.20.59.192   192.168.44.11   255.255.255.192 UG    0      0        0 tunl0
172.21.231.128  192.168.44.14   255.255.255.192 UG    0      0        0 tunl0
172.29.55.0     192.168.44.13   255.255.255.192 UG    0      0        0 tunl0
172.31.112.128  0.0.0.0         255.255.255.192 U     0      0        0 *
192.168.44.0    0.0.0.0         255.255.255.0   U     0      0        0 ens33


172.21.231.128  192.168.44.14   255.255.255.192 UG    0      0        0 tunl0

[root@master01 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.44.2    0.0.0.0         UG    0      0        0 ens33
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens33
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.18.71.0     192.168.44.12   255.255.255.192 UG    0      0        0 tunl0
172.20.59.192   192.168.44.11   255.255.255.192 UG    0      0        0 tunl0
172.21.231.128  192.168.44.14   255.255.255.192 UG    0      0        0 tunl0
172.29.55.0     192.168.44.13   255.255.255.192 UG    0      0        0 tunl0
172.31.112.128  0.0.0.0         255.255.255.192 U     0      0        0 *
192.168.44.0    0.0.0.0         255.255.255.0   U     0      0        0 ens33


172.21.231.128  192.168.44.14   255.255.255.192 UG    0      0        0 tunl0

node02 ip 192.168.44.14
CoreDNS

k8s 內部集羣service解析,將service名稱解析成IP地址,然後通過service的IP地址連接到對應的應用上。

[root@master01 ~]# kubectl get svc -n kube-system
NAME             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                  AGE
kube-dns         ClusterIP   10.96.0.10     <none>        53/UDP,53/TCP,9153/TCP   4d9h
metrics-server   ClusterIP   10.109.10.62   <none>        443/TCP                  4d9h
Metrics-Server

採集容器數據

[root@master01 ~]# kubectl top po -n kube-system 
NAME                                       CPU(cores)   MEMORY(bytes)   
calico-kube-controllers-5f6d4b864b-k45q5   3m           20Mi            
calico-node-58hbg                          15m          110Mi           
calico-node-dlj65                          16m          107Mi           
calico-node-jqb6h                          14m          107Mi           
calico-node-r8fl5                          15m          105Mi           
calico-node-wv4vx                          16m          105Mi           
coredns-867d46bfc6-ljdjr                   2m           11Mi            
metrics-server-595f65d8d5-6k4wq            4m           16Mi 

[root@master01 ~]# kubectl top node -n kube-system 
NAME       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
master01   111m         5%     953Mi           51%       
master02   105m         5%     992Mi           53%       
master03   110m         5%     1011Mi          54%       
node01     56m          2%     538Mi           28%       
node02     54m          2%     523Mi           28%  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章