首页 > 其他分享 >使用腾讯云Kubernetes部署SpringBoot项目

使用腾讯云Kubernetes部署SpringBoot项目

时间:2024-04-08 21:26:22浏览次数:12  
标签:SpringBoot Kubernetes spring 腾讯 rbac reader k8s config name

使用流程

创建集群

创建 Serverless 类型的kubernetes集群(更加简单),不需要集群管理费用,但创建容器还是收费的。

创建容器

要确保当前账号有充足的余额

在创建过程中,主要选择镜像,可以从自己的镜像仓库(需要先将自己的SpringBoot项目创建docker镜像并推送到远程仓库),或者 Docker 公共仓库来选择。

通过对应的IP来访问

连接集群

安装 Kubectl 工具

这是 k8s 提供的客户端操作工具

curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.22.5/bin/linux/amd64/kubectl

根据实际需求,将命令行中的 “v1.22.5” 替换成业务所需的 Kubectl 版本。客户端的 Kubectl 与服务端的 Kubernetes 的最高版本需保持一致,可以在基本信息的“集群信息”模块里查看 Kubernetes 版本。

chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl

开启集群访问

获取 KubeConfig

配置 KubeConfig 并访问 Kubernetes 集群

如果 ~/.kube/config 文件内容为空,可直接复制已获取的 Kubeconfig 访问凭证内容并粘贴入 ~/.kube/config 中。若客户端无 ~/.kube/config 文件,可直接创建。

完成 Kubeconfig 配置后,依次执行以下命令查看并切换 context 以访问本集群。

kubectl config get-contexts
kubectl config use-context xxxx
kubectl get node

如果无法连接请查看是否已经开启公网访问或内网访问入口,并确保访问客户端在指定的网络环境内。

部署Springboot项目

使用springboot项目镜像创建Deployment,容器启动会报错

User "system:serviceaccount:pro:default" cannot get resource

应该是用户权限的问题,但具体解决方法未知。

解决上面用户权限的问题

securityContext: {} # 原有的
serviceAccount: config-reader
serviceAccountName: config-reader

在创建的Deployment的yaml文件中添加此配置,表示使用此serviceAccount,和springboot项目中的username一致。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  creationTimestamp: "2023-01-06T06:38:11Z"
  labels:
    cloud.tencent.com/tke-rbac-generated: "true"
  managedFields:
  - apiVersion: rbac.authorization.k8s.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:labels:
          .: {}
          f:cloud.tencent.com/tke-rbac-generated: {}
      f:rules: {}
    manager: dashboard
    operation: Update
    time: "2023-01-06T06:38:11Z"
  name: config-reader
  selfLink: /apis/rbac.authorization.k8s.io/v1/clusterroles/config-reader
  uid: 76e0ba7c-4b1b-4f5b-9a74-219d2e8c1eb2
rules:
- apiGroups:
  - '*'
  resources:
  - 'configmaps'
  verbs:
  - '*'

创建一个集群角色config-reader,拥有configmaps的所有权限

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  creationTimestamp: "2023-01-06T06:29:45Z"
  managedFields:
  - apiVersion: rbac.authorization.k8s.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:roleRef: {}
      f:subjects: {}
    manager: nightsWatch
    operation: Update
    time: "2023-01-06T06:29:45Z"
  name: config-reader
  selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/config-reader
  uid: fd03faac-254b-4228-94b8-1bae50627671
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: config-reader
subjects:
- kind: ServiceAccount
  name: config-reader
  namespace: pro

创建用户和角色的关联关系,将ServiceAccount和ClusterRole关联。这样config-reader这个用户就拥有了configmaps的权限。

此时通过Service提供的对外IP就可以访问了 (http://xxx:8080/k8s2/test)。

项目关系

  • spring-k8s01: 供客户端调用,内部使用feign框架来调用spring-k8s02的接口
  • spring-k8s02: 供spring-k8s01调用

调用方法:服务名:port,k8s会自动获取到对应的容器(内部通过 ingress 做负载均衡)。

项目配置

maven依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-kubernetes-all</artifactId>
    <version>1.1.7.RELEASE</version>
</dependency>

spring配置

spring:
  application:
    name: k8s
  profiles:
    active: pro
  main:
    allow-bean-definition-overriding: true
  cloud:
    kubernetes:
      discovery:
        all-namespaces: false
        service-name: ${spring.application.name}
      config:
        enabled: true
        namespace: ${spring.profiles.active}
        sources:
          - name: k8s-config
      reload:
        enabled: true
        monitoring-config-maps: true
        monitoring-secrets: true
        strategy: RESTART_CONTEXT
        mode: EVENT
      client:
        namespace: ${spring.profiles.active}
        username: config-reader
    loadbalancer:
      ribbon:
        enabled: true

主要是 username,要和腾讯云k8s 中的账号对应上。

总结

耗费了大量时间(2天左右)和大量钱财(几十块钱),终于将springboot项目在k8s环境运行起来了,

标签:SpringBoot,Kubernetes,spring,腾讯,rbac,reader,k8s,config,name
From: https://www.cnblogs.com/strongmore/p/18049565

相关文章

  • Kubernetes有状态任务
    有状态任务是指执行期间需要维护一定状态或数据的任务或工作。这些任务通常需要记录并维护数据、状态、上下文或进度信息,并且这些信息在任务执行期间保持持久。有状态任务的解决目标是确保任务在不同的环境、节点或时间点之间维持一致的状态和标识。这种任务通常需要持久性存储......
  • 06-SpringBootWeb快速入门
        ......
  • Springboot + mybatis-plus项目
    作为小白第一次做了一个Springboot+mybatis-plus的demo总结和分享一下心得。 在Plugins里面下载mybatisX搭建srping初始环境<!--使用mybatis-plus需要导入的依赖:--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</ar......
  • 在springboot项目中上传文件
    在springboot项目中上传文件需要用到FlieUtil工具类:publicclassFileUtil{ publicstaticbyte[]FileToByte(Filefile)throwsIOException{ //将数据转为流 @SuppressWarnings("resource") InputStreamcontent=newFileInputStream(file); ByteArrayOutpu......
  • 基于SpringBoot+微信小程序的智慧医疗线上预约小程序
    一、项目背景介绍:近年来,随着互联网技术的不断发展,人们的生活和工作方式也在逐渐改变。其中,医疗行业也受到了极大的影响。由于传统医疗行业存在着很多问题,例如就医难、看病贵等,因此出现了许多新型医疗模式。线上预约挂号是其中一种新型医疗模式,它通过互联网技术与现代医学......
  • SpringBoot拦截器注入stringredistemplate出现Consider defining a bean of type 'org
    问题自定义拦截器需要注入StringRedisTemplate来通过token获取redis中的数据自定义拦截器代码@ComponentpublicclassLoginInterceptorimplementsHandlerInterceptor{@AutowiredprivateStringRedisTemplatestringRedisTemplate;@Overridepublicb......
  • 【腾讯云限时优惠】抓紧机会使用您的专属代金券!
    ......
  • SSM项目转Springboot项目
    SSM项目转Springboot项目由于几年前写的一个ssm项目想转成springboot项目,所以今天倒腾了一下。最近有人需要毕业设计转换一下,所以我有时间的话可以有偿帮忙转换,需要的私信我或+v:Arousala_首先创建一个新的springboot的工程,然后复制一下相关的依赖<?xmlversion="1.0"enc......
  • springboot~mybatis统一处理公有字段
    对于实体中包含有公共字段,像create_at,create_time,update_at,update_time来说,我们没有必要在每个实体的crud操作中复制同样的代码,这样代码的味道很坏,我们应该使用mybatis的拦截器机制,将公共字段统一处理;当然mybatis-puls在实现上更加优雅,它帮我们封装了MetaObjectHandler接口,我们......
  • 基于springboot+vue+Mysql的学习平台
    开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示平台首页用户注册课程信息作业信息资料信息个人中心管理员功能界面学生管理教师管理课程......