查看原文
其他

TKE 体验升级:更快上手 K8s 的24个小技巧

王孝威 腾讯云原生 2021-07-13

王孝威,腾讯云容器产品经理,热衷于为客户提供高效的 Kubernetes 使用方式,为客户极致降本增效服务。

背景

“功能“解决是产品有或者没有一个能力的问题,有了“功能”之后,如何通过良好的引导、提示,以及交互来帮助用户更“流畅”的使用产品是一个值得思考的问题。

例如:乐高已经有了超过 3700 种不同的模块,这些模块可以拼出无限种模型。然而,不同模型的呈现完全不一样,有可能只是几个小模块的位置的改变就能带来意想不到的效果。

近过几年的努力,TKE 在功能层面提出了大量新特性:例如:通过 LB 直连 Pod 提升性能[1]集群原地升级[2]虚拟节点[3]动态调度器[4],更多可参考容器服务产品动态[5]

此外,TKE 也重视用户的整体使用体验,为此拜访了多家公司,收集了很多需求,并根据用户重视分层,进行了优化和工具的开发,用户可以利用这些优化的小技巧,更顺滑的来体验容器服务,更“接地气”的降低产品使用门槛,提升产品使用体验。

提升列表

集群/节点相关

推荐:节点搜索能力增强

节点搜索支持通过 Label/IP/是否封锁/节点状态 等多维度的搜索。

  • Label 搜索格式与原生 Kubernetes 相同:"k1=v1,k2=v2"
  • IP 多值搜索时仅支持精确查询,单 IP 搜索支持模糊查询

使用方式:节点管理 -> 节点 -> 搜索 或者 节点池详情页  -> 下拉到节点列表 -> 搜索

推荐:节点初始化错误展示优化

  • 【CVM 发货失败 相关错误细化展示】如果因为 CVM 发货失败导致节点购买失败,除了报 LAUNCH_FAILED(即发货失败), 还会显示详细发货失败的原因:比如 VPC 子网 IP 不足/磁盘资源不足/余额不足/置放群组配额不足等等。

  • 【节点初始化 相关错误细化展示】会详细在节点列表展示节点初始化失败的步骤以及对应信息:比如挂盘失败、核心组件异常等等。

使用方式:节点管理 -> 节点 -> 在状态栏点击查看状态即可查看错误

节点池节点操作标准化:支持封锁/驱逐

节点池内节点操作支持封锁/驱逐,已与集群内节点列表操作保持完全同步,您可以在节点池内高效管理节点。

使用方式:节点池详情页  -> 下拉到节点列表 -> 在操作列对单节点进行操作 或者 选中批量节点后进行批量操作(点击上方【更多操作】按钮可批量封锁/取消封锁节点)

删除保护逻辑优化

客户反映:如果创建集群时开启了误删选项,开启后假如创建失败,客户也无法删除。

现在您可以在【集群列表页】为集群关闭删除保护功能。

使用方式:集群管理 -> 集群操作列表 -> 更多 -> 关闭集群删除保护

公网 IP 展示优化

有些客户反馈公网IP的配置入口过于隐蔽,默认带宽值过小,无法满足业务需要。

我们采取图形化的形式(拖动条)来代替输入框,强化显示效果。

使用方式:新建节点/新建节点池 -> 选择机型 -> 拖拽到底部 -> 设置公网带宽

节点池展示信息结构化 / 高级参数展示

  1. 增加节点池核心定义/功能的概览,让客户快速了解节点池的使用场景

  1. 节点池信息结构化展示(按模块聚合展示,同时显示了更多的高级参数,提高了可观测性)
  • 节点池基本信息(弹性伸缩相关配置、节点数量等信息)
  • 节点配置详情(节点模板相关配置、节点池扩容节点自动继承的配置)

节点直接跳转 CVM 优化

旧版本的跳转 CVM 按钮显示不稳定,并且入口不突出。

使用方式:鼠标悬浮到节点 ID 处(如果您直接点击节点 ID, 会跳转到 Node 详情页) -> 点击 “跳转到 CVM 实例详情页” -> 会跳转到 CVM 实例详情页

创建节点时增加了容器网络 IP 校验

创建节点前,会根据您的容器网络配置(网络模式、网段等)来判断容器网络是否可以满足这批节点创建的要求。考虑到某些特殊场景下您可能不需要校验容器网络,我们提供了参数 skip 可以供您跳过校验。(参数的详细说明可参考API文档[6]

使用方式:新建节点/添加已有节点/新建节点池 -> 更多设置 -> 设置skip参数

集群添加已有节点时支持填写挂载分区/LVM 名

在添加已有节点时如果您对磁盘做了分区/LVM,请在挂载分区填写想要挂载的分区名/LVM名,如果磁盘未分区或 LVM,无需填写挂载分区,只需填写挂载点

使用方式:添加已有节点  -> 选择节点 -> 勾选数据盘挂载 -> 填写挂载分区以及挂载点

Kubernetes 对象相关

推荐:批量导入键值对:配置管理 & 环境变量优化

支持一次性从剪切板导入批量的键值对。变量名为空时,在变量名称中粘贴一行或多行 key=value 或 key: value 的键值对可以实现快速批量输入。

使用方式1:工作负载 -> 新建负载 -> 实例内容器 -> 环境变量

使用方式2:配置管理 -> 新建 ConfigMap/Secret -> 内容

推荐:CronJob 支持保留数量/暂停/手动触发/显示由  Cronjob  生成的  Job  列表

  • 保留成功Job数:防止 Job 无限生成,影响集群性能

  • 保留失败Job数:防止 Job 无限生成,影响集群性能

  • 暂停:会停止 Cronjob 的运行,不再会生成新的 Job。支持恢复运行

  • 手动触发:无需等到 Cronjob 设置的 Crontab 时间就支持利用 Cronjob 里的 Job 模板生成一个新的 Job

使用方式:工作负载 -> Cronjob -> 新建 -> 保留成功 Job 数/保留失败 Job 数

使用方式:工作负载 -> Cronjob 列表 -> 更多-> 手动触发/暂停

点击上图中的 CronJob 的名称,就可以查看到由 CronJob 生成的运行中的 Job 列表:

HostAliases 产品化

HostAliases[7] 用于为 Pod 的 /etc/hosts 文件中添加条目,可以在 Pod 级别覆盖对主机名的解析。以增加 Pod 的 DNS 配置。

使用方式:工作负载 -> 新建负载 -> 高级设置 -> 主机别名

lifecycle 产品化

lifecycle[8] : 容器的生命周期事件挂接处理函数。容器可以为每个事件指定一个处理程序,当一个容器启动后,Kubernetes 将立即发送 postStart 事件;在容器被终结之前, Kubernetes 将发送一个 preStop 事件。

使用方式:工作负载 -> 新建负载 -> 实例内容器 -> 生命周期

Service 默认 “仅在集群内访问”;Service 类型解释增加对应英文名词

  1. “仅在集群内访问”访问方式符合使用习惯
  2. 中英文名词对照减少用户的理解成本,符合 Kubernetes 原生使用习惯

一键“重新部署” 在 Deployment、StatefulSet 和 DaemonSet 上支持

和 Deployment 一样,StatefulSet 和 DaemonSet 现在支持一键重新部署了,免去删除后重新配置的烦恼。

使用方式:工作负载 -> 负载列表 -> 更多 -> 重新部署

Ingress 证书支持继承 LB 的证书

支持直接使用 CLB 的证书自动创建 Ingress 的 HTTPS 证书,省去繁琐的 Secret 创建流程。

使用方式:服务与路由 -> Ingress -> 新建Ingress -> 监听端口勾选 Https:443 -> 新建密钥 -> 选择服务器证书

Secret 支持 TLS 类型

除了 CLB 证书,您有时会使用自己的证书,保存证书需要使用 TLS 类型的 Secret

使用方式1:配置管理 -> Secret -> 新建Secret -> TLS证书

使用方式2:服务与路由 -> Ingress -> 新建 Ingress -> Nginx 负载均衡器 -> 监听端口勾选 Https:443 -> 新建密钥

subPathExpr 在控制台上支持配置

subPathExpr[9],支持将环境变量映射到 Volume 里的一个子路径

使用方式:新建负载 -> 使用数据卷 -> 增加环境变量 -> 使用挂载点 -> 选择 subPathExpr

kube-system、kube-node-lease、kube-public 里的资源支持在控制台支持修改

以前为了防止用户误触,在控制台限制了这些命名空间里资源的修改,但事实上有些用户本身就具有这些命名空间的资源管理权限,因此新版本在控制台去掉了这些限制,权限逻辑交给后台判断,若您没有相关命名空间的权限,修改资源也会报错。

使用方式:新建负载 -> 选择命名空间 -> 修改资源配置

使用方式:授权管理 -> 选择任意一个入口 -> RBAC 策略生成器 -> 选择子账号 -> 选择命名空间/权限

增加多处悬浮提示

所有的资源列表页的字段名增加悬浮提示,更适应屏幕较小的用户

工作负载里的日志入口容器名增加悬浮提示,更适应屏幕较小的用户

运维能力相关

推荐:日志采集支持根据日志样例自动提取正则表达式

当在日志采集规则中选择单行完全正则、多行完全正则的提取模式时,可根据用户自己的日志样例自动生成正则表达式,并自动提取相应的键值对,无需用户自己去学习并配置正则表达式

使用方式:1.集群运维 -> 2.日志规则 -> 3.新建 -> 4.输入日志采集规则名字 -> 5.提取方式选取“单行-完全正则” -> 6.输入日志样例 -> 7.点击正则表达式自动生成 -> 8.移动光标选取需要被正则的字符串 -> 9.输入key -> 10.确认

推荐:日志采集支持根据日志样例自动验证是否可正常提取日志

对于用户自己填写的正则表达式、分隔符等,支持按照用户日志样例进行验证,自动提取所有 value,以验证是否可以正常解析日志,避免在检索日志时发现表达式配置错误。

使用方式:1.集群运维 -> 2.日志规则 -> 3.新建 -> 4.输入日志采集规则名字 -> 5.提取方式选取“单行-完全正则” -> 6.输入日志样例 -> 7.手动输入正则表达式 -> 8. 验证

日志采集支持多行正则提取模式

支持多行正则的解析模式(适用于 java 程序等多行日志以键值去检索日志的需求)

注意:使用多行正则提取模式需要联系后端升级采集组件版本

使用方式:新建日志采集规则->第二步提取模式中选择“多行-完全正则模式”

托管 Prometheus 支持新加坡、弗吉尼亚等地域

云原生监控[10](托管 Prometheus)灰度上线新加坡/弗吉尼亚等地域,欢迎使用。

总结

Kubernetes 本身功能强大,但模块复杂,上手成本较高。TKE 致力于功能和体验的升级,如果您有任何功能和体验上的建议,欢迎在留言中提出,我们将随机抽选三位留言者,送上腾讯周边小牛仔一只。

参考资料

[1]

通过 LB 直连 Pod 提升性能: 【https://cloud.tencent.com/document/product/457/41897】

[2]

集群原地升级: 【https://cloud.tencent.com/document/product/457/32192】

[3]

虚拟节点:【 https://cloud.tencent.com/document/product/457/53027】

[4]

动态调度器: 【https://cloud.tencent.com/document/product/457/50843】

[5]

容器服务产品动态: 【https://cloud.tencent.com/document/product/457/41088】

[6]

API文档: 【https://cloud.tencent.com/document/product/457/36707】

[7]

HostAliases: 【https://kubernetes.io/zh/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/】

[8]

lifecycle: 【https://kubernetes.io/zh/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/】

[9]

subPathExpr:【 https://kubernetes.io/zh/docs/concepts/storage/volumes/#using-subpath-expanded-environment】

[10]

云原生监控: 【https://cloud.tencent.com/document/product/457/49889】





  往期精选推荐  




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存