k8s部署nacos2.0.3

1 在k8s中部署的难点 ,最主要是k8s中部署的无状态depolyment服务没有固定的ip地址,
2 nacos集群部署需要配置所有实例的ip,在k8s中通过StatefulSet和Headless Service
为每个nacos实例生成一个唯一的dns地址,创建一个普通Service给可客户端使用

版本: nacos2.0.3

2前提前提条件:


mysql 8.0

Ingress Controller (用于ingress暴露方式)
3 实现方式
3.1 创建数据库配置
vim nacos-mysql-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
   name: nacos-cm
data:
   mysql.host: "192.168.1.211"
   mysql.db.name: "nacos_config"
   mysql.port: "12345"
   mysql.user: "root"
   mysql.password: "root"

kubectl apply   -f  nacos-mysql-config.yaml
注意:我是直接现有mysql的nacos库,如果要新建数据库必须先在数据库新建名称为nacos_config的库并导入对应nacos2.0.3下config/nacos-mysql.sql脚本导入到nacos_config库

3.2 部署Headless Service
Headless Service为每个pod(nacos实例)生成一个DNS地址,用作NACOS_SERVERS配置

vim nacos-headless.yaml

apiVersion: v1
kind: Service
metadata:
   name: nacos-headless
   labels:
     app: nacos
   annotations:
     service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
   ports:
     - port: 8848
       name: server
       targetPort: 8848
   clusterIP: None
   selector:
     app: nacos

kubectl apply   -f  nacos-headless.yaml

3.3 通过StatefulSet部署nacos
StatefulSet部署方式为每个POD生成固定的名称,如nacos-0、nacos-1、nacos-2等。

vim nacos-StatefulSet.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
   name: nacos
spec:
   serviceName: nacos-headless
   replicas: 3
   template:
     metadata:
       labels:
         app: nacos
       annotations:
         pod.alpha.kubernetes.io/initialized: "true"
     spec:
       affinity:
         podAntiAffinity:
           requiredDuringSchedulingIgnoredDuringExecution:
             - labelSelector:
                 matchExpressions:
                   - key: "app"
                     operator: In
                     values:
                       - nacos-headless
               topologyKey: "kubernetes.io/hostname"
       containers:
         - name: k8snacos
           imagePullPolicy: Always
           image: nacos/nacos-server:2.0.3
           resources:
             requests:
               memory: "2Gi"
               cpu: "500m"
           ports:
             - containerPort: 8848
               name: client
           env:
             - name: NACOS_REPLICAS
               value: "3"
             - name: MYSQL_SERVICE_HOST
               valueFrom:
                 configMapKeyRef:
                   name: nacos-cm
                   key: mysql.host
             - name: MYSQL_SERVICE_DB_NAME
               valueFrom:
                 configMapKeyRef:
                   name: nacos-cm
                   key: mysql.db.name
             - name: MYSQL_SERVICE_PORT
               valueFrom:
                 configMapKeyRef:
                   name: nacos-cm
                   key: mysql.port
             - name: MYSQL_SERVICE_USER
               valueFrom:
                 configMapKeyRef:
                   name: nacos-cm
                   key: mysql.user
             - name: MYSQL_SERVICE_PASSWORD
               valueFrom:
                 configMapKeyRef:
                   name: nacos-cm
                   key: mysql.password
             - name: MODE
               value: "cluster"
             - name: NACOS_SERVER_PORT
               value: "8848"
             - name: PREFER_HOST_MODE
               value: "hostname"
             - name: NACOS_SERVERS
               value: "nacos-0.nacos-headless.default.svc.cluster.local:8848 nacos-1.nacos-headless.default.svc.cluster.local:8848 nacos-2.nacos-headless.default.svc.cluster.local:8848"
   selector:
     matchLabels:
       app: nacos

kubectl apply   -f  nacos-StatefulSet.yaml

3.4 部署普通Service
vim nacos-service.yaml
apiVersion: v1
kind: Service
metadata:
   name: nacos-service
   namespace: default
   annotations:
     nginx.ingress.kubernetes.io/affinity: "true"
     nginx.ingress.kubernetes.io/session-cookie-name: backend
     nginx.ingress.kubernetes.io/load-balancer-method: drr

spec:
   selector:
     app: nacos
   ports:
     - name: web
       port: 80
       targetPort: 8848
       nodePort:  8848
   type: NodePort

kubectl apply   -f  nacos-service.yaml
或者使用下面的ingress,也可以一起使用
3.5 配置Ingress
vim ingress-nacos.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
   name: nacos-web
   namespace: default

spec:
   rules:
     - host: nacos-web.nacos-demo.com
       http:
         paths:
           - path: /nacos
             backend:
               serviceName: nacos-service
               servicePort: 8848

kubectl 执行一键生成脚本:

kubectl apply   -f  ingress-nacos.yaml

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值