云原生·Kubernetes01——Kubernetes基本概念

                               目录

一、Kubernetes 简介

二、组件说明

三、插件说明

四、Pod概念

1、自主式pod:

2、控制管理的pod:

五、网络通信方式

1、同一个Pod内多个容器之间:lo

2、各Pod之间的通讯:Overlay Network

3、Pod与Service之间的通讯:

4、K8S有三层网络:节点网络、Pod网络、Service 网络


一、Kubernetes 简介

Kubernetes 是谷歌开源的容器集群管理系统,是 Google 多年大规模容器管理技术 Borg 的开源版本,主要功能包括:
基于容器的应用部署、维护和滚动升级
负载均衡和服务发现
跨机器和跨地区的集群调度
自动伸缩
无状态服务和有状态服务
广泛的 Volume 支持
插件机制保证扩展性

二、组件说明

Etcd :键值对数据库,存储k8s集群的所有重要信息(持久化);
Apiserver :提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;
Controller manager :集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态;
Scheduler :负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
Kubelet :负责维护容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管理;
Container runtime :负责镜像管理以及 Pod 和容器的真正运行(CRI);
Kube-proxy :负责为 Service 提供 cluster 内部的服务发现和负载均衡;

三、插件说明

CoreDns:可以为集群中的SVC创建一个域名IP的对应关系解析。

DashBoard:给K8s集群提供一个b/s结构访问的体系。

Ingress Controller:官方只提供4层代理,Ingress提供7层代理。

Prometheus:提供K8s集群的监控能力。

Elk:提供K8s集群日志的统一接入平台。

四、Pod概念

1、自主式pod:

1)一个Pod容器里的端口不可以一致,否则会发生冲突,导致Pod无限重启
2)一个Pod中的容器共享网络命名空间,Pod是短暂的
3)Pod会被分配一个单独的地址,但这个地址会随Pod的销毁而消失

2、控制管理的pod:

ReplicationController(RC) & ReplicaSet(RS) & Deplovment  >HPA(HorizontalPodAutoScale)

1)ReplicationController(RC)用来确保容器应用的副本始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来代替,而如果异常多出来的容器也会自动回收。在新版本的Kubernetes中建议使用ReplicaSet来取代PeplicationController。
2)ReplicaSet 跟ReplicationController没有本质的不同,只是名字不一样,并且ReplicaSet支持集合式的selector。
3)虽然ReplicaSet 可以独立使用,但是一般还是建议使用Deployment来管理ReplicaSet,这样就无需担心跟其他机制的不兼容问题(比如ReplicaSet不支持rolling-update但Deployment支持)。
4)Horizontal Pod Autoscaling(HPA)仅适用于Deployment和ReplicaSet,它可以根据当前pod资源的使用率(如CPU、磁盘、内存等),进行副本数的动态的扩容与缩容,以便减轻各个pod的压力。
5)当pod负载达到一定的阈值后,会根据扩缩容的策略生成更多新的pod来分担压力,当pod的使用比较空闲时,在稳定空闲一段时间后,还会自动减少pod的副本数量。

StategullSet:为了解决有状态服务的问题,(对应Deployment和ReplicaSets,是为无状态服务而设计,其应用的场景包括:

1)稳定的持久化存储:即pod重新调度后还是可以访问的相同的数据,基于PVC实现。
2)稳定的网络标志:即pod重新调度后其Pod Name和Host Name不变,基于headless Service(即没有Cluster IP的Service来实现)。
3)有序部署,即启动Pod是有顺序,在下一个Pod运行之前所有之前运行的Pod必须都是Running或者Ready状态。
4)有序删除:即pod按顺序进行删除,严格按照从N到0的顺序删除,并且下一个Pod删除的前提是上一个Pod已经完全Delete。

DaemonSet:确保全部(或者一些)Node上运行一个Pod的副本。当有Node加入集群时,也会为他们新增一个Pod。当有Node从集群移除时,这些Pod也会被回收。删除DaemonSet将会删除它创建的所有Pod。

1)使用DaemonSet的一些典型用法:
2)运行集群存储daemon,例如在每个Node上运行Glusterd、Ceph。
3)在每个Node上运行日志收集daemon,例如Fluentd、Logstash。
4)在每个Node上运行监控Daemon,例如Prometheus、Node、Exporter

Job ,Vronjob:

Job:负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或者多个Pod成功结束。

Cron Job 管理基于时间的Job,即:
在给定时间点只运行一次
周期性的定时间运行

五、网络通信方式

K8s的网络模型假定了所有Pod都在一个可以直接联通的扁平的网络空间里,这在GCE(Google Computer English)里面是现成的网络模型,K8s假定这个网络已经存在。而在私有云里搭建k8s集群,就不能假定这个网络的存在了。我们需要自己实现这个网络假设,将不同节点的Docker容器之间的相互访问先打通,然后运行k8s。

1、同一个Pod内多个容器之间:lo

会共用一个pause的网络站lo网卡,通过Localhost的方式就可以访问。

2、各Pod之间的通讯:Overlay Network

Flannel是CoreOS团队针对K8S设计的网络规划服务,简单来说,它的功能是让集群的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。而且它还能在这些IP地址之间建立一个覆盖网络(Overlay Network),通过覆盖网络,将数据包原封不动的传递到目标容器内。

  解释:

同一个Pod内部通讯:同一个Pod共享同一个网络命名空间,共享同一个Linux协议。

pod1与pod2在同一台机器,由Docker0网桥直接转发请求到Pod2,不需要经过Flannel。

不同主机之间的Pod相互访问:pod1跟pod2不在同一台主机,Pod的地址是与Docker0在统一网段的,但是Docker0网段与宿主机网卡是两个完全不同的IP网段,并且不同的Node之间的通讯只能通过宿主机的物理网卡进行,将Pod的IP和所在Node的IP进行关联起来,通过这个关联让Pod可以相互访问。

Pod至Service的网络:目前基于性能考虑,全部为Lvs维护和转发。

Pod到外网:Pod向外网发送请求,查找路由表,转发数据包到宿主机的网卡,宿主机网卡完成路由选择后,Iptables执行Masquerade,把源IP更改为宿主机网卡的IP,然后向外网服务器发送请求。

外网访问Pod:Service

详解:

如web app1与 backend通信,web app1到达Docker0后会被Flannel0抓取,因为Flannel0是Flanneld开启的网桥,到Flanneld后会对数据包进行封装,到mac部分,源是192.168.66.11,目标为192.168.66.12(图有错),然后封装到udp,源是10.1.15.2目标为10.1.20.3,然后转发到192.168.66.12机器上,Flanneld会截获这个ip然后进行解封,然后转发到Flannel0上,Flannel0再转发到Docker0上,Docker0把信息发送到backend上。第二台主机是看不到第一次封装的信息的,只能看到第二次udp封装的信息  。

3、Pod与Service之间的通讯:

各节点的Iptables规则或者LVS规则。LVS的转发效率会更高,上限也就会更高。

4、K8S有三层网络:节点网络、Pod网络、Service 网络

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

改名叫热炸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值