我们谈论生活,讨论技术,借由文字,抵达心灵。
分布式系统要能够根据当前负载的变化 自动 触发水平扩容或缩容,因为这一过程可能是频繁发生的、不可预料的,所以手动控制的方式是不现实的。HPA 与 RC、Deployment 一样,也属于一种 Kubernetes 资源对象。HPA 实现原理通过追踪分析指定 RC 控制的所有目标 Pod 的负载变化情况,来确定是否需要有针对性地调整目标 Pod 的副本数量。HPA 有以下两种方式作为 Pod 负载的度量指标:CPUUtilizationPercentage一个算术平均值,即 目标 Pod 所有副本自身的 CPU 利用率的平均值。一个 Pod 自身的 CPU 利用率是该 Pod 当前 CPU 的使用量 除以 它的 Pod Request 的值eg. 定义一个 Pod 的 Pod Request = 0.4,当前 Pod 的 CPU 使用量为 0.2,那么它的 CPU 使用率是 50%这样可以算出一个 RC 控制的所有 Pod 副本的 CPU 利用率的算术平均值了如果某一时刻 CPUUtilizationPercentage 的值超过 80%,则意味着 当前 Pod 副本数很可能不足以支撑接
Deployment 配置定义文件内容spec 是 Kubernetes YAML 文件中最重要的字段之一,它定义了资源的期望状态(desired state)。对于 Deployment 来说,spec 包含了以下关键配置:apiVersion: apps/v1 # 更新到当前推荐的 API 版本 kind: Deployment metadata: name: frontend spec: # 定义了资源的期望状态 replicas: 1 # Pod 副本数量 selector: # 选择器,用于识别哪些 Pod 是属于这个 Deployment 的 matchLabels: # 简化选择器配置 tier: frontend template: # Pod 模板,定义 Pod 的配置 metadata: labels: # Pod 的标签 app: app-demo tier: frontend spec: # Pod 的详细规格 containers: #
Label一个 Label 是一个 key=value 的键值对,key value 用户自己制定Label 可以背附加到各种资源对象上,如 Node、Pod、Service、RC 等。资源对象和 Label 是多对多的关系通过给指定的资源对象捆绑一个或多个的 Label 实现多维度的资源分组管理功能,以便灵活、方便地进行资源分配、调度、配置、部署等管理工作。常见的 Label:版本标签:"release": "stable"、"release": "canary"环境标签:"environment":"dev"、"environment":"qa"、"environment":"production"架构标签:"tier":"frontend"、"tier":"backend"、"tier"
资源对象Node、Pod、Replication Controller、Service 等都可以被看做一种资源对象,几乎所有的资源对象都可以通过 Kubernetes 提供的 kubectl 工具 (或 API 变成调用)执行增删改查等操作,并将其保存在 etcd 中持久化存储。所以,Kubernetes 其实是一个高度自动化的资源控制系统,他通过跟踪对比 etcd 库里保存的 “资源期望状态” 与 当前环境中的 “实际资源状态” 的差异来实现自动控制盒自动纠错的高级功能。在声明一个 Kubernetes 资源对象的时候,有一个关键属性 apiVersion ,以下面的 Pod 声明为例:apiVersion: v1 kind: Pod metadata: name: myweb labels: name: myweb spec: containers: - name: myweb image: kubeguide/tomcat-app:v1 ports: - containerPort: 8080Kubernete
实践内容Java Web 应用的结构比较简单,是一个运行在 Tomcat 的 Web App,如果所示:JSP 页面通过 JDBC 直接访问 MySQL 数据库并展示数据。出于演示和简化的目的,只要程序正确连接到了数据库,就会自动完成对应的 Table 的创建与初始化数据的准备工作。所以,当我们通过浏览器访问此应用时,就会显示一个表格的页面,数据则来自于数据库。实践解析此应用需要启动两个容器:Web App 容器 和 MySQL 容器,并且 Web App 容器需要访问 MySQL 容器。Docker 时代实现的方式假设在一个宿主机上启动了这两个容器,需要吧 MySQL 容器的 IP 地址通过环境变量注入 Web App 容器里;同时,需要将 Web App 容器的 8080 端口映射到宿主机的 8080 端口,以便在外部访问环境准备当前已经有一个 kubernetes 集群,部署机和工作节点均是由 pve 创建的虚拟机,部署机 IP:192168.25.64;kubernetes 集群工作节点:192.168.25.72启动 MySQL 服务在 Kubernetes 节点上操作更新系
糖呀糖 xyz