k8s--基础--01--介绍

时间:2024-11-12 07:49:58

k8s–基础–01–介绍


1、kubernetes是什么?

  1. Kubernetes是一个可移植、可扩展的、开源的容器管理平台
  2. 简称k8s
  3. 可用于管理多个主机上的容器化应用程序。
  4. 提供了应用程序的快速部署,维护,扩缩容,升级和回滚的能力
  5. 通过service可以实现服务注册、服务发现和四层负载均衡
  6. 通过cordns可实现域名解析
  7. 通过ingress可以实现七层负载均衡。

2、k8s 优势

2.1、灵活部署

kubernetes支持在多种平台部署,可在私有云,公有云,混合云,openstack、openshift、VMware vSphere,VMware Workstation,虚拟机,物理机等环境部署。

2.2、安全高效,拥有完善的认证授权机制,自带审计功能

  1. 可以对多用户做细化的授权管理(如rbac授权),达到相互之间的操作完全隔离,互不影响
  2. 自身带有审计功能
  3. 可以对操作过程进行实时的日志记录,出现问题可以方便排查

2.3、负载均衡

  1. 支持四层负载均衡
  2. 支持七层负载均衡

2.4、可扩展性强

拥有强大的集群扩展能力,可以根据业务规模自动增加和缩减主机节点的数量,确保服务可以承受大量并发带来的压力,保证业务稳定运行。

2.5、根据节点资源的使用情况对pod进行合理的调度

可以按照用户需要调度pod,例如保证Pod只在资源足够的节点上运行,会尝试把同一功能的pod分散在不同的节点上,还会尝试平衡不同节点的资源使用率等。

2.6、拥有完善的灾备预警方案

拥有多种灾备解决方案,支持备份和容灾,出现故障可以达到秒级切换,保证线上业务不受影响;

3、k8s 功能

3.1、多租户网络隔离

  1. 支持多种网络插件,如flannel,calico,canel等,每个插件都有独特的性能,可以分别适用于多种场景
  2. 我们可以利用calico的network policy(网络策略)解决k8s中的网络隔离,对于多租户场景,可以每一个用户一个名称空间(namespace),然后对这个名称空间设置网络隔离

3.2、高可用,高可扩展性

支持多种高可用解决方案,如keepalive+nginx,keepalived+haproxy等,可以使访问流量分发到不同的主机节点,减轻节点压力,如果某个节点出现故障,可以实现妙级切换,达到高可用,保证业务不中断。

3.3、用户数据的持久化存储

支持多种持久化存储解决方案,保证数据可以得到很好的备份,降低用户数据丢失的风险,kubernetes中可使用的存储方案如下:

1. 本地存储:emptyDir,hostPath
2. 网络连接类存储:
	1. SAN(存储局域网络):iSCSI
	2. NAS(网络附加存储):nfs,cifs
3. 分布式存储:glusterfs,ceph-块级别的存储,cephfs-文件系统级别的存储
4. 云存储:Azure Disk等

3.4、拥有多种更新回滚策略

通过管理kubernetes的控制器和service等,可以实现灰度发布,蓝绿部署,金丝雀发布等,达到业务的快速部署和回滚等操作,用以满足不同客户的不同升级需求。

3.5、弹性伸缩

根据访问的流量压力,可以实现pod的水平扩容和缩减,达到秒级扩容,让pod始终处于满足业务正常运行时所需的数量即可,避免了资源的浪费。

3.6、节省资源,优化硬件资源的使用

根据流量进行业务组件的扩缩容,可节省机器资源。

4、k8s 应用场景

4.1、部署高效的日志管理系统(efk)

4.1.1、实现efk的快速部署和使用。

  1. 通过statefulset控制器部署elasticsearch组件,用来存储日志数据
  2. 通过动态volumeclaimtemplate动态生成pv实现es数据的持久化存储
  3. 通过deployment部署kibana组件,实现日志的可视化管理
  4. 通过daemonset控制器部署fluentd组件,来收集节点和k8s集群的日志。

4.1.2、部署efk可实现如下功能:

  1. 如果集群扩容,那么daemonset控制器会自动检测到新增加的node节点,就会在新的node节点上部署fluentd,完成日志收集,这就可以减少人为干预,提高工作效率,确保日志可以被正常收集。
  2. 如果es数据量大,kubernetes可以实现集群中pod应用的水平扩展,完成应用的弹性扩容和收缩等操作。

4.2、在DevOps场景下的应用

DevOps是一套完整的运维开发流程,可以实现快速的构建、测试和发布软件,整个流程包括敏捷开发->持续集成->持续交付->持续部署->DevOps。

通过 Kubernetes,我们可以实现容器在多个计算节点上的统一调度,可以将容器对接到持久存储、虚拟网络,还可以实现弹性伸缩等,提高了产品的迭代速度。

4.2.1、 在DevOps中可以实现如下功能:

  1. 多集群管理:可以根据用户需求对开发,测试,生产环境部署多套kubernetes集群,每个环境使用独立的物理资源,相互之间避免影响。
  2. 多环境一致性:Kubernetes是基于docker的容器编排工具,镜像保存在我们的私有镜像仓库,只要用户从我们提供的私有仓库拉取镜像,就能保证环境的一致性。
  3. 持续集成,持续部署,持续交付:可以让产品快速迭代,自动部署,根据用户的要求达到持续交付的能力。

4.3、 在微服务架构中的应用

4.3.1、服务发现

通过service可以实现服务发现
支持4层和7层负载均衡
支持安全可靠的https协议和证书认证签发
可实现负载均衡,自修复,自动关联

4.3.2、提供统一的配置管理中心

对于配置中心,K8S提供了configMap,可以在容器启动的时候,将配置注入到环境变量或者 Volume 里面。

4.3.3、弹性伸缩

通过控制器创建指定数量的pod副本,通过hpa可以实现pod应用的水平扩容和回收

4.3.4、集群监控

支持容器,集群和节点级别的监控,提供全面的监控指标,多途径的报警方式及可视化的监控报表

4.3.5、高质量的调度和故障恢复策略

支持节点级别的亲和性调度,支持异地数据备份和故障恢复。

4.3.6、通过jenkins实现持续集成/持续部署:

4.3.6.1、保证集群服务高可用

Jenkins Master和Jenkins Slave以Pod形式运行在Kubernetes集群的Node上,当Jenkins Master出现故障时,Kubernetes会自动创建一个新的Jenkins Master容器,并且将Volume分配给新创建的容器,保证数据不丢失,从而达到集群服务高可用。

4.3.6.2、动态伸缩

合理使用资源,每次运行Job时,会自动创建一个Jenkins Slave,Job完成后,Slave自动注销并删除容器,资源自动释放,而且Kubernetes会根据每个资源的使用情况,动态分配Slave到空闲的节点上创建,降低出现因某节点资源利用率高,还排队等待该节点的情况。

4.3.6.3、扩展性好

当Kubernetes集群的资源严重不足而导致Job排队等待时,可以很容易的添加一个Kubernetes Node到集群中,从而实现扩展。

5、k8s 特点

5.1、可移植

支持公有云,私有云,混合云,多重云(multi-cloud)

5.2、可扩展

可根据业务流量情况快速扩展kubernetes集群的节点数量。

5.3、自愈

自动发布
自动重启
自动复制
自动扩展

5.4、进程协同

利用复合应用保证应用和容器一对一的模型。

6、k8s 可实现的功能

  1. 存储系统挂载
  2. 分发密钥
  3. 应用健康检测
    1. livenessprobe
    2. readnessprobe
  4. 应用实例复制
  5. 水平自动扩展
  6. 命名和发现
  7. 负载均衡
  8. 滚动更新
  9. 资源监控
  10. 日志访问
  11. 自检和调试
  12. 识别和认证

7、应用程序的传统部署和容器部署的对比分析

在这里插入图片描述

7.1、传统部署时代

早期,应用程序在物理服务器上运行。无法为物理服务器中的应用程序定义资源边界,这会导致资源分配问题。例如,如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况,结果可能导致其他应用程序的性能下降。一种解决方案是在不同的物理服务器上运行每个应用程序,但是由于资源利用不足而无法扩展,并且许多物理服务器的维护成本也很高。

7.2、虚拟化部署时代

允许你在单个物理服务器的CPU 上运行多个虚拟机(VM)。

虚拟化功能允许应用程序在 VM 之间隔离,并提供安全级别,因为一个应用程序的信息不能被另一应用程序*地访问。
因为虚拟化可以轻松地添加或更新应用程序、降低硬件成本等,所以虚拟化可以更好地利用物理服务器中的资源,并可以实现更好的可伸缩性。

每个VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。

7.3、容器部署时代:

容器类似VM,但是它们具有轻量级的隔离属性,可以在应用程序之间共享操作系统(OS)。因此,容器被认为是轻量级的。
容器与VM 类似,具有自己的文件系统、CPU、内存、进程空间等。由于它们与基础架构分离,因此可以跨云和OS分发进行移植。容器因具有许多优势而变得流行起来。

7.3.1、容器优点

  1. 敏捷应用程序的创建和部署:与使用VM镜像相比,提高了容器镜像创建的简便性和效率。

  2. 持续开发,集成和部署:通过快速简单的回滚(由于镜像不可变性),提供可靠且频繁的容器镜像构建和部署。

  3. 关注开发与运维的分离:在构建/发布时创建应用程序容器镜像,不在部署时创建应用程序容器镜像,从而将应用程序与基础架构分离。

  4. 可观察性:

    1. 可以显示操作系统级别的信息和指标
    2. 可以显示应用程序的运行状况和其他指标信号。
  5. 跨开发,测试和生产的环境一致性:在便携式计算机上与在云中相同地运行

  6. 云和操作系统分发的可移植性:可在 Ubuntu. RHEL. CoreOS. 本地. Google Kubernetes Engine 和其他任何地方运行。

  7. 以应用程序为中心的管理: 提高抽象级别,从在虚拟硬件上运行 OS 到在 OS 上运行应用程序。

  8. 松散耦合,分布式,弹性,解放的微服务:应用程序被分解成较小的独立部分,并且可以动态部署和管理,而不是在一台大型单机上整体运行。

  9. 资源隔离:可预测的应用程序性能

  10. 资源利用:高效率和高密度