|NO.Z.00120|——————————|CloudNative|——|KuberNetes&基础标签.V03|——|kubernetes.v03|组件说明|
一、IPVS和IPtables的区别
### --- IPVS:
~~~ 监听Master节点增加和删除service记忆endpoint的消息,
~~~ 调用Netlink接口创建相应的IPVS规则,通过IPVS规则,将流量转发至相应的Pod上。
### --- Iptables:
~~~ 监听master节点增加和删除service以及endpoint的消息,
~~~ 对于每一个service,他都会创建一个Iptables规则,将service的clusterIP代理到后端对应的Pod。
### --- 查看ipvs配置规则
~~~ # 查看ipvs的配置规则
[root@k8s-master01 ~]# ipvsadm -ln
TCP 172.17.0.1:30008 rr
-> 172.25.92.66:8443 Masq 1 0 0
~~~ # 查看service地址规则
~~~ 通过30008端口就可以访问到172.25.92.66:8443
[root@k8s-master01 ~]# kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.103.18.41 <none> 8000/TCP 4d18h
kubernetes-dashboard NodePort 10.104.232.53 <none> 443:30008/TCP 4d18h # 可以看到它启动了一个30008端口
~~~ # 查看172.25.92.66:8443 是谁
~~~ 可以查看到172.25.92.66是k8s-master02
~~~ # IPVS的转发规则:
~~~ 所以说node节点的30008端口,
~~~ 通过IPVS的规则去反链到了dashboard上面的172.25.92.66这个地址,让后定义到对应的宿主机。
[root@k8s-master01 ~]# kubectl get po -n kubernetes-dashboard -owide
kubernetes-dashboard-78cb679857-mqccg 1/1 Running 9 4d18h 172.25.92.66 k8s-master02 <none> <none>
二、namespace.pod
### --- Pod是有命名空间隔离的,因为k8s是按命名空间进行隔离的。
~~~ 所以我们在查看pod的时候是需要指定它的命名空间kube-system;kube-system是一些系统的pod
[root@k8s-master01 ~]# kubectl get po -n kube-system -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-kube-controllers-5f6d4b864b-6clrl 1/1 Running 0 4d19h 192.168.1.11 k8s-master01 <none> <none>
calico-node-6hbtl 1/1 Running 14 4d19h 192.168.1.13 k8s-master03 <none> <none>
calico-node-77c2f 1/1 Running 6 4d19h 192.168.1.11 k8s-master01 <none> <none>
calico-node-hrqpt 1/1 Running 0 4d19h 192.168.1.15 k8s-node02 <none> <none>
calico-node-trkhw 1/1 Running 16 4d19h 192.168.1.12 k8s-master02 <none> <none>
calico-node-z4gkj 1/1 Running 0 4d19h 192.168.1.14 k8s-node01 <none> <none>
coredns-867d46bfc6-sk5dp 1/1 Running 1 4d19h 172.25.92.65 k8s-master02 <none> <none>
metrics-server-595f65d8d5-slhtd 1/1 Running 12 4d18h 172.18.195.1 k8s-master03 <none> <none>
~~~ # 若是不指定命名空间默认查看的是default命名空间,default命名空间是没有任何东西的
[root@k8s-master01 ~]# kubectl get po
No resources found in default namespace.
三、calico
### --- Calico:是符合CNI标准的网络插件,
~~~ # 主要功能是:
~~~ 会给每个Pod生成一个唯一的IP地址,并且把每个节点当做一个路由器。
~~~ 这样跨节点通信的话,节点是通的。
### --- 查看calico配置参数
~~~ # 查看创建的资源配置
~~~ 可以看到他们两个的网段是不一致的,因为他在两个不同的节点上,
~~~ 它在不同的节点上,calico会给他分配一个网段,
~~~ 让它本身当做一个路由器,给这个节点启动的Pod去分配一个IP地址。
[root@k8s-master01 ~]# kubectl get po -n kube-system -owide
coredns-867d46bfc6-sk5dp 1/1 Running 1 4d19h 172.25.92.65 k8s-master02 <none> <none>
metrics-server-595f65d8d5-slhtd 1/1 Running 12 4d19h 172.18.195.1 k8s-master03 <none> <none>
~~~ # 查看它的路由:k8s-master01和k8s-master02之间通讯是怎么样去寻址的
~~~ 可以看到k8s-master01有一个195网段的,走的是tunl0这个接口,
~~~ 访问的是10.10.10.12:k8s-master02的IP地址。
~~~ 10.10.10.12要访问这个网段172.25.92.64下的任意的一个IP地址,
~~~ 比如172.25.92.65,它就会去请求10.10.10.12;12收到这个请求包之后,
~~~ 它会再把这个包拆开,拆开之后它就会知道他请求的具体是哪个Pod的IP地址。
[root@k8s-master01 ~]# route -n
172.25.92.64 10.10.10.12 255.255.255.192 UG 0 0 0 tunl0
~~~ # 查看一下k8s-master02节点
[root@k8s-master02 ~]# route -n
172.25.92.65 0.0.0.0 255.255.255.255 UH 0 0 0 cali1b26698e933
四、coredns
### --- coredns
~~~ 用于Kubernetes集群内部Service解析,
~~~ 可以让Pod把Service名称解析成IP地址,然后通过Service的IP地址进行连接到对应的应用上。
### --- coredns配置资源
~~~ 查看创建的service资源
~~~ 以kube-system举例;10.96.0.10是CoreDNS本身自己的service。
~~~ pod之间的访问,若是想要访问metrics-server它的地址是什么呢?若是删除了这个service,那么它的ClusterIP也是会发生变化的,所以一般都是通过服务名曲访问对端的Pod
~~~ 访问service名,它是怎么知道这个service名的IP地址是什么呢?就是通过CoreDNS来进行解析的。
~~~ CoreDNS是有一个IP地址的,就是10.96.0.10,默认的就是k8sservice网段的第十个IP地址,
[root@k8s-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 4d21h
metrics-server ClusterIP 10.97.177.184 <none> 443/TCP 4d21h
### --- 查看创建的service
~~~ 一般来说k8s-service网段的第一个IP是给k8s用的,第十个地址是给coredns来用的。一般遵循这个规则。
~~~ 在生产环境中,coredns一定要起多个,起多个副本数。根据集群的规模,启动多少个coredns的数量。
[root@k8s-master01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d23h
五、metrics-server
### --- metrics-server说明
~~~ Docker:容器引擎,负责对容器的管理。
~~~ metrics-server:采集数据的
### --- metrics-server示例
~~~ 通过top命令查看容器消耗了多少内存CPU
~~~ 它的数据都是通过metrics-server来采集的。
[root@k8s-master01 ~]# kubectl top po -n kube-system
NAME CPU(cores) MEMORY(bytes)
calico-kube-controllers-5f6d4b864b-6clrl 4m 28Mi
calico-node-6hbtl 59m 49Mi
calico-node-77c2f 34m 64Mi
calico-node-hrqpt 32m 59Mi
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了