共计 4543 个字符,预计需要花费 12 分钟才能阅读完成。
这期内容当中丸趣 TV 小编将会给大家带来有关如何理解 kubernetes 的基本知识,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
kubernetes 基本介绍
一、kubernetes 是什么?
Kubernetes 是一个开源的容器管理平台,简称 k8s,用于管理多个主机上的容器化应用程序,提供应用程序的快速部署,扩缩容,升级,维护和扩展等机制,利用 service 可以实现服务注册、发现以及四层负载均衡,通过 ingress 可以实现七层负载均衡等功能,Kubernetes 这个名字源于希腊语,意思是舵手或飞行员,谷歌在 2014 年开放了 Kubernetes 项目,Kubernetes 建立在谷歌拥有大量运行生产工作量的十五年经验的基础上,结合了社区中的最佳创意和实践,社区活跃度极高,幕后拥有大量技术人员在维护和支持。
二、kubernetes 容器编排工具的优势
1. 用户体验效果好,可以快速上手操作:
拥有良好的 web ui 界面,可以实现应用程序的快速部署,升级,扩容,缩容,回滚等。
2. 根据节点资源的使用情况对 pod 进行合理的调度:
可以按照用户需要调度 pod,例如保证 Pod 只在资源足够的节点上运行,会尝试把同一功能的 pod 分散在不同的节点上,还会尝试平衡不同节点的资源使用率等。
3. 灵活部署:
支持多种平台,如公有云、私有云、混合云,VMware vSphere、VMware Workstation、虚拟机、物理机等。
4. 完善的认证授权机制,自带审计功能:
可以对多用户做细化的授权管理,达到相互之间的操作完全隔离,互不影响,而且自身带有审计功能,可以对操作过程进行实时的日志记录,出现问题可以方便排查。
5. 可扩展性强:
拥有强大的集群扩展能力,可以根据业务规模自动增加和缩减主机节点的数量,确保服务可以承受大量并发带来的压力,保证业务稳定运行。
6. 拥有完善的灾备预警解决方案:
拥有多种灾备解决方案,支持备份和容灾,出现故障可以达到秒级切换,保证线上业务不受影响。
7. 支持 windows 节点:
kubernetes 支持将 windows 节点添加为工作节点并部署 windows 容器,确保不再受到具体的操作系统类型的影响,提升整体部署的效率。
三、应用场景实践
1.kubernetes 在日志管理系统中的应用
在生产环境中,日志对于排查问题至关重要,我们需要有一个日志管理系统,如 efk,kubernetes 可以实现 efk 的快速部署,通过采用 daemonset 控制器部署 fluentd 组件,来收集节点和 k8s 集群的日志,通过 kubernetes 部署 efk 日志管理系统可实现如下功能:
(1)如果集群扩容,那么 daemonset 控制器会自动检测到新增加的 node 节点,就会在新的 node 节点上部署 fluentd,完成日志收集,这就可以减少人为干预,提高工作效率,确保日志可以被正常收集;(2)如果 es 数据量大,kubernetes 可以实现集群中 pod 应用的水平扩展,完成应用的弹性扩容和收缩等操作。
2.kubernetes 在 DevOps 场景下的应用:
DevOps 是一套完整的运维开发流程,可以实现快速的构建、测试和发布软件,整个流程包括敏捷开发 - 持续集成 - 持续交付 - 持续部署 - DevOps,通过 Kubernetes,我们可以实现容器在多个计算节点上的统一调度,可以将容器对接到持久存储、虚拟网络,还可以实现弹性伸缩等,提高了产品的迭代速度,在 DevOps 体系下加入 k8s 可以实现如下功能:
(1)多集群管理:可以根据客户需求对开发,测试,生产环境部署多套 kubernetes 集群,每个环境使用独立的物理资源,相互之间避免影响;(2)多环境一致性:Kubernetes 是基于 docker 的容器编排工具,因为容器的镜像是不可变的,所以镜像把 OS、业务代码、运行环境、程序库、目录结构都包含在内,镜像保存在我们的私有仓库,只要用户从我们提供的私有仓库拉取镜像,就能保证环境的一致性;(3)持续集成,持续部署,持续交付:可以让产品快速迭代,自动部署,根据客户的要求达到持续交付的能力。
3.kubernetes 在微服务中的应用
service Mesh 可以很好地保证未拆分的应用与已经拆分出来的微服务之间的互通和统一治理,不将业务代码与任何框架,平台或者服务绑定,管理微服务时,我们需要对这些微服务和它们的调用关系进行注册、为其分配资源、创建一定数量的节点副本、并发布到集群中去;同时还要为其配置好网络和负载均衡,使这些微服务能够被外部访问,在这些微服务的运行过程中,需要始终保持其可用性,一旦有节点出现问题,需要立即创建新的节点将其替换掉,运行过程中需要对这些微服务进行监控和日志收集;在负载发生变化的时候,还要能够迅速调整资源分配,kubernetes 在微服务中可实现如下功能:
(1)服务发现:通过 service 可以实现服务发现,负载均衡,自修复,自动关联;(2)提供统一的配置管理中心:对于配置中心,K8S 提供了 configMap,可以在容器启动的时候,将配置注入到环境变量或者 Volume 里面;(3)弹性伸缩:通过控制器创建指定数量的 pod 副本,通过 hpa 可以实现 pod 应用的水平扩容和回收;(4)通过 jenkins 实现持续集成 / 持续部署(5)自动扩展: 当 Kubernetes 集群的资源严重不足而导致 Job 排队等待时,可以很容易的添加一个 Kubernetes Node 到集群中,从而实现扩展。
四、kubernetes 特点
1. 可移植:
支持公有云,私有云,混合云,多重云(multi-cloud)
2. 可扩展:
模块化, 插件化, 可挂载, 可组合
3. 自愈:
自动布置,自动重启,自动复制,自动扩展。
五、kubernetes 功能详细介绍
1. 多租户的网络隔离:
Kubernetes 支持多种网络插件,如 flannel,calico,canel 等,每个插件都有独特的性能,可以分别适用于多种场景,我们可以利用 calico 的 network policy(网络策略)解决 k8s 中的网络隔离,对于多租户场景,可以每一个用户一个名称空间,然后对这个名称空间设置网络隔离。
2. 高可用:
kubernetes 中支持多种高可用解决方案,如 keepalive+nginx,keepalived+haproxy 等,可以使访问流量分发到不同的主机节点,减轻节点压力,如果某个节点出现故障,可以实现妙级切换,达到高可用,保证业务不中断;
3. 用户数据的持久化存储:
kubernetes 支持多种持久化存储解决方案,保证数据可以得到很好的备份,降低用户数据丢失的风险,kubernetes 中可使用的存储方案如下:
(1)本地存储 emptyDir,hostPath(2)网络连接类存储 SAN/ 网络附加存储:iSCSINAS/ 存储局域网络:nfs,cifs(3)分布式存储 glusterfs,ceph/ 块级别的存储,cephfs/ 文件系统级别的存储(4)云存储:Azure Disk 等
4. 拥有多种更新回滚策略
通过管理 kubernetes 的控制器和 service 等,可以实现灰度发布,蓝绿部署,金丝雀发布等,达到业务的快速和回滚等操作,用以满足不同客户的不同升级需求。
5. 弹性伸缩
根据访问的流量压力,可以实现 pod 的水平扩容和缩减,达到秒级扩容,让 pod 始终处于满足业务正常运行时所需的数量即可,避免了资源的浪费。
6. Kubernetes 可以满足很多运行环境中应用的需求,如下:
进程协同,利用复合应用保证应用和容器一对一的模型存储系统挂载分发密钥应用健康检测应用实例复制水平自动扩展命名和发现负载均衡滚动更新资源监控日志访问自检和调试识别和认证这为 PaaS 提供了 IaaS 层的便利,提供了基础设施提供者间的可移植性。
六、kubernetes 架构
kubernetes 的物理架构是 master/node 模式,master 一般是三个节点或者五个节点做高可用,根据集群规模来定,master 高可用指的是对 apiserver 做高可用或者对 master 的物理节点做高可用,node 可以有多个节点,专门用来部署应用的,架构图如下所示:
七、kubernetes 核心组件
1.master 节点组件
apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制,负责接收、解析、处理请求。
scheduler:调度器,负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上。
kube-controller-manager:控制器,负责维护集群的状态,检查 pod 的健康状态,比如故障检测、自动扩展、滚动更新等一些操作。
docker:是一个容器引擎,用于运行容器。
etcd:etcd 是一个 key/value 形式的键值存储,保存了整个 kubernetes 集群的状态,在 kubernetes 中使用 etcd 时,需要对 etcd 做备份,保证高可用,整个 kubernetes 系统中一共有两个服务需要用到 etcd 用来协同和存储配置,分别是:
(1)网络插件 calico、对于其它网络插件也需要用到 etcd 存储网络的配置信息;
(2)kubernetes 本身,包括各种对象的状态和元信息配置。
注:关于 etcd API 版本的说明
网络插件操作 etcd 使用的是 v2 的 API,而 kubernetes 操作 etcd 使用的 v3 的 API,所以在下面我们执行 etcdctl 的时候需要设置 ETCDCTL_API 环境变量,该变量默认值为 2,表示使用 v2 版本的 api,v3 表示使用 v3 版本的 api。
2.node 节点(工作节点)组件
kubelet:负责与 master 节点的 apiserver 进行通信的,接收到客户的请求,进行创建 Pod,管理 Pod,启动 pod 等相关操作。
kube-proxy:k8s 代理,是在群集中的每个节点上运行的网络代理,kube-proxy 负责请求转发,一旦发现了某一个 Service 关联的 Pod 信息发生了改变(如 IP、Port 等),由 Kube-Proxy 就会把变化后的 service 转换成 IPVS 或 IPtables 规则中,完成对后端 pod 的负载均衡。
docker:是一个容器引擎,用于运行容器。
3. 附加组件
coredns:k8s1.11 之前使用的是 kubedns,1.11 之后才有 coredns,coredns 是一个 DNS 服务器,能够为 Kubernetes services 提供 DNS 记录
dashboard:k8s 的 web 界面,通过这个界面可以对 k8s 资源进行操作
Ingress Controller:七层负载均衡控制器,可以创建 nginx 或者 traefik 这种七层负载应用,实现域名和 https 访问
prometheus+alertmanager+grafana:监控组件
efk:日志采集组件
上述就是丸趣 TV 小编为大家分享的如何理解 kubernetes 的基本知识了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注丸趣 TV 行业资讯频道。