视频来源:B站《(2022版)最新、最全、最详细的Kubernetes(K8s)教程,从K8s安装到实战一套搞定》
一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:(2022版)一套教程搞定k8s安装到实战 | 汇总_COCOgsta的博客-CSDN博客
Kubernetes是谷歌以Borg为前身,基于谷歌15年生产环境经验的基础上开源的一个项目,Kubernetes致力于提供跨主机集群的自动部署、扩展、高可用以及运行应用程序容器的平台。
Master节点:整个集群的控制中枢
- Kube-APIServer:集群的控制中枢,各个模块之间信息交互都需要经过Kube-APIServer,同时它也是集群管理、资源配置、整个集群的安全机制的入口。
- Controller-Manager:集群的状态管理器,保证Pod或其他资源达到期望值,也是需要和APIServer进行通信,在需要的时候创建、更新或删除它所管理的资源。
- Scheduler:集群的调度中心,它会根据指定的一系列条件,选择一个或一批最佳的节点,然后部署我们的Pod。
- Etcd:键值数据库,保存一些集群的信息,一般生产环境中建议部署三个以上节点(奇数个)。
Node:工作节点
也称为worker、node节点、minion节点
- Kubelet:负责监听节点上Pod的状态,同时负责上报节点和节点上面Pod的状态,负责与Master节点通信,并管理节点上面的Pod。
- KuberProxy:负责Pod之间的通信和负载均衡,将指定的流量分发到后端正确的机器上。
- 查看Kube-proxy工作模式:
[root@k8s-master01 ~]# netstat -lntp | grep kube-proxy
tcp 0 0 0.0.0.0:30825 0.0.0.0:* LISTEN 1144/kube-proxy
tcp 0 0 127.0.0.1:10249 0.0.0.0:* LISTEN 1144/kube-proxy
tcp6 0 0 :::10256 :::* LISTEN 1144/kube-proxy
[root@k8s-master01 ~]#
[root@k8s-master01 ~]# curl 127.0.0.1:10249/proxyMode
ipvs[root@k8s-master01 ~]#
[root@k8s-master01 ~]#
- ipvs:监听Master节点增加和删除service以及endpoint的消息,调用Netlink接口创建相应的IPVS规则。通过IPVS规则,将流量转发至相应的Pod上。
[root@k8s-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:30825 rr
-> 172.27.14.194:8443 Masq 1 0 0
TCP 172.16.203.192:30825 rr
-> 172.27.14.194:8443 Masq 1 0 0
TCP 172.17.0.1:30825 rr
-> 172.27.14.194:8443 Masq 1 0 0
TCP 192.168.1.107:30825 rr
-> 172.27.14.194:8443 Masq 1 0 0
TCP 192.168.122.1:30825 rr
-> 172.27.14.194:8443 Masq 1 0 0
TCP 10.96.0.1:443 rr
-> 192.168.1.107:6443 Masq 1 1 0
-> 192.168.1.108:6443 Masq 1 0 0
-> 192.168.1.109:6443 Masq 1 0 0
TCP 10.96.0.10:53 rr
-> 172.17.125.2:53 Masq 1 0 0
TCP 10.96.0.10:9153 rr
-> 172.17.125.2:9153 Masq 1 0 0
TCP 10.102.71.156:443 rr
-> 172.27.14.194:8443 Masq 1 0 0
TCP 10.107.94.32:8000 rr
-> 172.16.203.194:8000 Masq 1 0 0
TCP 10.111.79.182:443 rr
-> 172.25.92.66:4443 Masq 1 2 0
UDP 10.96.0.10:53 rr
-> 172.17.125.2:53 Masq 1 0 0
[root@k8s-master01 ~]# kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.107.94.32 <none> 8000/TCP 4d21h
kubernetes-dashboard NodePort 10.102.71.156 <none> 443:30825/TCP 4d21h
[root@k8s-master01 ~]# kubectl get po -n kubernetes-dashboard -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
dashboard-metrics-scraper-7645f69d8c-92hzc 1/1 Running 1 4d21h 172.16.203.194 k8s-master-lb <none> <none>
kubernetes-dashboard-78cb679857-tw7n2 1/1 Running 2 4d21h 172.27.14.194 k8s-node02 <none> <none>
[root@k8s-master01 ~]#
- iptables:监听Master节点增加和删除service以及endpoint的消息,对于每一个service,他都会创建一个iptables规则,将service的clusetIP代理到后端对应的Pod。
- Calico:符合CNI标准的网络插件,给每个Pod生成一个唯一的IP地址,并且把每个节点当作一个路由器。
[root@k8s-master01 ~]# kubectl get pods -n kube-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-kube-controllers-5f6d4b864b-n6srh 1/1 Running 1 5d 192.168.1.109 k8s-master03 <none> <none>
calico-node-4b984 1/1 Running 1 5d 192.168.1.109 k8s-master03 <none> <none>
calico-node-8nr4x 1/1 Running 2 5d 192.168.1.108 k8s-master02 <none> <none>
calico-node-bpzm4 1/1 Running 1 5d 192.168.1.110 k8s-node01 <none> <none>
calico-node-m2nhm 1/1 Running 1 5d 192.168.1.111 k8s-node02 <none> <none>
calico-node-tstnv 1/1 Running 1 5d 192.168.1.236 k8s-master-lb <none> <none>
coredns-867d46bfc6-gjlqm 1/1 Running 1 4d21h 172.17.125.2 k8s-node01 <none> <none>
metrics-server-595f65d8d5-nt2xc 1/1 Running 1 4d21h 172.25.92.66 k8s-master02 <none> <none>
[root@k8s-master01 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eno16777736
172.16.203.192 0.0.0.0 255.255.255.192 U 0 0 0 *
172.16.203.194 0.0.0.0 255.255.255.255 UH 0 0 0 cali15b7f38cc2b
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.17.125.0 192.168.1.110 255.255.255.192 UG 0 0 0 tunl0
172.18.195.0 192.168.1.109 255.255.255.192 UG 0 0 0 tunl0
172.25.92.64 192.168.1.108 255.255.255.192 UG 0 0 0 tunl0
172.27.14.192 192.168.1.111 255.255.255.192 UG 0 0 0 tunl0
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eno16777736
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
[root@k8s-master01 ~]#
- CoreDNS:用于Kubernetes集群内部Service的解析,可以让Pod把Service名称解析成IP地址,然后通过Service的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.111.79.182 <none> 443/TCP 4d21h
You have new mail in /var/spool/mail/root
[root@k8s-master01 ~]#
[root@k8s-master01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d14h
[root@k8s-master01 ~]#
- Docker:容器引擎,负责对容器的管理。