给网站写教案做课件一节课多少钱,百度竞价托管哪家好,嘉兴网站关键词排名,有哪些网站开发公司文章目录 前言Nacos集群搭建Spring cloud配置nacos将Springcloud项目部署在k8s写在最后 前言
相信很多同学都开发过以微服务为架构的系统#xff0c;开发微服务必不可少要使用注册中心#xff0c;比如nacos\consul等等。当然在自动化运维流行的今天#xff0c;我们也会将注… 文章目录 前言Nacos集群搭建Spring cloud配置nacos将Springcloud项目部署在k8s写在最后 前言
相信很多同学都开发过以微服务为架构的系统开发微服务必不可少要使用注册中心比如nacos\consul等等。当然在自动化运维流行的今天我们也会将注册中心部署在k8s集群中。今天我们就分享一期使用helm部署nacos到k8s集群并接入soringcloud项目各位大大敬请鉴赏。值得注意的是使用helm在k8s部署中间件应用真的比原始部署简单太多。
Nacos集群搭建
首先我们先从官网把nacos helm相关的代码down下来
git clone https://github.com/nacos-group/nacos-k8s.git然后进入到helm目录修改values.yaml文件下面是我的:
# Default values for nacos.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.global:#mode: standalonemode: cluster############################nacos###########################
namespace: nacos-cluster ## 命名空间
nacos:image:repository: nacos/nacos-servertag: latestpullPolicy: IfNotPresentplugin:enable: trueimage:repository: nacos/nacos-peer-finder-plugintag: 1.1pullPolicy: IfNotPresentreplicaCount: 3 ## 节点数podManagementPolicy: ParalleldomainName: cluster.localpreferhostmode: hostnameserverPort: 8848health:enabled: truestorage:#type: embedded type: mysql ## 用mysql保存配置信息db:host: mysql-cluster-primary.mysql-cluster.svc.cluster.localname: nacosport: 3306username: rootpassword: 123456rootparam: characterEncodingutf8connectTimeout1000socketTimeout3000autoReconnecttrueuseSSLfalseallowPublicKeyRetrievaltrueservice:#type: ClusterIPtype: NodePortport: 8848nodePort: 30000############################nacos###########################接着我们来安装nacos如下所示 #数据库增加nacos库 #创建命名空间
[rootmaster helm]# kubectl create ns nacos-clusternamespace/nacos-cluster created #安装nacos
[rootmaster helm]# helm install nacos-cluster -n nacos-cluster .NAME: nacos-cluster LAST DEPLOYED: Tue Sep 5 10:16:46 2023 NAMESPACE: nacos-cluster STATUS: deployed REVISION: 1 TEST SUITE: None NOTES:
Get the application URL by running these commands: export NODE_PORT ( k u b e c t l g e t − − n a m e s p a c e n a c o s − c l u s t e r − o j s o n p a t h . s p e c . p o r t s [ 0 ] . n o d e P o r t s e r v i c e s n a c o s − c s ) e x p o r t N O D E I P (kubectl get --namespace nacos-cluster -o jsonpath{.spec.ports[0].nodePort} services nacos-cs) export NODE_IP (kubectlget−−namespacenacos−cluster−ojsonpath.spec.ports[0].nodePortservicesnacos−cs)exportNODEIP(kubectl get nodes --namespace nacos-cluster -o jsonpath“{.items[0].status.addresses[0].address}”) echo http:// N O D E I P : NODE_IP: NODEIP:NODE_PORT/nacosMODE: standalone: you need to modify replicaCount in the values.yaml, .Values.replicaCount1 cluster: kubectl scale sts nacos-cluster-nacos --replicas3
#重新部署 的命令是 helm upgrade nacos-cluster -n nacos-cluster .
安装好了之后我们查看控制台显示是不是安装好了如下所示
[rootmaster helm]# kubectl get pods,svc -n nacos-clusterNAME READY STATUS RESTARTS AGE pod/nacos-cluster-0 0/1 Running 0 67s pod/nacos-cluster-1 0/1 Running 0 67s pod/nacos-cluster-2 0/1 Running 0 67s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/nacos-cs NodePort 10.98.1.221 8848:30040/TCP,9848:31784/TCP,9849:30165/TCP,7848:30000/TCP 67s service/nacos-hs ClusterIP None 8848/TCP,9848/TCP,9849/TCP,7848/TCP
很显然安装成功了然后我们获取一下ip和port
[rootnode2 ~]# export NODE_PORT$(kubectl get --namespace nacos-cluster -o jsonpath{.spec.ports[0].nodePort} services nacos-cs)export NODE_IP$(kubectl get nodes --namespace nacos-cluster -o jsonpath{.items[0].status.addresses[0].address})echo http://$NODE_IP:$NODE_PORT/nacos[rootnode2 ~]# export NODE_IP$(kubectl get nodes --namespace nacos-cluster -o jsonpath{.items[0].status.addresses[0].address})http://10.10.22.91:31673/nacos
这里说明一下因为nacos ui是通过http协议访问的而且8848端口是提供web访问的所以这里的8848对外的端口就是31673然后我们在浏览器中输入xxx.xxx.xxx.xxx:31673就可以访问了如下所示
Spring cloud配置nacos
nacos安装成功之后我们可以在springcloud中配置并使用下面是我的配置步骤 1、引入依赖包
modelVersion4.0.0/modelVersion
parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.12.RELEASE/versionrelativePath/ !-- lookup parent from repository --
/parent
groupIdcom.example/groupId
artifactIdk8s-demo/artifactId
version0.0.1-SNAPSHOT/version
namek8s-demo/name
descriptionDemo project for Spring Boot/description
propertiesjava.version8/java.versionspring-cloud.versionHoxton.SR10/spring-cloud.version
/properties!-- nacos start --
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactIdversion2.2.3.RELEASE/version
/dependency
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactIdversion2.2.3.RELEASE/version
/dependency
!-- nacos end --dependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies
/dependencyManagement2、配置启动类
/*** K8sDemoApplication* return a* author senfel* date 2023/9/5 15:02*/
SpringBootApplication
EnableDiscoveryClient
public class K8sDemoApplication {public static void main(String[] args) {SpringApplication.run(K8sDemoApplication.class, args);}}3、配置bootstrap.yaml 注意nacos在springcloud中对应的端口是暴露外网端口30040
server:port: 9999
spring:application:name: test-demoprofiles:active: devredis:host: 10.10.22.91port: 30617password: 123456pwtimeout: 5000database: 0jedis:pool:max-active: 1000max-idle: 50min-idle: 4cloud:nacos:config:server-addr: 10.10.22.82:30040,10.10.22.91:30040,10.10.22.199:30040username: nacospassword: nacosfile-extension: yamldiscovery:server-addr: 10.10.22.82:30040,10.10.22.91:30040,10.10.22.199:30040username: nacospassword: nacos
设置完成启动正常。
注意如果新增配置报参数异常 1.删掉config_info 和 his_config_info 表中的encrypted_data_key字段 2.config_info 和 his_config_info 表中非空encrypted_data_key字段设置为可以为空
将Springcloud项目部署在k8s
在上述配置的基础上 在k8s集群中用域名进行配置
server:port: 9999
spring:application:name: test-demoprofiles:active: devredis:host: 10.10.22.91port: 30617password: 123456pwtimeout: 5000database: 0jedis:pool:max-active: 1000max-idle: 50min-idle: 4cloud:nacos:config:server-addr: nacos-cs.nacos-cluster.svc.cluster.local:8848username: nacospassword: nacosfile-extension: yamldiscovery:server-addr: nacos-cs.nacos-cluster.svc.cluster.local:8848username: nacospassword: nacos注意headless 服务没有负载均衡一般集群我们都访问普通svc
增加配置 pom.xml
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-hystrix/artifactId
/dependency
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId
/dependency启动类开启feign client EnableFeignClients增加测试feign代码 DemoService
/*** test feign* author senfel* version 1.0* date 2023/9/5 16:18*/
Service
FeignClient(value k8s-demo,fallback FailDemoService.class)
public interface DemoService {/*** test feign*/GetMapping(/feign)String feign(RequestParam String str);
}FailDemoService
/*** FailDemoService* author senfel* version 1.0* date 2023/9/5 16:20*/
Slf4j
Service
public class FailDemoService implements DemoService {Overridepublic String feign(String str) {log.error(调用feign传入参数{}已降级。,str);return null;}
}AppController
/*** AppController {* author senfel* version 1.0* date 2023/9/5 16:25*/
Slf4j
RestController
public class AppController {Value(${app.name})private String appName;Resourceprivate DemoService demoService;/*** getRedisValueByKey* param key* author senfel* date 2023/8/31 16:22* return java.lang.String*/GetMapping(/getRedisValueByKey)public String getRedisValueByKey(String key){try{if(null key){return null;}String str RedisUtil.getString(key);log.error(获取redis中key:{}的数据为{},key,str);log.error(测试nacos配置app.name:{},appName);str redis-keystr,nacos-appName:appName;//调用feignString feign demoService.feign(str);return feign;}catch (Exception e){e.printStackTrace();return e.getMessage();}}/*** feign* param str* author senfel* date 2023/9/5 16:26* return java.lang.String*/GetMapping(feign)public String feign(RequestParam String str){try{InetAddress address InetAddress.getLocalHost();System.out.println(address.getHostName());//主机名System.out.println(address.getCanonicalHostName());//主机别名System.out.println(address.getHostAddress());//获取IP地址}catch (Exception e){e.printStackTrace();}return str-feign-success;}
}制作app镜像 Dockerfile
# version 1.0
# 基础镜像
FROM openjdk:8-jre
# 维护人
MAINTAINER senfel187sina.cn
# 创建目录
RUN mkdir -p /home/app
# 拷贝项目jar
COPY ./target/k8s-demo-0.0.1-SNAPSHOT.jar /home/app/app.jar
# 执行命令启动jar
ENTRYPOINT [java,-jar,/home/app/app.jar]
# 暴露端口
EXPOSE 9999将本地jar打包成镜像并提交到云仓库
docker build -t k8s-demo-nacos:v1.0.0 .编写kube执行文件 kube-k8s-demo-nacos.yaml
apiVersion: apps/v1
kind: Deployment # 声明一个Deployment资源对象
metadata:name: deployment-myapp
spec:replicas: 3 # 通过replicas声明pod个数是3selector: # 通过标签选择被控制的podmatchLabels:app: myapptemplate: # 在template中定义podmetadata:labels: # 给pod打上标签appmyappapp: myappspec:containers:- name: myapp # 声明容器名称注意不是pod名称pod名称应该定义在metadata中image: registry.cn-hangzhou.aliyuncs.com/senfel/k8s-demo-nacos:v1.0.0ports:- name: httpcontainerPort: 9999
--- # 在一个yaml文件中通过---分割多个资源对象
apiVersion: v1
kind: Service # 声明一个Service资源对象
metadata:name: service-myapp
spec:type: NodePortselector: # service-myapp将选择标签包含appmyapp的podapp: myappports:- name: httpport: 9999 # Service监听端口targetPort: 9999 # 转发到后端Pod的端口号protocol: TCP # tcp协议nodePort: 30999 # 外网访问端口范围30000-32767执行kube
kubectl apply -f kube-k8s-demo-nacos.yaml查看执行结果
[rootmaster k8s]# kubectl get pods,svc | grep apppod/deployment-myapp-9c6fb8dd9-jvmwl 1/1 Running 0 14m pod/deployment-myapp-9c6fb8dd9-z64zj 1/1 Running 0 14m pod/deployment-myapp-9c6fb8dd9-zklpc 1/1 Running 0 14m service/service-myapp NodePort 10.102.62.181 9999:30999/TCP 14m #删除pod svc
kubectl delete -f kube-k8s-demo-nacos.yaml查看nacos情况 配置列表
服务集群
测试app集群是否正常服务 posman测试
写在最后
在k8s中部署nacos还是使用helm比较简单直接下载安装包修改配置文件安装即可。我们在Springcloud、Springboot项目中集成nacos需要注意需要使用集群内部地址当我们将项目部署在k8s集群中可以直接使用nacos配置和查询服务集群。