暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

基于TSF部署平台微服务

IT那活儿 2024-10-22
427
点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!

  
背景:
某现场需要将产品微服务部署到腾讯TSF服务平台,方便后期Agent监控和日志投递及其界面化维护操作。



TSF介绍

微服务平台(Tencent Service Framework,TSF)是一个围绕着应用和微服务的 PaaS平台,提供应用全生命周期管理、数据化运营、立体化监控和服务治理等功能。
TSF 拥抱 Spring Cloud 、Service Mesh 微服务框架,帮助企业客户解决传统集中式架构转型的困难,打造大规模高可用的分布式系统架构,实现业务、产品的快速落地。


TSF部署微服务

2.1 新建集群

现场已经搭建好容器TSF集群,若是自己私有腾讯云服务器可参考如下:
点击新建集群并填写集群名,选择虚拟机或者容器集群(付费)

2.2 新建命名空间

填写相应的命名空间,它的作用与nacos和k8s中namespace相似,其他可默认不选。

2.3 集群和命令空间关联

2.4 制作微服务镜像

1)制作基础基础镜像
导入ubuntu镜像:
docker load -i ubuntu-22.10.tgz
制作jdk镜像(含TencentCloudJvmMonitor):
tar -xf jdk1.8.0_391.tgz
将解压后的jdk文件夹与TencentCloudJvmMonitor的jar包放到一起:
创建Dockerfile文件如下:
# 基础镜像使用ubuntu
FROM harbor.shsnc.project.support.local:8443/cmdb/ubuntu:22.10_zh_CN_v2
# 创建普通用户作为服务运行用户
RUN useradd --create-home --shell bin/bash -p '$1$Ty.' appuser
# 工作目录/app,服务运行文件放到/app
RUN mkdir -p app && chown -R appuser:appuser /app
# 添加jdk
ADD --chown=appuser:appuser jdk1.8.0_391 /opt/jdk1.8.0_391
# 添加环境变量
RUN echo 'export JAVA_HOME=/opt/jdk1.8.0_391' >> /etc/bash.bashrc
RUN echo 'export PATH=${PATH}:/opt/jdk1.8.0_391/bin' >> /etc/bash.bashrc
ENV PATH=${PATH}:/opt/jdk1.8.0_391/bin \
JAVA_HOME=/opt/jdk1.8.0_391 \
LANG=zh_CN.UTF-8 \
C_OPTS=${C_OPTS} \
JAVA_OPTS=${JAVA_OPTS}

# JVM 监控组件要和您的 Dockerfile 位于同一级目录,并创建 JVM 监控数据采集目录
ENV agentjar TencentCloudJvmMonitor-1.3.1-RELEASE.jar
# 若容器的基础版本为 非 gnu-libc 版本,如 Alpine,请添加如下语句
# RUN ln -sf /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2
ADD --chown=appuser:appuser ${agentjar} /app/${agentjar}
RUN mkdir -p /data/tsf_apm/monitor/jvm-metrics/

# 解决时间问题
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezoneENV metricsdata /data/tsf_apm/monitor/jvm-metrics

利用上述文件制作镜像命令:
docker build -t sncjdk8:1.
2)制作微服务镜像
微服务文件包中增加Dockerfile。
  • docker build -t 仓库地址/服务名:版本号 .

    例:docker build .  -t  仓库地址/snc-platform-node:4.0

# 基础镜像使用jdk8
FROM sncjdk8:1
# 添加java服务的jar,lib,config到工作目录
ADD --chown=appuser:appuser lib /app/lib
ADD --chown=appuser:appuser config /app/config
# 建议把所有jar名称都改成app.jar,后面的启动命令就可统一java -jar app.jar
ADD --chown=appuser:appuser app.jar /app/app.jar
USER appuser
WORKDIR /app
# 容器运行建议把所有的服务统一改成8080端口
EXPOSE 8080

#
CMD nohup sh -c " java ${JAVA_OPTS} -jar /app/app.jar ${C_OPTS}"
CMD nohup sh -c " java -Xloggc:${metricsdata}/gclog.log -XX:+PrintGCDateStamps -XX:+PrintGCDetails -verbose:gc -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=8 -XX:GCLogFileSize=50M -javaagent:${workdir}/${agentjar}=hascontroller=true ${JAVA_OPTS} -Xshare:off -jar /app/app.jar ${C_OPTS}"

3)上传微服务镜像
  • docker push 仓库地址/服务名:版本号

    例:docker push 仓库地址/snc-platform-node:4.0

3.5 新建TSF应用

应用名填写snc-platform-node:

3.6 TSF新建部署组

部署组和应用需要进行关联:

3.7 TSF容器挂载nfs

snc-platform-node是比较特殊的服务,需要容器内外数据挂载,否则重启服务数据会丢失。
# 主机新建共享文件夹
echo "/data/nfs *(rw,sync,no_root_squash)" > /etc/exports
# 重新加载nfs配置
exportfs -rv
#查看nfs服务器挂载情况
showmount -e

3.8 部署组配置
1)TSF应用端口映射
采用主机端口访问的方式,将集群内的端口映射到主机,方便nginx访问。
上述cpu和内存限制根据需求调整,建议snc-cmdb-server和snc-cmdb-job、snc-aiops等调整到2G以上优化平台页面卡顿问题。
2)查看部署组服务容器日志
3查看集群所用微服务运行情况

优缺点

容器部署微服务具有以下优点:
  • 1)隔离性
    提供良好的隔离运行环境,保证了服务间的安全和稳定性;
  • 2)扩展性
    能够快速进行水平扩展,存在流量高峰时,根据策略自动调整实例以满足高并发等;
  • 3)版本控制
    控制服务更新和回滚变得更加可控和简单;
  • 4)可用性
    某台节点宕机后,能自动进行检测可活实例数量与预期一致,保障服务的可用性。
缺点:
  • 1)复杂性
    容器的微服务管理相比传统的架构更为复杂,提高了运维门槛;
  • 2)资源消耗
    一方面同样的服务可能需要比传统部署服务需要更多资源;
    另一方面不合理的资源分配可能导致某些微服务过载,而其他服务则是资源闲置;
  • 3)监控和日志
    随着微服务数量的增加,监控系统的复杂性和和开销也会随之增加,增加相应的运维成本;
  • 4)数据持久化管理
    对一些有状态的服务需要解决需要数据的持久化和一致性。
总的来说,可根据自身的业务需求和技术能力,权衡利与弊来制定合适的微服务部署策略。

TSF官方文档:https://cloud.tencent.com/document/product/649

END


本文作者:刘德云(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论