K8s概念
VPC 专有网络VPC(Virtual Private Cloud
CRI (container runtime interface) :CRI Client,CRI Server,OCI Runtime。
:CRI Client 端有个实现就是 kubelet,CRI Server 端有个实现叫 Containerd,OCI Runtime 有好多实现其中有个叫 runc
CRD 全称是 Custom Resource Definition
CDI (containerized-data-importer) 是kubernetes的持久存储管理插件
CNI (ContainerNetwork Interface
CSI ,Container Storage Interface
PV全称叫做 PersistentVolume PVC StorageClass
kubernetes的节点需要对os、docker、etcd、k8s、cni和网络插件的安装和配置
标准化建设: 主要包括设备、系统、软件等三类对象资源
资源标准化 流程标准化 数据标准化
k8s网络模式
让集群中的各种 pod 之间能自由通信 IP-per-Pod模型
1. pod ip 地址的管理
2. 同一节点上的 pod 之间互相通信
3. 不同节点上的 pod 之间互相通信
插件
flannel,这个是利用的静态路由表配置或者 vxlan 实现的网络通信。
calico,是通过 BGP 协议实现了动态路由。
Weave,以及 OVN 之类的各种各样的网络插件
概念
Net Namespace
Veth 设备对 veth1 veth2 veth-pair 连接不同的命名空间 以太网设备
iptables Netfilter 网络栈处理数据包过程对数据包的操作
routed 路由
Docker 支持的网络模式
--net=bridge
--net=host
--net=container:
--net=none
未考虑多主机互联解决方案
OpenStack
VM 创建时指定 IP,VM 生命周期内地址保持固定
VM 创建时随机地址分配,VM 生命周期内地址保持固定
VM 热迁移过程中业务网卡保持地址固定
OpenStack社区,虚拟网络已经有了长足的发展,方案成熟,OVS 基本已经成为网络虚拟化的标准
OVS 以及 OVS 的控制器OVN
OVN 和 OVS 的关系就好比 Kubernetes 和 Docker 的关系
在OpenStack领域内成熟的网络功能往 Kubernetes 平移,也就诞生了灵雀云的开源项目 Kube-OVN
VM 创建时指定 IP
对于由管理员主动给 VM 分配地址,并在启动前确定地址的情况,
只需要在 KubeVirt 的VirtualMachine 的template中的
annotations增加 ovn.kubernetes.io/ip_address 来指定需要分配的地址
metadata:
annotations:
ovn.kubernetes.io/ip_address: 10.16.0.15
kubevirt
用于创建虚拟机
kubevirt是Red Hat开源的以容器方式运行虚拟机的项目,是基于kubernetes运行,
利用k8s CRD为增加资源类型VirtualMachineInstance(VMI)
kubevirt以CRD的形式将VM管理接口接入到kubernetes中,通过一个pod去使用libvirtd管理VM的方式,实现pod与VM的一一对应
KubeVirt 社区的用户在 Kube-OVN 中贡献了大量针对云原生虚拟化进行强化的功能,
包括固定地址,多租户网络和 SR-IOV 以及 OVS-DPDK 等功能
KubeVirt 上的虚拟化管理可以通过控制网络所属的 VPC 和 Subnet 来实现不同的 VM 落在不同的租户网络,从而实现整个虚拟化方案的多租户
kubevirt可以使用容器的image registry去创建虚拟机并提供VM生命周期管理。
结构:virtctl virt-api virt-controller virt-handler virt-launcher
虚拟机镜像 虚拟机生命周期管理 容器和虚拟机互通
Kube-OVN
安装:需要两个 yaml 就可以部署一个完整的 Kube-OVN
使用:annotation 即可对网络进行配置
Kube-OVN提供了大量目前Kubernetes不具备的网络功能
Kube-OVN 支持两种网关:分布式网关和集中式网关
Kube-OVN The Most Advanced Kubernetes Network Fabric
在Kube-OVN的网络拓扑里,不同 Namespace 对应着不同的子网。子网是其中最为重要的概念,
之后的内置负载均衡器,防火墙,路由策略以及DNS的网络功能都是和子网绑定的
网络
CNI 负责基础容器网络,它本身只是个接口标准
kube-proxy 集群内的服务发现网络需要依赖 kube-proxy,而 kube-proxy 又有 iptables 和 ipvs 两种实现
集群内的 DNS 需要依赖额外组件kube-dns 或coredns
网络策略的 NetworkPolicy 本身只是一个标准接口
ingress 只是一个标准接口
网络策略:子网划分、vlan 绑定、nat、qos、固定 IP