docker-k8s理论
Kubernetes(k8s)
- 是一个基于docker对容器进行编排的引擎,包括了安装部署,应用管理,网络,存储监控,日志管理等多个方面
- k8s的核心功能:应用部署,访问 scale up/down(伸缩) 以及滚动更新
概念
这几个组成k8s
Cluster
Cluster(集群)是计算,存储和网络资源的集合,kubernetes利用这些资源运行各种基于容器的应用
Cluster可以只有一台主机(这一台主机既是master也是node)
Master
master是cluster的大脑,它的主要职责就是调度(决定应用放在那里运行)
master运行linux操作系统,可以是物理机或者虚拟机
最多为7个 和swarm相同
node
node的职责是运行容器应用
node是由master管理 node负责监控并汇报容器的状态,并根据master的要求管理容器的声明周期
尽量控制Node的数量在两个或者两个以上
Pod
- pod是kubernetes的最小工作单元
- 每个pod包含一个或多个容器,pod中的容器会作为,一个整体被master调度到一个node中
- 相当于swarm的service
controller控制器
k8s通常不回直接创建pod,而是通过controller来管理pod的
controller中定义了pod的部署特性,(几个副本,在哪一台node运行等)
k8s提供了多种controller,包括Deployment ReplicaSet DaemonSet StatefuleSet Job等
Deployment(部署调度)
- deployment是最常用的 controller,比如我们可通过创建Deployment来部署应用
- Deployment可以管理Pod的多个副本,并保证Pod按照期望的状态运行
- 也就是当集群中的一台主机故障后,不回减少副本的数量,会调度其他的主机来运行响应的副本,保证期望值
DaemonSet
- DaemonSet 用于每个Node最多运行一个Pod的副本场景,
- DaemonSet通常银杏果 daemon 类似swarm集群的global模式运行service
- 就是每台node节点上会运行一个pod ,做监控时可以用次模式
StatefuleSet
- StatefuleSet能够保证Pod的每个副本在整个生命周期中名称是不变的,而其他controller不提供这个功能
- 当某个Pod发生故障需要删除并且重新启动时,Pod的名称会发生变化,同时StatefuleSet会保证副本按照固定的顺序启动,更新或者删除
job
- job用于运行结束就删除的应用,而其他Controller中的Pod通常是长期持续运行的,也可以理解为docker run –rm
- 在对容器的备份和还原可以使用此模式
Cronjob
- Cronjob是Kubernetes提供的定时任务功能,CronJob可以根据你指定的cron策略来完成任务。
Service
k8s中的pod和swarm集群中的service功能相似,但是k8s的service和swarm的service是不同的
这里的service是用来被外部访问Pod时使用的(外网访问pod)
pod可能会频繁销毁和重启,ip会发生变化,所以不能用ip来访问
但是service定义了外界访问一组特定的pod方式,service有自己的ip 和端口 service为pod提供了负载均衡,
k8s运行容器(pod)与访问容器分别交给了controller 和service执行
namespace
- k8s的隔离通过 命名空间来隔离的
- Namespace 可以将一个物理的 Cluster 逻辑上划分成多个虚拟 Cluster,每个 Cluster 就是一个 Namespace。不同 Namespace 里的资源是完全隔离的
- k8s创建4个namespace
default:创建资源时如果不指定,将被放到这个 Namespace 中。
kube-system:Kubernetes 自己创建的系统资源将放到这个 Namespace 中。
kube-pubulic:对外的公开的,放到这个Namespace中
kube-node-lease:node节点的周期 - 执行kubectl get namespaces可以查看namespace
k8s框架结构
api server
提供 httpd协议,是kubernetes cluster的前端接口,各种客户端工具(CLI 或 UI)以及 Kubernetes 其他组件可以通过它管理 Cluster 的各种资源。
scheduler
Scheduler 负责决定将 Pod 放在哪个 Node 上运行。Scheduler 在调度时会充分考虑 Cluster 的拓扑结构,当前各个节点的负载,以及应用对高可用、性能、数据亲和性的需求。
conteroller manager
Controller Manager 负责管理 Cluster 各种资源,保证资源处于预期的状态。Controller Manager 由多种 controller 组成,
etcd
etcd 负责保存 Kubernetes Cluster 的配置信息和各种资源的状态信息。当数据发生变化时,etcd 会快速地通知 Kubernetes 相关组件。
flannel
k8s通过flannel来进行通讯的
kubelet
是node中的节点
当master节点中的 scheduler组件确定在哪一台node上运行pod后,会将pod的具体配置信息(image、volume 等)发送给该kubelet,kubelet 根据这些信息创建和运行容器,并向 Master 报告运行状态。
kube-proxy
proxy主要负责将service的tcp和udp数据流转发到后端的容器,如果有多个副本kube-proxy就会实现负载均衡
kube-porxy是完成service的任务的
也就是说master通过 apiserver发送指令 交给 Controller manager 来管理资源,通过scheduler 选择在那台node节点上运行pod,决定好后,就把配置信息交给那台node ,node节点接收到任务后,通过kubelet创建副本,如果对外服务,就通过kube-proxy来提供服务
本博客所有文章是以学习为目的,如果有不对的地方可以一起交流沟通共同学习 邮箱:1248287831@qq.com!