Kubernetes 基础概念整理

K8S基础组件

整个集群的控制中枢

集群控制中枢,各个模块之间的信息交互都需要经过Kube-APIServer,同时也是集群管理,资源配置,集群安全机制的入口

集群的状态管理器,保证Pod或其他资源达到期望值,需要和APIServer进行通信,在需要的时候创建、更新或删除它所管理的资源

集群的调度中心,根据指定的一系列条件,选择一个或一批最佳的节点,部署Pod

键值数据库,保存一些集群的信息,生产环境中建议部署三个或三个以上奇数个节点

worker/node节点

负责监听和上报节点上Pod状态,与master节点通信并管理节点上面的Pod

负责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>
</none></none></none></none></none></none>

itables 模式
在这种模式下,kube-proxy监视API Server中service和endpoint的变化情况。对于每个service,它都生成相应的iptables规则,这些规则捕获到service的clusterIP和port的流量,并将这些流量随机重定向到service后端Pod。对于每个endpoint对象,它生成选择后端Pod的iptables规则。

符合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

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
</none></none>

采集容器数据

[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%

Original: https://www.cnblogs.com/arvinhuang/p/16838874.html
Author: 平凡键客
Title: Kubernetes 基础概念整理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684308/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球