容器化部

从虚拟化的角度看容器化部署:

在隔离级别上有很大的区别。虚拟化是在主机上安装多个虚拟机,每个虚拟机之间的所有硬件资源都是相互隔离的,意味着每个虚拟机都有完全独立的操作系统、系统内核。

相比之下,容器化的隔离级别就相对较低,容器之间虽然使用的相同的系统内核,但网络、文件系统、CPU、进程空间、内存等是隔离的。所以容器之间仍然能够独立运行。

容器化部署面临的挑战:
  • 一个容器故障停机,如何让另一个容器快速启动去替补停机的容器
  • 并发量大的时候,如何横向扩展容器的数量
  • 容器之间通信的网络管理科

这些容器管理的问题被称为容器编排的问题,为了解决这些问题,就产生了一系列容器编排软件,kubernetes就是其中之一。

初识Kubernetes

Kubernetes又称k8s,是由谷歌开发的容器编排工具。

Kubernetes的组件

kubernetes由两种节点构成分别是控制节点和工作节点

控制节点master构成控制平面,负责集群的管理

  • ApiServer 通过api接收管理员的所有操作,并将请求转发给其他组件
  • scheduler 负责在pod创建时选择合适的节点进行创建
  • controllermanager 通过ApiServer提供的接口实时监控集群中的资源对象,发生故障时controller会尝试调整状态到期望状态
  • etcd 一个分布式储存键值对的数据库,储存集群的状态、配置

工作节点node构成数据平面,负责为集群干活

  • kubelet 接收apiserver的请求,通过控制docker,维护容器的生命周期
  • kubeproxy 为集群中的service提供负载均衡支持。运行在每个节点上,维护集群service的网络规则。
  • docker 真正干活的家伙,负责管理和执行容器化应用程序。除了它,k8s也支持其他一些容器
组件之间的调用关系
  1. 当kubernetes启动后,相关资源配置会被加载到etcd中
  2. 当一个nginx服务的创建请求被发送的apiserver,apiserver会向scheduler询问创建的最佳node。此时,它会从etcd中读取信息进行判断
  3. 收到scheduler的返回后,通知controllermanager去调度nginx的安装
  4. kubelet收到指令,通知docker,然后由docker启动一个nginx的pod
  5. 如果需要访问nginx,就需要通过kubeproxy对pod访问进行代理
kubernetes中的概念

先一股脑罗列一下,之后会详细解释:master、node、pod、controller、service、label、namespace

kubernetes之服务发现
一旦服务对象创建成功,您可以使用服务名称来连接到服务。服务名称遵循DNS命名约定,通常是<font style="color:rgb(13, 13, 13);"><service-name>.<namespace>.svc.cluster.local</font> 服务类型:
  1. ClusterIP是默认类型,创建仅在集群内可访问的虚拟地址
  2. NodePort节点上的固定端口 可以负载均衡
  3. LoadBalancer 可以负载均衡
  4. ExternalName
kubernetes之持久化存储
k8s的服务访问

资源

Jimmy Song’s Cloud Native Blog

K8S-持久化存储及常用存储方案_kubernetes怎么配置存储-CSDN博客