欢迎光临敏速云
我们一直在努力

云原生入门到进阶1篇就够了


开始阅读文章前,请角色切换:设想你作为一位中小型IT公司CTO,面对云原生技术决策,你需要回答两个问题:

作为一家公司的技术决策者,必须理解上云的利与弊,并结合公司各阶段发展目标给出最适合的技术方案。

云原生的定义,业界也是“百家争鸣”各持观点,从技术视角理解云原生会相对清晰。云原生的关键技术包括:

通过一组轻量级网络代理(Sidecarproxy),与应用程序代码部署在一起来实现,且对应用程序透明。

任何基础设施实例(服务器、容器等各种软硬件)一旦创建之后便成为一种只读状态,不可对其进行任何更改。

由于目标不同,开发和运维形成一堵墙,DevOps通过建立开发和运维之间合作和沟通的文化来消除墙。

自动化软件的开发和交付,通常包含持续集成,持续交付和持续部署,云原生时代还包括基础架构的自动化,即IaC(Infrastructureas code)。

度量尤其重要,通过客观的测量来确定正在发生的事情的真实性,验证是否按预期进行改变。并为不同职能部门达成一致建立客观基础。

Docker Registry 可包含多个仓库(Repository),每个仓库可包含多个标签(Tag),每个标签对应一个镜像。

Linuxnamespace 是一种内核级别的环境隔离机制,使得其中的进程好像拥有独立的系统环境。

Networknamespace在Linux中创建相互隔离的网络视图,每个网络名字空间都有自己独立的网络配置,包括:网络设备、路由表、IPTables规则,路由表、网络协议栈等。(默认操作是主机默认网络名字空间)

LinuxControl Group是内核用于限制进程组资源使用的功能。资源包括:CPU,内存,磁盘IO等。

UnionFile System, 联合文件系统:将多个不同位置的目录联合挂载(unionmount)到同一个目录下。

Docker利用联合挂载能力,将容器镜像里的多层内容呈现为统一的rootfs(根文件系统)。

Bridge模式:Docker0充当网桥,在默认情况下,被限制在Network Namespace里的容器进程,是通过 Veth Pair设备 + 宿主机网桥的方式,实现跟同其他容器的数据交换。

而这个端口唯一的作用,就是接收流入的数据包,然后把这些数据包全部交给对应的网桥,由网桥完成转发或者丢弃。

可以实现点对点的虚拟连接,可看成一条连接两张网卡的网线。一端网卡在容器的Network Namespace上,另一端网卡在宿主机NetworkNamespace上。任何一张网卡发送的数据包,都可以对端的网卡上收到。

它是一个工作在数据链路层的设备,主要功能是根据MAC 地址学习来将数据包转发到网桥的不同端口(Port)上。

路由(routing)是通过互联的网络把信息从源地址传输到目的地址的活动,发生在OSI模型的第三层(网络层)。Linux内核提供IP Forwarding功能,实现不同子网接口间转发IP数据包。

根据内部路由转发表将从一个网络接口中收到的数据包转发到另一个网络接口,实现不同三层子网间互通。

Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。

Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大,Kubernetes 可以负载均衡并分配网络流量,从而实现部署稳定。

Kubernetes 允许指定每个容器所需 CPU 和内存(RAM)。当容器指定资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。

Kubernetes 允许存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。你可在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

Controllermanager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等。

kubelet :负责维护Pod的生命周期,同时负责Volume(CVI)和网络(CNI)的管理。

kube-proxy通过在节点上添加 iptables规则以及从中移除这些规则来管理此端口重新映射过程。

Pod对象其实就是容器的升级版,对容器进行组合,添加更多属性和字段。就好比在集装箱上安装了吊环,Kubernetes这台“吊车”可以更轻松操作容器。

Service是一个逻辑概念,一组提供相同功能Pods的逻辑集合,并提供四层负载统一入口和定义访问策略。

Kubernetes的默认服务,配置endpoint列表,可以通过proxy 模式来访问该对应服务。

在集群所有节点上开放特定端口,任何发送到该端口流量借助Service的Iptables规则链发送到后端Pod。

对公网暴露服务建议采用此方式,Service没有对其行为做任何规范,依赖云厂商LB具体实现(云厂商收费服务)如:腾讯公有云:CLB。

交互流程:通过与Kubernetes API 交互,动态感知集群Ingress 规则,按照自定义的规则生成(负载均衡器)配置文件,并通过reload来重新加载。

很多场景下业务方希望容器、物理机和虚拟机可以在同一个扁平面中直接通过IP进行通信,通过Floating-IP网络实现。

SR-IOV标准允许在虚拟机之间高效共享 PCIe(快速外设组件互连)设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的 I/O 性能。

CNI命令行调用规范,其插件在主机上直接切换进入容器网络命名空间,为容器创建网络设备,配置IP,路由信息。

03层网络方案实现:在每台主机部署flanneld进程实现网段分配,路由控制,采用多种转发机制实现流量跨机交互。

RouteReflector安装:集群超过100个节点时强烈建议启用,通过RR中转全局路由信息。

iptables是运行在用户空间的应用软件,通过控制Linux内核netfilter,来管理网络数据包的处理和转发,存在“表(tables)”、“链(chain)”和“规则(rules)”三个层面。

每个“表”指的是不同类型的数据包处理流程,例如filter表表示进行数据包过滤,而NAT表针对连接进行地址转换操作。

每个表中又可以存在多个“链”,系统按照预订的规则将数据包通过某个内建链,例如将从本机发出的数据通过OUTPUT链。

在“链”中可以存在若干“规则”,这些规则会被逐一进行匹配,如果匹配,可以执行相应的动作,例如修改数据包,或者跳转。

VLAN虚拟局域网:是将一个物理LAN在逻辑上划分成多个广播域的通信技术。每个VLAN是一个广播域,VLAN内的主机间通信就和在一个LAN内一样。

交换机能够分辨不同VLAN的报文,需要在报文中添加标识VLAN信息的字段。数据帧中的VID(VLAN ID)字段标识了该数据帧所属的VLAN,数据帧只能在其所属VLAN内进行传输。

VXLAN在两台TOR交换机之间建立一条隧道,将服务器发出的原始数据帧加以“包装”,好让原始报文可以在承载网络(比如IP网络)上传输。

当到达目的服务器所连接的TOR交换机后,离开VXLAN隧道,并将原始数据帧恢复出来,继续转发给目的服务器。VXLAN将整个数据中心基础网络虚拟成了一台巨大的“二层交换机”。

eBGP(域外BGP):运行于不同AS之间的BGP,为了防止AS间产生环路。为了防止AS间产生环路,当BGP设备接收EBGP对等体发送的路由时,会将带有本地AS号的路由丢弃。

EBGP+IBGP实现AS间的路由传递:一个常见的IP骨干网的拓扑结构,骨干层和汇聚层分别是两个自治系统,AS100有两个出口设备SwitchC和SwitchD,两个AS之间需要进行路由互通。

云原生应用:docker应用打包、发布、运行,Kubernetes服务部署和集群管理,Istio构建服务治理能力。

商业市场模式从“大鱼吃小鱼”靠信息不对称,向“快鱼吃慢鱼”转变。我们必须利用趋势,拥抱云原生。
小编推荐黑鲨跨境指纹浏览器防关联软件工具|AMZ测评和亚马逊店铺管理


版权声明:本站大部分内容来自互联网,不拥有所有权,不承担相关法律责任。如发现有违法违规的内容或本文侵犯了你的权益, 请联系管理员,一经查实,本站将立刻删除。未经允许不得转载 » 云原生入门到进阶1篇就够了