容器化部
从虚拟化的角度看容器化部署:
在隔离级别上有很大的区别。虚拟化是在主机上安装多个虚拟机,每个虚拟机之间的所有硬件资源都是相互隔离的,意味着每个虚拟机都有完全独立的操作系统、系统内核。
相比之下,容器化的隔离级别就相对较低,容器之间虽然使用的相同的系统内核,但网络、文件系统、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也支持其他一些容器
组件之间的调用关系
- 当kubernetes启动后,相关资源配置会被加载到etcd中
- 当一个nginx服务的创建请求被发送的apiserver,apiserver会向scheduler询问创建的最佳node。此时,它会从etcd中读取信息进行判断
- 收到scheduler的返回后,通知controllermanager去调度nginx的安装
- kubelet收到指令,通知docker,然后由docker启动一个nginx的pod
- 如果需要访问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>
服务类型:
- ClusterIP是默认类型,创建仅在集群内可访问的虚拟地址
- NodePort节点上的固定端口 可以负载均衡
- LoadBalancer 可以负载均衡
- ExternalName
kubernetes之持久化存储
k8s的服务访问
资源
上一篇:Godot
下一篇:python 入门到入土