kubernetes API Server
Controller Manager
Scheduler
kubelet
kube-proxy
网络原理–
1、kubernetes 网络模型
基础原则:每个pod都有一个独立的ip地址,所有pod之间都可以直接访问。pod内部共享网络,共享端口,pod内部可以通过localhst直接访问。
2、docker 网络基础
- 网络命名空间 Network Namespace
::linux 在网络栈中引入了Network Namespce,处于不同的命名空间的网络栈是完全隔离的,彼此之间无法通信,通过这种隔离,实现一个宿主机上虚拟多个不同的网络环境。
::linux独立的网络命名空间内,可以有独立的路由表、独立的iptables/Netfilter。
net namespace操作: Veth设备对
引入Veth设备对,是为了在不同的网络命名空间之间进行通信,Veth设备成对出现。docker把veth设备对的一端放到到docker容器中(并改名为eth0,骗过了所有人以为是真的网卡),另一端放到bridge中。- 网桥
网桥是一个二层的虚拟网络设备,可以把若干个网络接口连接起来。
- 网桥
iptables
iptables-save
- 路由
ip route show table local type local
ip route list
3、docker的网络实现
标准docker支持以下四种网络模式:
- host模式:使用–net=host指定。
- container模式:使用–net=container的name或者id指定
- none模式:使用–net=none指定
- bridge模式:使用–net=bridge指定
默认是bridge模式,docker daemon第一次启动会创建一个虚拟的网桥,docker0,在私有网络空间中,给这个网桥分配一个子网,针对由docker创建出的每一个容器,创建一个Veth设备对,从网桥的地址段内给ech0接口分配一个ip地址。
4、docker 网络的局限性
docker “简单而美”的理念,一开始没有考虑多主机互联的网络解决方案。
5、kubernetes 网络实现
- 容器到容器之间直接访问
pod内部的容器之间由于共享一个网络命名空间,他们之间访问就像在同一台机器上一样,通过localhost可以直接访问。 - 抽象的pod到pod之间通信
相同node的pod之间访问:由于同一个node上的pod都连接了docker0网桥,地址端相同,它们之间可以通过IP直接访问。
不同node的pod之间访问:k8s会记录所有运行的pod的ip信息,保存到etcd数据库中作为service endpoint。 - pod到service之间的通信
- 集群外部与集群内部组件之间的通信
- -
共享存储原理
1、pv详解
pv作为存储资源,主要包括:存储能力、访问模式、存储类型、回收策略、后端存储类型等关键信息的设置。pv的关键配置参数如下:
- 存储能力 capacity:storage=5Gi
- 访问模式 access modes:RWO、ROX、RWX
- 存储类别 class: storageclassname
- 回收策略 reclaim policy:保留retain、回收recycle、删除delete
2、pvc详解
pvc作为用户对存储资源的需求申请,主要包括:存储空间申请、访问模式、pv选择条件和存储类别等信息。pvc的关键配置参数如下:
- 资源请求resources:对存储资源请求,目前仅支持存储空间大小。
- 访问模式access modes:三种模式与pv相同,RWO、ROX、RWX
- 存储类别 class:
注意:pvc和pv都受限与namespcae,只有相同namespace的pv才能与pvc绑定。
3、pv和pvc的生命周期,以下是生命周期的各个阶段
- 1、资源供应 provisioning
-2、 资源绑定 binding
-3、 资源使用 using - 4、资源释放 releasing
- 5、资源回收 reclaiming
4、storageclass详解
storageclass的定义主要包括名称、后端存储提供者provisioner、后端存储相关参数配置。
- 提供者provisioner:描述后端资源的提供者,后端存储驱动。
- 参数parameters:后端资源提供者的参数设置,
storageclass动态供应模式相对于静态供应模式的优点:
- 管理员无需预先创建大量的PV作为存储资源
用户申请PVC时无法保证容量与预制pv的完全匹配。
5、glusterFS 部署
- 安装glusterfs客户端,在需要使用glusterfs的node节点上
- 安装glusterfs服务端,以容器的形式运行在每个node节点上,使用daemonset的方式进行部署
- 部署Heketi服务:提供RESTful API管理 glusterFS卷,
- 定义storageclass,提供者为glusterFS,配置hiketi服务地址,即可使用