K8S介绍
容器与容器编排
首先要了解这两者的概念
1.容器
简单的说:
容器是⼀个“单进程”模型。 对于容器来说,⼀个容器永远只能管理⼀个进程。更确切地说,⼀个容器,就是⼀个进程。
容器,就是未来云计算系统中的进程
容器镜像就是这个系统⾥的“.exe”安装包。
2.容器编排
简单的说:
有很多容器组成了一个集群,需要某种方法把它们关联起来这个关联有一个非常专用、形象的称呼 编排
常见的编排工具
-
docker 官方编排工具
docker-machine // 是docker公司官方提出的,用于在各种平台上快速创建具有docker服务的虚拟机的技术 docker-compose //单机编排工具 docker-swarm //是解决多主机多个容器调度部署问题,还不是很成熟
-
Apache Mesos
开源的分布式资源管理框架,它被称为是分布式系统的内核,底层使用的是marathon编排框架,具体内容等以后分析mesos再说
-
Google Kubernetes
开源的自动化容器操作的平台,操作包括部署,调度和节点集群间扩展等 目前最流行的容器编排工具,市场占有率最高
K8S 介绍
那么 Kubernetes 呢? Kubernetes 就是操作系统!
Kubernetes 允许自动化部署、管理和扩容容器化应用,它现在已成为容器编排的标准。
其实 Kubernetes 的简称 k8s 存在感更强,这个简称缘由是单词中间刚好是 8 个字母,
要记住一句话:容器本身没有价值,有价值的是“容器编排”
k8s能做什么
- 可以动态的对应用进行扩容
- 可以仅仅使用需要的资源(模块化),达到优化硬件的目的
- 可以无缝的发布应用,包括自动发布,自动重启,自动复制....
k8s 优势
- Go语言开发
- 轻量级-消耗资源小
- 开源
- 弹性伸缩
- 负载均衡
K8S架构
网络结构
说明:
Kubernetes 是一个集群,整合多台计算机的计算能力,它是一种有中心节点模式的集群
在 K8S 集群中主机分为两种角色:
Master:集群的管理节点,有一个或者一组节点,一般 3 个足够了。
node:提供计算资源的节点,就是运行容器的节点,可以扩展。
客户端创建启动容器的请求交给 Master ,Master 上有一个调度器它能分析各 nodes 节点上的资源状态,找一个最适合运行用户容器的节点,并在这个节点上使用 Docker 启动这个容器,node 节点的 Docker 在启动容器时候会首先检查本地有没有镜像,如果没有就从仓库中 pull 然后运行。
Master 节点
组件介绍
APISERVER 所有服务访问统一入口, API Server 对外暴露了 k8s API,提供 HTTP REST 服务。提供了认证、授权、访问控制、API 注册和发现等机制
Controller Manager 维持副本期望数目,Controller 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
Scheduler 负责接收任务,选择合适的节点进行分配任务,Scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上
Etcd 分布式键值对数据库,存储K8S集群所有重要数据(持久化),是一个高可用的键值对存储系统,被用作 k8s 的后端存储,所有集群配置数据都存储在里面,用于服务发现和集群管理,可以说是存了整个集群的状态
Node节点
组件介绍
1.主要组件:
Pod: 在 k8s 里面最小的部署单元不是容器而是 Pod,所以将dockfile 需要「转化」成 Pod 对象,再交由 k8s 创建Kubelet: 直接跟容器引擎交互实现容器的生命周期管理,它和 Master 节点协作,实现 Pod 的创建、启动、监控、重启、销毁等集群管理工作
Kube-Proxy:负责写入规则至Iptables, IPVS(IP Virtual Server) 实现服务映射访问的,维护主机上的网络规则并执行连接转发,实现服务的负载均衡和反向代理
Docker。负责用于运行容器 (或者说 Pod)
fluentd。fluentd 是一个守护进程,它有助于提供集群层面日志 集群层面的日志
2.其他组件:
CoreDNS:可以为集群中的SVC创建一个域名P的对应关系解析Dashboard:给K8S提供一个B/S结构的访问体系
Ingress Controller: 官方只能实现四层代理,Ingress可以实现七层代理
Federation: 提供一个可以跨集群中心多K8S统一管理功能
Prometheus:提供一个K8S集群的监控能力
ELK: 提供K8S集群日志统一分析介入平台
后面的章节会逐一介绍这些组件的功能....