K8S 原生部署

最近更新时间:2024-11-13 16:14:53

我的收藏

操作场景

TSF 支持 K8S 原生部署方案,当您通过 K8S 部署业务后,使用该功能,您可以实现仅通过页面简单配置或 K8S yaml 的少量修改,将您的应用快速接入 TSF,保留原有 K8S 部署发布全流程,并且您可以使用 TSF 的服务注册发现、服务治理、可观测性等一系列能力。
说明:
请注意,使用此功能需要保证 K8S 版本不低于 1.16。

步骤1:在 TKE 控制台创建集群

参见 创建集群Deployment 管理 在容器服务 TKE 控制台创建集群和 Deployment 并正常运行。

步骤2:导入容器服务集群到 TSF

1. 登录 TSF 控制台
2. 在左侧导航栏中,单击资源管理,进入 集群列表
3. 在集群列表页的左上方,单击新建集群
4. 设置集群的基本信息。
集群类型:选择容器集群
集群名称:集群名称,不超过60个字符。
新建类型:选择导入容器服务 TKE 集群
所在可用区:选择容器服务集群所在的可用区。
选择集群:选择要导入的容器集群服务。
标签:用于分类管理资源,可不选。详情参见 标签
备注:集群的描述,不超过200个字符。
数据集:将新建的集群添加到已有数据集中。非必填字段。数据集使用,请参见 数据集管理


5. 单击提交,在弹窗中选择导入云主机前往导入云主机页面。
6. 从集群所在 VPC 的云主机列表中,选择需要添加到集群的云主机。
7. 选择导入方式,并根据页面提示完成操作。
重装系统:该方式会使用 root 用户安装 agent。
安装 Agent(仅适用于虚拟机集群): 该方式支持使用 root 用户和非 root 用户安装 agent。

步骤3:应用改造

参见开发指南对您的应用进行改造:

步骤4:部署服务到 TSF

您可以在 TSF 控制台上导入 Deployment 到 TSF 来完成部署相关操作,也可以通过 K8S YAML 部署 TSF 服务。
自动安装组件
通过 YAML 配置手动安装
说明:
单击开启后,我们将对您的集群进行组件安装,期间不影响集群正常运行,安装组件最少需要64MB内存 和0.1核 CPU。
当您单击导入 TSF 时,我们将为您重启 Deployment,请选择业务低谷期进行操作。
1. 在集群列表页面,单击集群的“ID”,进入云主机列表页面。
2. 在页面上方选择 K8S 原生部署页签,单击方式一中的自动安装

3. 在 Deployment 列表页面,选择好命名空间,单击您要导入的 Deployment 操作列的导入 TSF
4. 在弹窗中填写导入的应用信息。
导入后应用名称:填写导入后的应用名称,不超过60字符。
应用类型:选择导入应用类型
应用使用 TSF SDK接入:使用 TSF SDK 接入,支持 TSF 全栈服务治理、应用性能监控、应用配置管理能力。
原生 Spring Cloud 应用:原生 Spring Cloud 应用0代码改造即可接入,支持服务发现、服务治理、应用性能监控能力。
Service Mesh 应用接入:使用 Service Mesh 技术支持全套 TSF 服务治理能力,无需修改代码。
TSF Agent(采集器):我们将为您在容器集(Pod)中安装 TSF Agent 以使⽤平台提供的服务治理、配置管理、可观测性等能⼒。将在您⼯作负载重启后⽣效。
Agent 占⽤资源:
request 用于预分配资源,当集群中的节点没有 request 所要求的资源数量时,会导致无法创建容器。
limit 用于设置容器使用资源的最大上限,避免异常情况下节点资源消耗过多。


5. 单击提交,等待导入完成。
说明:
导入完成后,会自动给用户创建好应用和部署组,重启应用后应用会注册到 TSF 注册中心。
通过 K8S 原生部署导入 Deployment 后, 不支持在 TSF 自动创建的部署组页面进行增删改操作,建议继续在TKE 页面进行操作。
对于在 TKE 页面创建的命名空间,开启 K8S 原生部署后,也不支持在该命名空间下新建部署组。
通过原生部署创建的部署组,所关联 K8S Deployment 被删除后,会同步删除 TSF 部署组,但会保留创建的应用与命名空间。
接下来将演示如何通过 K8S YAML 来部署 TSF 服务,例如 kubectl。
1. 在集群列表页面,单击的集群的“ID”,进入云主机列表页面。
2. 在页面上方选择 K8S 原生部署页签,单击方式二中的生成配置


3. 给需要部署 TSF 应用的命名空间加上 label tsf.tencentcloud.com/inject
# ns.yaml
apiVersion: v1
kind: Namespace
metadata:
labels:
# new
tsf.tencentcloud.com/inject: allowlist
name: default
allowlist 指白名单,默认不开启,只有在 Deployment 上加上相应 label 才会开启。提交 YAML 到 K8S(后续 yaml 的 kubectl 提交过程将省略)。
$ kubectl apply -f ns.yaml
4. 创建一个简单的非 TSF Deployment。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-app: test-light-provider
name: test-light-provider
namespace: default
spec:
replicas: 1
selector:
matchLabels:
k8s-app: test-light-provider
template:
metadata:
labels:
k8s-app: test-light-provider
spec:
containers:
- name: app
# TODO: 修改为真实的 TSF 应用的镜像
image: ccr.ccs.tencentyun.com/xxx
imagePullSecrets:
- name: qcloudregistrykey
此时并不会有相应的部署组和应用创建出来,Deployment 和 Pod 也没有注入 TSF 的信息。
5. 修改创建好的 Deployment,加上一个 label tsf.tencentcloud.com/inject: enable 和一个 annotation tsf.tencentcloud.com/application.type: "N"
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-app: test-light-provider
# new
tsf.tencentcloud.com/inject: enable
annotations:
# new
tsf.tencentcloud.com/application.type: "N"
# 应用名,默认是 Deployment name
tsf.tencentcloud.com/application.name: "test-light-provider"
name: test-light-provider
...
6. 提交 YAML 到 K8S,等待 Deployment 更新成功。

Label 和 Annotation 的使用方法

K8S 原生部署通过 label 和 annotation 来控制部署的行为,具体规则如下。

Labels

key
范围
值和效果
tsf.tencentcloud.com/inject
Namespace
allowlist: 此 namespace 下采用白名单机制,Deployment 默认不导入 TSF;enable: 此 namespace 下采用黑名单机制,默认导入
tsf.tencentcloud.com/inject
Deployment
enable: 当 namespace 是白名单时,表示导入;disable: 当 namespace 是黑名单时,表示不导入

Annotation

说明:
Namespace 的 annotation 表示该 namespace 下所有 Deployment 的默认值,如果 Deployment 没有设置某个选项,会使用 namespace 上设置的。如果 Namespace 和 Deployment 都没有设置,如果该 annotation 是选填,会使用默认值;但如果 annotation 是必填,则会报错。
key
范围
是否必填
值和效果
tsf.tencentcloud.com/application.type
Namespace/Deployment
required
应用类型。N:普通应用;M:service mesh应用;G:网关应用;NATIVE:原生应用
tsf.tencentcloud.com/application.name
Deployment
optional. 默认是 Deployment name
应用名称
tsf.tencentcloud.com/agent
Namespace/Deployment
optional. 默认是 enable
enable: 部署 agent 容器;disable; disable: 不部署 agent 容器
tsf.tencentcloud.com/agent.cpu-request
Namespace/Deployment
optional. 默认是 TSF 设定的默认值,当前为 100m
150m
tsf.tencentcloud.com/agent.cpu-limit
Namespace/Deployment
optional. 默认是 TSF 设定的默认值,当前为 200m
300m
tsf.tencentcloud.com/agent.mem-request
Namespace/Deployment
optional. 默认是 TSF 设定的默认值,当前为 125Mi
150Mi
tsf.tencentcloud.com/agent.mem-limit
Namespace/Deployment
optional. 默认是 TSF 设定的默认值,当前为 250Mi
300Mi