容器
是一种计算单元,
线程->进程->容器->虚拟机->物理机
隔离性
安全性
docker
是一个非常成功的容器管理平台,docker重要的部分就是它运行管理环境
docker可以管理容器的整个生命周期
容器的典型应用可以分为两类 一类是微服务 一类是DevOps
镜像本身会有版本发布,升级需求,涉及到docker的另一个重要组成部分DockerHub,例如 harbor
微服务
是指系统的不同单元或功能运行不同的容器,每一个服务的容器数量可以根据自己的负载进行调整。
devops
是指开发者、测试、生产过程的流水线化。
因为容器自包含的特性,当它作为标准的流通产品,可以使开发环境、测试环境和生产环境的应用包装完全一致,这样就减少了由于依赖关系配置错误等导致的意外,从而使得开发、测试、生产的整个流水线变得更高效。
Pod
是一种增强型容器,组合多个容器的运行单元 也是 kubernetes里的一个基础单元
pod 包括一个主容器和数个辅助容器。共同完成一个特定的功能。
把多个容器打包在一个name space 里的时候,就构成了一个Pod
K8s
Kubernetes(K8s)是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。
K8s拥有一个庞大且快速增长的生态系统。
K8s 的服务、支持和工具广泛可用。
云就是使用容器构建的一套服务器群网络,云由很多的大量容器构成。K8s就是用来管理云中的容器。
未来服务开发都是 Serverless,企业都构建了自己的私有云环境,或者是使用公有云环境。
让应用程序(项目,服务软件)都运行在云上的解决方案,叫云原生。
云原生有如下特点:
容器化
微服务
CI/CD
DevOps
K8s 架构 就是一个Master对应一群 Node 节点。
Master
apiserver k8s的网关,所有的指令请求都必须要经过apiserver
scheduler 调度器,使用调度算法,把请求资源调度到某一个Node节点
controller 控制其,维护K8s的资源对象
etcd 存储资源对象
node
kubelet 在每一个Node节点都存在一份,在Node节点上的资源操作指令由kubelet来执行
kube_proxy 代理服务,处理服务间的负载均衡
Pods 是 K8s管理的基本单元(最小单元) Pod内部是容器,K8s不直接管理容器,而是管理Pod
Docker 运行容器的基础环境,容器引擎
Fluentd 日志收集服务
Pod
是一个容器,装的是Docker创建的容器,Pod用来封装容器的一个容器,Pod是一个虚拟化分组
Pod 相当于独立主机,可以封装一个或者多个容器
Pod 有自己的IP地址,主机名,相当于一台独立沙箱环境
在服务部署时候,Pod来管理一组相关的服务。一个Pod中要么部署一个服务,要么部署一组相关的服务。
Pod容器创建之前,必须先创建Pause容器
Pause 容器,K8s中的万能钥匙
kubernetes中,用pause容器来作为一个pod中所有容器的父容器。
两个核心的功能,第一,它提供整个pod的Linux命名空间的基础。第二,启用PID命名空间,它在每个pod中都作为PID为1进程,并回收僵尸进程。
ReplicaSet 副本控制器
控制 Pod 副本「服务集群」的数量,永远与预期设定的数量保持一致即可。当有 Pod 服务宕机时候,副本控制器将会立马重新创建一个新的 Pod,永远保证副本为设置数量。
新版的 K8s 中,建议使用 ReplicaSet 作为副本控制器,ReplicationController 不再使用了。
Deployment 部署对象
服务部署结构模型
滚动更新
项目需求不断迭代,不断更新,项目版本将不停的发版
ReplicaSet 不支持滚动更新,Deployment 对象支持滚动更新,通常和 ReplicaSet 一起使用;Deployment 管理 ReplicaSet,RS 重新建立新的 RS,创建新的 Pod。
StatefulSet
MySQL 使用容器化部署,存在什么样的问题?
容器有生命周期,一旦当机,数据丢失
Pod部署,Pod有生命周期,数据丢失
对于 K8s 来说,不能使用 Deployment 部署有状态服务。
有状态服务:
有实时的数据需要存储
有状态服务集群中,把某一个服务抽离出去,一段时间后再加入机器网络,集群网络无法使用
无状态服务:
没有实时的数据需要存储
无状态服务集群中,把某一个服务抽离出去,一段时间后再加入机器网络,对集群服务没有任何影响
StatefulSet 部署有状态服务,解决有状态服务使用容器化部署的一个问题。
K8s 的服务注册与发现
pod 相当于一个容器,有独立的IP地址,有自己的Hostname,利用Namespace进行资源隔离,独立沙箱环境。
pod 内部封装的是容器,可以封装一个,或者多个容器(通常是一组相关的容器)
Pod网络
Pod 有自己独立的 IP 地址
Pod 内部容器之间访问采用 Localhost 访问
Pod 之间的通信属于远程访问
Pod如何对外提供服务访问
Pod 是虚拟的资源对象(进程),没有对应实体(物理机,物理网卡)与之对应,无法直接对外提供服务访问。
Pod 是一个进程,是有生命周期的
Service 资源对象:
Pod IP:Pod 的 IP 地址
Node IP:物理机 IP 地址
Cluster IP:虚拟 IP ,是由 K8s 抽象出的 Service 对象,这个 Service 对象就是一个 VIP 的资源对象
Service VIP 更深入原理探讨:
Service 和 Pod 都是一个进程,Service 也不能对外网提供服务;
Service 和 Pod 之间可以直接进行通信,它们的通信属于局域网通信;
把请求交给 Service 后,Service 使用 iptable,ipvs 做数据包的分发。
Service 对象是如何和 Pod 进行关联
Service 通过标签选择器选择一组相关的副本,然后创建一个 Service。
Pod 宕机、发布新的版本的时候,Service 如何发现 Pod 已经发生了变化?
每个 Pod 中都有 Kube-Proxy,监听所有 Pod。如果发现 Pod 有变化,就动态更新(etcd 中存储)对应的 IP 映射关系。
K8s用途
自动化运维平台,创业型公司,中小型企业,使用 K8s 构建一套自动化运维平台,自动维护服务数量,保持服务永远和预期的数据保持一致性,让服务可以永远提供服务。这样最直接的好处就是降本增效。
评论 (0)