在microk8s上部署springcloud的配置中心服务

在部署完注册中心服务后,部署配置中心服务比较简单。注册中心使用k8s 的statefulSet部署,而配置中新只需要使用Deployment方式部署,通过创建Service来对外暴露服务。

配置中新的代码书写,直接参看spring cloud config即可。我们的项目用的是接入DB的方式。需要配置数据源。

配置中新的改造首先想到的也是需要创建一个k8s的application 属性文件。通过在deployment文件中生命使用k8s的profile.  k8s profile如下:

这里注意defaultZone, 域名部分,如果只写pod名称则会发现无法连接,这是使用statefulSet后使用域名访问Pod的访问方式。

对应的得deloyment文件和Service文件,如下:

在Service文件中,我们使用了NodePort的类型,方便在node节点,开一个端口测试,实际使用时应该使用ClusterIP方式,拒绝机群外部访问。

Deployment 的spec.template.spec.container[0].command部分定义了启动命令和启用k8sprofile的参数,与部署Eureka相同,这个参数放在args中不起作用,只能放在这个位置,并且需要注释掉Dockerfile的相同参数。

  command: ["java", "-jar","config-central.jar","--spring.profiles.active=k8s"]

使用microk8s appliy -f 命令创建Deployment和Service:

microk8s kubectl create -f config-central-deployment.yaml

microk8s kubectl create -f config-central-service.yaml

登陆Eureka的管理页面,查看服务注册:

新开一个命令行,输入: microk8s kubectl port-forward pod/register-central-0 8090:9090, 然后从node节点通过浏览器访问,可以看拿到config-server注册成功了。


使用浏览器调用配置中心接口:

通过浏览访问Node节点30007端口,通过Serice的nodetype方式调用配置中心接口,可以看到数据调用成功。

其中besra是我们通过配置中新数据库配置的一个微服务,dev指明是开发profile。


以上方式已经成功部署了配置中心, 但是还有缺点:需要将生产环境配置和密码需要写在k8s的配置文件中与项目一起打包。所以对于正式产品的运维来说是不够的。我们需要使用secret + 命令行挂在properties文件的方式尝试实现配置中新的部署。

首先创建一个configmap资源的yaml文件,在各configmap资源中,我们定义了application.properties,将所有需要的属性文件(处数据库用户名,密码外),写在了这个Properties文件中。

现在需要修改Deployment文件:

1。首先增加Volumes  ,使用Volume的方式挂在configMap资源

 Volumes 和 Contianers是在一个等级,缩进时须注意。

volumes:

        # You set volumes at the Pod level, then mount them into containers inside that Pod

        - name: config

          configMap:

            # Provide the name of the ConfigMap you want to mount.

            name: configcentral-configmap

            # An array of keys from the ConfigMap to create as files

            items:

              - key: "application.properties"

                path: "application.properties"

2.  然后将configmap 声明的配置文件,挂在到容器下面

volumeMounts:                   #volumeMounts 是在具体的容器下面,和Image一个等级

            - name: demo-config

              mountPath: /opt/application.properties

              subPath: application.properties

              readOnly: true

3.  增加命令行参数

去掉Command里对profile.active的声明,命令行注入application.properties文件和用户名密码。

这些也可以写在args参数部分。

containers:

        - name: wingspan-configcentral

          image: com.lifeccp/config-central:1.0.0

          #args: ["--spring.datasource.username=devops","--spring.datasource.password= woshidba__1"]

          command: ["java", "-jar","config-central.jar","--spring.datasource.username=xxxxxxx","--spring.datasource.password= xxxxxxx","--spring.config.location=/opt/application.properties"]

部分内容截图如下:

现在更新Service中定义的端口好,使用心得9001.

创建完后,使用mirok8s kubectl apply  -f  重新更新configMap, deployment, 和service:

microk8s kubectl apply -f conig-central-configmap.yaml

microk8s kubectl apply -f config-central-deployment.yaml

microk8s kubectl apply -f config-central-service.yaml

重新启动浏览器,访问30007端口:

使用ConfigMap通过命令行挂属性文件的方式,解决了k8s上的配置问题,不用每次都打包。

现在剩余密码的明文问题,这里我们尝试使用secret + 环境变量的方式,仍旧通过springboot的命令行参数注入。

1.  对用户名和密码生成base64密文  


2. 手动创建secret yaml文件

请使用正确密文替换base64字符串

3. 修改Deloyment文件,增加环境变量,引用secret;同时修改命令行参数,引用环境变量 :

4. 使用Apply 命令创建secret 和 更新Deployment

microk8s kubectl apply -f config-central-secret.yaml

microk8s kubectl apply -f config-central-deployment.yaml

检查Pod可以看到,创建了新的config-cnetral 实例。

5. 从浏览器30007端口访问微服务的配置,工作正常 

到这里,通过microk8s 部署springboot的配置中心的工作已经结束,也达到了我们的目标。总共创建了4个配置文件:

1.  Deployment 文件 :config-central-deployment.yaml

2. Service文件:  config-central-service.yaml

3. config map文件: conig-central-configmap.yaml

4. secret 文件: config-central-secret.yaml

configMap文件和secret文件通过k8s来维护,开发工程师不比要在知道测试与生产环境的配置。

这些配置也不再打包到项目里。

你可能感兴趣的:(在microk8s上部署springcloud的配置中心服务)