K8S容器编排高级应用

这篇具有很好参考价值的文章主要介绍了K8S容器编排高级应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

K8S容器编排高级应用

1.Pod控制器

pod控制器帮助我们自动管理pod,并满足期望的pod数量。pod控制器通过label标签来管理pod。在资源文件中通过selector来配置选择器,通过kind来配置控制器。一般我们的应用在生产环境用k8s一定要用pod控制器管理pod而不是自己创建pod这样才能保证可靠性。

版本升级的时候一般通过改资源文件的方式来升级,尽量不要用命令来升级不然资源文件没有改不利于后期维护。

1.pod控制器组成

1.标签选择器

匹配并关联 Pod 资源对象。

2.期望副本数

期望在集群中精确运行着的 Pod 资源的对象数量。

3.pod模板

用于新建 Pod 资源对象的 Pod 模板资源文件。

2.ReplicaSet控制器

rs控制器代用户创建指定数量的pod副本数量,确保pod副本数量符合预期状态,支持扩缩容,版本升级不支持,需要手动完成,比较老的pod控制器,频繁的版本迭代不要用这种控制器。

3.Deployment控制器

工作在 ReplicaSet 之上,用于管理无状态应用,支持滚动更新(比如1.0版本升级到2.0版本可以无感知升级)和回滚功能,还提供声明式配置。使用deployment控制器会自动创建相关的RS控制器资源。

4.HPA控制器

ReplicaSet控制器和Deployment控制器扩容的时候需要手动完成,HPA控制器Pod可以水平自动缩放,可以根据Pod的负载动态调整Pod的副本数量,业务高峰期自动扩容Pod副本以满足业务请求,在业务低峰期自动缩容Pod,实现节约资源的目的。

部署mertics-server服务来收集和监控k8s的各种指标

1.资源配置

为了能够使用HPA的功能必须要对我们的POD进行资源配置,Kubernetes采用request和limit两种配置类型来对资源进行分配

1.资源配置类型
1.request(资源需求)

运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod

2.limit(资源限额)

运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额

2.资源单位
1.cpu单位

cpu的单位是核心数。一个容器申请0.5个CPU,就相当于申请1个CPU的一半,你也可以加个后缀m,表示千分之一的概念,比如说100m(100豪)的CPU等价于0.1个CPU。默认情况下就是基于CPU的HPA,需要创建HPA 的资源清单设置最小pod数量和最大pod数量。

2.内存单位

内存单位是内存使用的容量

K、M、G、T、P、E ## 通常是以1000为换算标准的。

Ki、Mi、Gi、Ti、Pi、Ei ## 通常是以1024为换算标准的

3.扩缩容策略

HPA会根据获得的指标数值,应用相应的算法算出一个伸缩系数,此系数是指标的期望值与目前值的比值,如果大于1表示扩容,小于1表示缩容。

1.资源文件主要参数

1.scaleTargetRef:目标作用对象,可以是Deployment、ReplicationController或ReplicaSet

2.averageUtilization:期望每个Pod的CPU使用率都为 10% ,该使用率基于Pod设置的 CPU Request 值进行计算,假如该值为 100m ,那么系统将维持Pod的实际CPU使用值为100m*10%=10m ,超过 10m 就会触发扩容

3.minReplicas和maxReplicas:Pod副本数量的最小值和最大值,系统将在这个范围内进行自动扩缩容操作,并维持每个Pod的CPU使用率为10%

2.K8S数据存储

1.数据卷

Docker 可以通过bind将数据持久存储于容器自身文件系统之外的存储空间之中,kubernetes 也支持类似的存储卷功能,不过,其存储卷是与 Pod 资源绑定而非容器。

1.非持久性存储

emptyDir、hostPath

2.网络连接性存储

SAN:iscsi

NFS:nfs、cfs

3.分布式存储

glusterfs、cephfs、rbd

4.云端存储

awsElasticBlockStore、azureDisk、gitRepo

3.pod的调度策略

pod的调度都是通过pod控制器自动完成,但是仍可以通过手动配置的方式进行调度,目的就是让pod的调度符合我们的预期。

1.节点调度

Pod.spec.nodeName 用于强制约束将Pod调度到指定的Node节点上,指定了nodeName的Pod会直接跳过Scheduler的调度逻辑,直接写入PodList列表,该匹配规则是强制匹配。

2.标签调度

也叫定向调度,把pod调度到具有特定标签的node节点的一种调度方式,比如把MySQL数据库调度到具有SSD的node节点以优化数据库性能。需要给指定的node打上标签,并在pod中设置nodeSelector属性以完成pod的指定调度。

4.service的服务发现

在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。

kubernetes提供了Service资源,Service会对提供同一个服务的多个pod进行聚合,并且提供一个统一的入口地址,通过访问Service的入口地址就能访问到后面的pod服务。Service通过Label Selector访问Pod组。

1.服务发现原理

真正起作用的其实是kube-proxy服务进程

每个Node节点上都运行着一个kube-proxy服务进程,当创建pod的时候会通过api-server向etcd写入创建的pod的信息,而kube-proxy会基于监听的机制发现这种pod的变动,然后他会将最新的pod的信息告知service我们可以通过service和etcd访问各个pod。service的ip不会变化,pod的ip每次重启不固定。

2.service类型

1. ClusterIp

自动分配一个仅Cluster内部可以访问的虚拟IP

只能内部访问

2.nodeport

在ClusterIP基础上为Service在每台机器上绑定一个端口,这样就可以通过: nodeport来访问该服务

可以外部访问

3.LoadBalancer

在NodePort的基础上,借助 Cloud Provider 创建一个外部负载均衡器,并将请求转发到nodeport可以外部访问

4.ExternalName

把集群外部的服务引入到集群内部来,在集群内部直接使用,没有任何类型代理被创建,这只有Kubernetes 1.7或更高版本的kube-dns才支持

5.ingress

Ingress 使用开源的反向代理负载均衡器来实现对外暴漏服务,比如 Nginx、Apache、Haproxy等,用的最多的是使用nginx来做的。

1.ingress优势

1.动态配置

可以自动修改ngnix配置文件,当服务启动时,会自动注册到ingress当中自动添加反向代理

2.减少端口暴露

是k8s的很多服务会以 nodeport 方式映射出去

2.ingress-nginx原理

1.流程

客户端 – ingress-nginx – service(多个)-- pod (多个)文章来源地址https://www.toymoban.com/news/detail-820661.html

2.工作原理
1.Nginx 对k8s运行的service提供反向代理,在配置文件中配置了域名与service的对应关系并且可以自动化的动态配置。
2.客户端通过使用 DNS 服务或者直接配置本地的 hosts 文件,将域名都映射到 Nginx 代理服务器。
3.当客户端访问时,浏览器会把包含域名的请求发送给 nginx 服务器,nginx 服务器根据传来的域名,选择对应的 Service,然后根据一定的负载均衡策略,选择某个pod接收来自客户端的请求并作出响应

到了这里,关于K8S容器编排高级应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes(K8s):容器化应用的航空母舰

    Kubernetes(K8s)是一个开源的容器编排系统,它的出现就像是为容器化应用提供了一艘强大的航空母舰。在这艘母舰上,你的应用容器就像是一架架战斗机,Kubernetes负责指挥它们起飞、飞行、降落,确保它们能在正确的时间、正确的地点执行任务。 Pod: Kubernetes的基本飞行编队

    2024年04月08日
    浏览(67)
  • K8S容器编排基本使用

    物理单机 – 虚拟机(VMware)-- IAAS(基础设施即服务 比如够买jsp主机模式)-- OPENSTACK(多个机器分片使用思想)-- docker(容器化) – K8S(云原生自动化部署自动化编排) kubernetes k和s之间有8个字母所以命名为K8S,用于自动部署、扩展、统一管理容器化应用集群,支持云平台

    2024年01月22日
    浏览(51)
  • kubernetes(k8s)大白学习02:容器和docker基础、使用、架构学习

    简单说:容器(container)就是计算机上的一个沙盒进程,它与计算机上的所有其它进程相隔离。 这种隔离是怎么做到的呢?它利用了内核提供的 namespace 和 cgroup 这 2 种技术。这些技术能力在 Linux 中已经存在了很长时间。而 Docker 或容器技术致力于将这些功能更易于使用和更

    2024年02月07日
    浏览(69)
  • 容器编排学习(一)k8s集群管理

    就在Docker容器技术被炒得热火朝天之时,大家发现,如果想要将Docker应用于具体的业务实现,是存在困难的一一编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理就在这个时候,kubernetes出现了 kubernetes的名字

    2024年02月09日
    浏览(44)
  • Kubernetes技术--k8s核心技术yaml资源编排

    (1).引入        我们可以使用kubectl实现单行指令的操作,但是这样做的坏处是不复用,所以为了更好的实现对一系列资源的编排工作。kuberntes中使用一种叫做 资源清单文件(yaml)来实现对资源管理和资源对象编排部署 。 (2).概述     yaml是一 种标记语言 。为了强调这种语言以

    2024年02月10日
    浏览(49)
  • Kubernetes(K8s)常用命令大全:熟练编排更完美

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月16日
    浏览(46)
  • 【云原生 | Kubernetes 系列】K8s 实战 如何给应用注入数据 II 将pod数据传递给容器

    在上一篇文章中,我们学习了针对容器设置启动时要执行的命令和参数、定义相互依赖的环境变量、为容器设置环境变量,三种设置方式,本篇文章,我们将继续学习数据的传递。 有两种方式可以将 Pod 和 Container 字段传递给运行中的容器: 环境变量 卷文件 这两种呈现 Pod

    2024年01月25日
    浏览(141)
  • K8s(kubernetes)集群搭建及dashboard安装、基础应用部署

    本质是一组服务器集群,在集群每个节点上运行特定的程序,来对节点中的容器进行管理。实现资源管理的自动化。 自我修复 弹性伸缩 服务发现 负载均衡 版本回退 存储编排 控制节点(master)-控制平面 APIserver :资源操作的唯一入口 scheduler :集群资源调度,将Pod调度到node节

    2024年02月08日
    浏览(53)
  • IDEA远程调试k8s容器里面的Java应用

    要远程调试运行在 Kubernetes 容器中的 Java 应用,可以使用以下步骤: step1 : 在部署容器的 Kubernetes YAML 文件中,为容器添加远程调试的 JVM 参数,如: step2 : 在容器内运行的 Java 应用启动时,会自动开启一个监听 5005 端口的调试服务,可以使用远程调试工具(如 IntelliJ IDEA、

    2024年02月06日
    浏览(89)
  • 云原生之容器编排实践-在K8S集群中使用Registry2搭建私有镜像仓库

    基于前面搭建的3节点 Kubernetes 集群,今天我们使用 Registry2 搭建私有镜像仓库,这在镜像安全性以及离线环境下运维等方面具有重要意义。 Note: 由于是测试环境,以下创建了一个 local-storage 的 StorageClass ,并使用本地磁盘的方式创建使用 PV ,实际建议使用 NFS 。 共用到了三台

    2024年02月19日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包