linux12k8s --> 02理论介绍,架构图
Posted FikL-09-19
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux12k8s --> 02理论介绍,架构图相关的知识,希望对你有一定的参考价值。
文章目录
一、Kubernetes 入门
kubernetes
k8s和docker之间的关系?
docker是一个容器,k8s是一个容器化管理平台
Kubernetes是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes拥有一个庞大且快速增长的生态系统。Kubernetes的服务、支持和工具广泛可用。
# Kubernetes是一个可移植的、可扩展的开源平台,分布式系统,具有完备的集群管理能力,容器化管理平台
二、Kubernetes简介
Kubernetes是一个全新的基于容器技术的分布式领先方案。简称:k8s。
它是Google开源的容器集群管理系统,它的设计灵感来自于Google内部的一个叫做Borg的容器管理系统。继承了Google十余年的容器集群使用经验,它为容器化的应用提供了`部署运行、资源调度、服务发现和动态伸缩`等一系列完整功能,极大的提高了大规模容器集群管理的便捷性。
Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、`强大的故障发现和自我修复能力`、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。
# A容器断电down机,开机后k8s会自动修复让A容器加载道集群!
在集群管理方面,Kubernetes将集群中的机器划分为一个 Master 节点和一群工作节点 Node,其中,在 Master节点运行着集群管理相关的一组进程 kube-apiserver、kube-controller-manager 和 kube-scheduler,这些进程实现了整个集群的资源管理、Pod 调度、弹性伸缩、安全控制、系统监控和纠错等管理能力,并且都是全自动完成的。Node 作为集群中的工作节点,运行真正的应用程序,在 Node 上 Kubernetes 管理的最小运行单元是 Pod。Node 上运行着 Kubernetes 的kubelet、kube-proxy 服务进程,这些服务进程负责 Pod 的创建、启动、监控、重启、销毁以及实现软件模式的负载均衡器。
在 Kubernetes 集群中,它解决了传统 IT 系统中服务扩容和升级的两大难题。如果今天的软件并不是特别复杂并且需要承载的峰值流量不是特别多,那么后端项目的部署其实也只需要在虚拟机上安装一些简单的依赖,将需要部署的项目编译后运行就可以了。但是随着软件变得越来越复杂,一个完整的后端服务不再是单体服务,而是由多个职责和功能不同的服务组成,服务之间复杂的拓扑关系以及单机已经无法满足的性能需求使得软件的部署和运维工作变得非常复杂,这也就使得部署和运维大型集群变成了非常迫切的需求。
Kubernetes 的出现不仅主宰了容器编排的市场,更改变了过去的运维方式,不仅将开发与运维之间边界变得更加模糊,而且让 DevOps 这一角色变得更加清晰,每一个软件工程师都可以通过 Kubernetes 来定义服务之间的拓扑关系、线上的节点个数、资源使用量并且能够快速实现水平扩容、蓝绿部署等在过去复杂的运维操作
1、k8s概述
# 1、k8s是谷歌2014年开业的容器化集群管理系统
# 2、K8s进行容器化应用部署
# 3、k8s利于应用扩展
# 4、k8s目标实施让部署容器化应用更加简洁和高效
2、k8s特点
# (1)自动装箱
基于容器对应用运行环境的资源配置要求自动部署应用容器
# (2)自我修复(自愈能力)
当容器失败时,会对容器进行重启 当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度
当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务
# (3)水平扩展
通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大 或规模剪裁
# (3)服务发现
用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现和 负载均衡
# (4)滚动更新
可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新
# (5)版本回退
可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退
# (6)密钥和配置管理
在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。
# (7)存储编排
自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要 存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务
# (8)批处理
提供一次性任务,定时任务;满足批量数据处理和分析的场景
三、架构
Kubernetes 遵循非常传统的客户端服务端架构,客户端通过 RESTful 接口或者直接使用 kubectl 与Kubernetes 集群进行通信,这两者在实际上并没有太多的区别,后者也只是对 Kubernetes 提供的 RESTfulAPI 进行封装并提供出来。
每一个 Kubernetes 集群都由一组 Master 节点和一系列的 Worker 节点组成,其中 Master 节点主要负责存储集群的状态并为 Kubernetes 对象分配和调度资源。
1.Master(主要用来管理集群)
它主要负责接受客户端的请求,安排容器的执行并且运行控制循环,将集群的状态向目标状态进行迁移,Master节点内部由7个组件构成:
# 1.API Server(kube-apiserver :中央管理器,调度管理集群)
负责处理来自用户的请求,其主要作用就是对外提供RESTful的接口
包括用于查看集群状态的读请求以及改变集群状态的写请求,也是唯一一个于etcd集群通信的组件。
# 2.Controller(kube-controller-manager :控制器: 管理容器,监控容器)
管理器运行了一系列的控制器进程,这些进程会按照用户的期望状态在后台不断地调节整个集群中的对象
当服务的状态发生改变,控制器就会发现这个改变并且开始向目标状态迁移。
# 3.Scheduler(kube-scheduler:调度器:调度容器)
调度器其实为kubernetes中运行的Pod选择部署的Worker节点
它会根据用户的需要选择最能满足请求的节点来运行Pod,它会在每次需要调度Pod时执行。
# 4.Flannel(提供集群间网络)
# 5.Etcd(数据库)
# 6.kubelet(部署容器,监控容器)
# 7.kube-proxy(提供容器间的网络)
2.Node(主要用来部署应用)
# 1.kubelet(部署容器,监控容器)
kubelet是一个节点上的主要服务,他周期性的从APIServer接受新的或者修改的pod规范并且保证节点上的pod和其容器的正常运行
还会保证节点会向目标状态迁移,该节点仍然会向Master节点发送宿主机的健康状态。
# 2.kube-proxy(提供容器间的网络)
负责宿主机的子网管理,同时也能将服务暴露给外部
其原理就是在多个隔离的网络中把请求转发给正确的Pod或者容器。
3.Kubernetes架构图
在架构图中,我们把服务分为运行在工作节点上的服务和组成在集群级别控制板的服务
Kubernetes主要由以下几个核心组件组成:
1. etcd保存整个集群的状态
2. apiserver提供了资源的唯一入口,并提供认证、授权、访问控制、API注册和发现等
3. controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
4. scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
5. kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
6. Container runtime负责镜像的管理以及Pod和容器的真正运行(CRI)
7. kube-poxy负责为Service提供cluster内部的服务发现和负载均衡
除了核心组件,还有一些推荐的组件:
8. kube-dns负责为整个集群提供DNS服务
9. Ingress Controller 为服务提供外网入口
10. Heapster提供资源监控
11. Dashboard提供GUIFederation提供跨可用区的集群
12. Fluentd-elasticsearch提供集群日志采集,存储与查询
4、k8s核心
# 1、Pod
1、最小部署单元
2、一组容器的集合
3、共享网络
4、生命周期是短暂的
# 2、controller
1、确保预期的pod副本数量
1)无状态的应用部署 ---》随便用
2)有状态的应用部署 --》 特定状态才可以用
2、确保所有的node运行同一个Pod
3、一次性任务和定时任务
# 3、Service
1、定义一组pod的访问规则
以上是关于linux12k8s --> 02理论介绍,架构图的主要内容,如果未能解决你的问题,请参考以下文章
linux12k8s --> 04命令行优化Pod介绍label标签控制器
linux12k8s -->09StatefluSet控制器
linux12k8s -->10搭建wordpess+ discuz