持续创作,加速成长!这是我参与「掘金日新计划 · 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
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。