2022年10月更文挑战19-k8s进行nacos单体项目部署

115 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情

k8s进行nacos单体项目部署

前文

本文内容主要是利用k8s进行单体nacos进行部署时的一些操作步骤及经验总结,其中不完整的包含一部分的配置文件信息,主要是笔记性质的经验总结。

k8s部署nacos

nacos是非常常见的一种注册及配置中心,主要是作为微服务项目的注册及配置功能进行使用。因此很显然,在进行nacos部署时,我们会将其部署为一个有状态的工作负载。而根据nacos本身的特性,会将nacos的若干配置信息存储在mysql数据库之中,因此我们的部署顺序为先部署mysql再部署nacos。

mysql的部署

首先要进行有状态mysql的部署。该部署与常规有状态应用的部署一致,只用于后续的nacos访问,不需要进行外部端口暴露,因此不需要额外的服务部署。

configMap部署

这是一个配置信息的部署,主要是用于存储mysql中相关的数据信息。方便在进行mysql账户信息修改时,容器中可以直接进行应用,无需进行yaml文件的重写。

kind: ConfigMap
apiVersion: v1
metadata:
  name: nacos-mysql
  namespace: global
  annotations:
    kubesphere.io/creator: admin
data:
  mysql.db.name: nacos
  mysql.password: '123456'
  mysql.port: '3306'
  mysql.user: nacos

nacos部署

后续就涉及到nacos的部署,其中需要进行mysql信息的指定,也就是要利用到前面所部署的configMap。通过相关信息的配置,nacos会将数据存储到我们部署的mysql之中,实现数据的持久化。

kind: StatefulSet
apiVersion: apps/v1
metadata:
  name: nacos
  namespace: global
  labels:
    app: nacos
  annotations:
    kubesphere.io/creator: admin
== 省略局部
      containers:
        - name: nacos
          image: 'nacos/nacos-server:v2.1.1'
          ports:
            - name: tcp-8848
              containerPort: 8848
              protocol: TCP
          env:
            - name: MYSQL_SERVICE_DB_NAME
              valueFrom:
                configMapKeyRef:
                  name: nacos-mysql
                  key: mysql.db.name
            - name: MYSQL_SERVICE_PASSWORD
              valueFrom:
                configMapKeyRef:
                  name: nacos-mysql
                  key: mysql.password
            - name: MYSQL_SERVICE_PORT
              valueFrom:
                configMapKeyRef:
                  name: nacos-mysql
                  key: mysql.port
            - name: MYSQL_SERVICE_USER
              valueFrom:
                configMapKeyRef:
                  name: nacos-mysql
                  key: mysql.user
            - name: NACOS_SERVER_PORT
              value: '8848'
            - name: NACOS_APPLICATION_PORT
              value: '8848'
            - name: PREFER_HOST_MODE
              value: hostname
            - name: TZ
              value: Asia/Shanghai
            - name: MODE
              value: standalone

外部访问服务的部署

由于nacos要从k8s外直接进行访问,因此我们还需要部署一个nodeport类型的服务,保证nacos可以直接从外部进行访问。

ports:
    - name: http-8848
      protocol: TCP
      port: 18848
      targetPort: 8848
      nodePort: 32616

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。