Pod 内部容器访问是 Localhost,Pod 之间的通信属于远程访问 。
③Pod 是如何对外提供服务访问的?
Pod 是虚拟的资源对象(进程),没有对应实体(物理机,物理网卡)与之对应,无法直接对外提供服务访问 。
那么该如何解决这个问题呢?Pod 如果想要对外提供服务,必须绑定物理机端口 。
也就是说在物理机上开启端口,让这个端口和 Pod 的端口进行映射,这样就可以通过物理机进行数据包的转发 。
概括来说:先通过物理机 IP+Port 进行访问,再进行数据包转发 。
④一组相关的 Pod 副本,如何实现访问负载均衡?
我们先明确一个概念,Pod 是一个进程,是有生命周期的 。宕机、版本更新,都会创建新的 Pod 。
这时候 IP 地址会发生变化,Hostname 会发生变化,使用 Nginx 做负载均衡就不太合适了 。
所以我们需要依赖 Service 的能力 。
⑤Service 如何实现负载均衡?
简单来说,Service 资源对象包括如下三部分:
- Pod IP:Pod 的 IP 地址 。
- Node IP:物理机 IP 地址 。
- Cluster IP:虚拟 IP,是由 K8s 抽象出的 Service 对象,这个 Service 对象就是一个 VIP 的资源对象 。
具体如下:
- Service 和 Pod 都是一个进程,Service 也不能对外网提供服务 。
- Service 和 Pod 之间可以直接进行通信,它们的通信属于局域网通信 。
- 把请求交给 Service 后,Service 使用 iptable,ipvs 做数据包的分发 。
具体如下:
- 不同的业务有不同的 Service 。
- Service 和 Pod 通过标签选择器进行关联 。
selector: app=x 选择一组订单的服务 pod ,创建一个 service; 通过 endpoints 存放一组 pod ip; Service 通过标签选择器选择一组相关的副本,然后创建一个 Service 。⑧Pod 宕机、发布新的版本的时候,Service 如何发现 Pod 已经发生了变化?
每个 Pod 中都有 Kube-Proxy,监听所有 Pod 。如果发现 Pod 有变化,就动态更新(etcd 中存储)对应的 IP 映射关系 。
关键问题
①企业使用 K8s 主要用来做什么?
有如下三个方面:
- 自动化运维平台,创业型公司,中小型企业,使用 K8s 构建一套自动化运维平台,自动维护服务数量,保持服务永远和预期的数据保持一致性,让服务可以永远提供服务 。这样最直接的好处就是降本增效 。
- 充分利用服务器资源,互联网企业,有很多服务器资源「物理机」,为了充分利用服务器资源,使用 K8s 构建私有云环境,项目运行在云 。这在大型互联网公司尤为重要 。
- 服务的无缝迁移,项目开发中,产品需求不停的迭代,更新产品 。这就意味着项目不停的发布新的版本,而 K8s 可以实现项目从开发到生产无缝迁移 。
Pod 中的容器很可能因为各种原因发生故障而死掉 。Deployment 等 Controller 会通过动态创建和销毁 Pod 来保证应用整体的健壮性 。
换句话说,Pod 是脆弱的,但应用是健壮的 。每个 Pod 都有自己的 IP 地址 。
当 Controller 用新 Pod 替代发生故障的 Pod 时,新 Pod 会分配到新的 IP 地址 。
这样就产生了一个问题:如果一组 Pod 对外提供服务(比如 HTTP),它们的 IP 很有可能发生变化,那么客户端如何找到并访问这个服务呢?
K8s 给出的解决方案是 Service 。Kubernetes Service 从逻辑上代表了一组 Pod,具体是哪些 Pod 则是由 Label 来挑选 。
Service 有自己 IP,而且这个 IP 是不变的 。客户端只需要访问 Service 的 IP,K8s 则负责建立和维护 Service 与 Pod 的映射关系 。
无论后端 Pod 如何变化,对客户端不会有任何影响,因为 Service 没有变 。
③无状态服务一般使用什么方式进行部署?
Deployment 为 Pod 和 ReplicaSet 提供了一个 声明式定义方法,通常被用来部署无状态服务 。
Deployment 的主要作用:定义 Deployment 来创建 Pod 和 ReplicaSet 滚动升级和回滚应用扩容和索容暂停和继续 。
Deployment不仅仅可以滚动更新,而且可以进行回滚,如果发现升级到 V2 版本后,服务不可用,可以迅速回滚到 V1 版本 。
作者:jartto
编辑:陶家龙
征稿:有投稿、寻求报道意向技术人请联络 editor@51cto.com
出处:http://jartto.wang/2020/07/15/start-k8s/
【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】
推荐阅读
- 地球上的外星生物 人类是外星生物吗
- 绿豆南瓜汤可以减肥吗?
- 人类是外星生物吗 人类是外星物种吗
- 炸糯米球要放泡打粉吗?
- 羊奶壮阳吗
- 金丝皇菊原产地是哪里,金丝皇菊有毒吗
- 食用油能当润滑油吗?
- 食用油可以代替黄油吗?
- 喝奶茶会长胖吗,吃奶茶上火吗
- 产妇可以吃基围虾吗?
