暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

EKS企业实战(九)--- 在EKS中部署nacos配置中心(集群模式)

耶喝运维 2020-08-18
3808

在eks中部署nacos配置中心,我们使用的是官方的helm,但是要魔改一版
首先down下来官方的helm

git clone https://github.com/nacos-group/nacos-k8s.git

复制

然后我们cp 他们的helm出来到本地

mv nacos-k8s/helm/ ./nacos

复制

然后我们进去nacos里大改特改(阿里这哥们helm写的太low了,跟我水平差不多)

首先删掉内置的mysql

rm charts/mysql/ -rf

复制

修改configmap

修改一下congigmap,添加namespace支持跟helm一个namespace并且新加一个"mysql.host"字段

apiVersion: v1
kind: ConfigMap
metadata:
  name: nacos-cm
  namespace: {{ .Release.Namespace }}   # 添加的
data:
  mysql.host: "xxxx"                    # 添加的
  mysql.db.name: "xxxx"
  mysql.port: "xxxx"
  mysql.user: "xxxx"
  mysql.password: "xxxx"

复制

修改storageclass.yaml

nacos要求用持久化存储,efs搞起。创建三个pvc分别给nacos的data、plugin、log 使用

{{- if and .Values.persistence.enabled .Values.persistence.datadirstorageClassName }}
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
   name: {{ .Values.persistence.datadirstorageClassName }}
provisioner: aws.io/aws-efs

---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: {{ .Values.persistence.datadirstorageClassName }}
  namespace: {{ .Release.Namespace }}
  annotations:
    volume.beta.kubernetes.io/storage-class: {{ .Values.persistence.datadirstorageClassName }}
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi
{{- end }}

{{- if and .Values.persistence.enabled .Values.persistence.plugindirstorageClassName }}
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: {{ .Values.persistence.plugindirstorageClassName }}
provisioner: aws.io/aws-efs

---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: {{ .Values.persistence.plugindirstorageClassName }}
  namespace: {{ .Release.Namespace }}
  annotations:
    volume.beta.kubernetes.io/storage-class: {{ .Values.persistence.plugindirstorageClassName }}
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi
{{- end }}

{{- if and .Values.persistence.enabled .Values.persistence.logdirstorageClassName }}
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: {{ .Values.persistence.logdirstorageClassName }}
provisioner: aws.io/aws-efs

---

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: {{ .Values.persistence.logdirstorageClassName }}
  namespace: {{ .Release.Namespace }}
  annotations:
    volume.beta.kubernetes.io/storage-class: {{ .Values.persistence.logdirstorageClassName }}
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi
{{- end }}

复制

修改service.yaml

EKS中不需要使用nodeport的方式,所以改成了clusterip,hs是给内网服务发现cs是给外网暴露ui的

{{- if and (eq .Values.global.mode "cluster") }}
apiVersion: v1
kind: Service
metadata:
  name: nacos-hs
  namespace: {{ .Release.Namespace }}
  annotations:
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
  clusterIP: None
  ports:
    - port: {{ .Values.service.port }}
      targetPort: http
      protocol: TCP
      name: http
  selector:
    app.kubernetes.io/name: {{ include "nacos.name" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
---
apiVersion: v1
kind: Service
metadata:
  name: nacos-cs
  namespace: {{ .Release.Namespace }}
  labels:
{{- toYaml .Values.service.labels | nindent 4 }}
  annotations:
{{- toYaml .Values.service.annotations | nindent 4 }}
spec:
  type: {{ .Values.service.type }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort: http
      protocol: TCP
      name: http
      {{- if eq .Values.service.type "NodePort" }}
      nodePort: {{ .Values.service.nodePort }}
      {{- end }}
  selector:
    app.kubernetes.io/name: {{ include "nacos.name" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}

复制

修改deployment.yaml

魔改一下删了好多跟单点相关的

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: {{ .Release.Name }}
  namespace: {{ .Release.Namespace }}
  annotations: 
  {{- toYaml .Values.annotations | indent 4 }}
spec:
  serviceName: nacos-hs
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ include "nacos.name" . }}
      app.kubernetes.io/instance: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app.kubernetes.io/name: {{ include "nacos.name" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
    spec:
      initContainers:
        - name: peer-finder-plugin-install
          image: nacos/nacos-peer-finder-plugin:1.0
          imagePullPolicy: Always
          volumeMounts:
            - mountPath: /home/nacos/plugins/peer-finder
              name: plugindir
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - name: http
              containerPort: {{ .Values.env.serverPort }}
              protocol: TCP
          resources:
            {{- toYaml .Values.resources | nindent 12 }}
          env:
          - name: NACOS_REPLICAS
            value"3"
          - name: SERVICE_NAME
            value"nacos-hs"
          - name: DOMAIN_NAME
            value: {{ .Values.env.domainName | quote }}
          - name: POD_NAMESPACE
            valueFrom:
              fieldRef:
                apiVersion: v1
                fieldPath: metadata.namespace
          - name: PREFER_HOST_MODE
            value: {{ .Values.env.preferhostmode | quote }}
            {{- if .Values.env.dbHost  }}
          - name: MYSQL_SERVICE_HOST
            value: {{ .Values.env.dbHost | quote }}
            {{- end }}
          - 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: NACOS_SERVER_PORT
            value: {{ .Values.env.serverPort | quote }}
          - name: NACOS_APPLICATION_PORT
            value: {{ .Values.env.serverPort | quote }}
          volumeMounts:
            - name: plugindir
              mountPath: /home/nacos/plugins/peer-finder
            - name: datadir
              mountPath: /home/nacos/data
            - name: logdir
              mountPath: /home/nacos/logs
      volumes:
        - name: datadir
          persistentVolumeClaim:
            claimName: {{ .Values.persistence.datadirstorageClassName }}
        - name: plugindir
          persistentVolumeClaim:
            claimName: {{ .Values.persistence.plugindirstorageClassName }}
        - name: logdir
          persistentVolumeClaim:
            claimName: {{ .Values.persistence.logdirstorageClassName }}
    {{- with .Values.nodeSelector }}
      nodeSelector:
        {{- toYaml . | nindent 8 }}
    {{- end }}
    {{- with .Values.affinity }}
      affinity:
        {{- toYaml . | nindent 8 }}
    {{- end }}
    {{- with .Values.tolerations }}
      tolerations:
        {{- toYaml . | nindent 8 }}
    {{- end }}

复制

修改value.yaml

global:
 storageClass: 
   provisioneri: aws.io/aws-efs 


############################nacos###########################
replicaCount: 3

image:
  repository: nacos/nacos-server
  tag: latest
  pullPolicy: IfNotPresent

health:
  enabled: false

env:
  domainName: cluster.local
  preferhostmode: hostname
  serverPort: 8848

persistence:
  enabled: true
  datadirstorageClassName: "nacos-data"
  plugindirstorageClassName: "nacos-plugin"
  logdirstorageClassName: "nacos-log"

service:
  type: ClusterIP
  #type: NodePort
  port: 8848
  #nodePort: 30000


resources: 
  limits:
     cpu: 500m
     memory: 2Gi
  requests:
     cpu: 500m
     memory: 2Gi
annotations: {}

nodeSelector: {}

tolerations: []

affinity: {}

复制

修改完成之后首先导入sql
登录数据库之后source sql文件

/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info   */
/******************************************/
CREATE TABLE `config_info` (
  `id` bigint(20NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255NOT NULL COMMENT 'data_id',
  `group_id` varchar(255DEFAULT NULL,
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128DEFAULT NULL,
  `tenant_id` varchar(128DEFAULT '' COMMENT '租户字段',
  `c_desc` varchar(256DEFAULT NULL,
  `c_use` varchar(64DEFAULT NULL,
  `effect` varchar(64DEFAULT NULL,
  `type` varchar(64DEFAULT NULL,
  `c_schema` text,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_aggr   */
/******************************************/
CREATE TABLE `config_info_aggr` (
  `id` bigint(20NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255NOT NULL COMMENT 'data_id',
  `group_id` varchar(255NOT NULL COMMENT 'group_id',
  `datum_id` varchar(255NOT NULL COMMENT 'datum_id',
  `content` longtext NOT NULL COMMENT '内容',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `app_name` varchar(128DEFAULT NULL,
  `tenant_id` varchar(128DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_beta   */
/******************************************/
CREATE TABLE `config_info_beta` (
  `id` bigint(20NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255NOT NULL COMMENT 'data_id',
  `group_id` varchar(128NOT NULL COMMENT 'group_id',
  `app_name` varchar(128DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_tag   */
/******************************************/
CREATE TABLE `config_info_tag` (
  `id` bigint(20NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255NOT NULL COMMENT 'data_id',
  `group_id` varchar(128NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128DEFAULT '' COMMENT 'tenant_id',
  `tag_id` varchar(128NOT NULL COMMENT 'tag_id',
  `app_name` varchar(128DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_tags_relation   */
/******************************************/
CREATE TABLE `config_tags_relation` (
  `id` bigint(20NOT NULL COMMENT 'id',
  `tag_name` varchar(128NOT NULL COMMENT 'tag_name',
  `tag_type` varchar(64DEFAULT NULL COMMENT 'tag_type',
  `data_id` varchar(255NOT NULL COMMENT 'data_id',
  `group_id` varchar(128NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128DEFAULT '' COMMENT 'tenant_id',
  `nid` bigint(20NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`nid`),
  UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  KEY `idx_tenant_id` (`tenant_id`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = group_capacity   */
/******************************************/
CREATE TABLE `group_capacity` (
  `id` bigint(20unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `group_id` varchar(128NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  `quota` int(10unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  `max_aggr_size` int(10unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_group_id` (`group_id`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (
  `id` bigint(64unsigned NOT NULL,
  `nid` bigint(20unsigned NOT NULL AUTO_INCREMENT,
  `data_id` varchar(255NOT NULL,
  `group_id` varchar(128NOT NULL,
  `app_name` varchar(128DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL,
  `md5` varchar(32DEFAULT NULL,
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `src_user` text,
  `src_ip` varchar(20DEFAULT NULL,
  `op_type` char(10DEFAULT NULL,
  `tenant_id` varchar(128DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`nid`),
  KEY `idx_gmt_create` (`gmt_create`),
  KEY `idx_gmt_modified` (`gmt_modified`),
  KEY `idx_did` (`data_id`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = tenant_capacity   */
/******************************************/
CREATE TABLE `tenant_capacity` (
  `id` bigint(20unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` varchar(128NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  `quota` int(10unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  `max_aggr_size` int(10unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_id` (`tenant_id`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';


CREATE TABLE `tenant_info` (
  `id` bigint(20NOT NULL AUTO_INCREMENT COMMENT 'id',
  `kp` varchar(128NOT NULL COMMENT 'kp',
  `tenant_id` varchar(128default '' COMMENT 'tenant_id',
  `tenant_name` varchar(128default '' COMMENT 'tenant_name',
  `tenant_desc` varchar(256DEFAULT NULL COMMENT 'tenant_desc',
  `create_source` varchar(32DEFAULT NULL COMMENT 'create_source',
  `gmt_create` bigint(20NOT NULL COMMENT '创建时间',
  `gmt_modified` bigint(20NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  KEY `idx_tenant_id` (`tenant_id`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';

CREATE TABLE `users` (
    `username` varchar(50NOT NULL PRIMARY KEY,
    `password` varchar(500NOT NULL,
    `enabled` boolean NOT NULL
);

CREATE TABLE `roles` (
    `username` varchar(50NOT NULL,
    `role` varchar(50NOT NULL,
    UNIQUE INDEX `idx_user_role` (`username` ASC`role` ASCUSING BTREE
);

CREATE TABLE `permissions` (
    `role` varchar(50NOT NULL,
    `resource` varchar(255NOT NULL,
    `action` varchar(8NOT NULL,
    UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`USING BTREE
);

INSERT INTO users (username, password, enabled) VALUES ('nacos''$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu'TRUE);

INSERT INTO roles (username, roleVALUES ('nacos''ROLE_ADMIN');

复制

source 完成之后呢,安装它

helm upgrade -i nacos nacos -n devops

复制

创建一个alb暴露它的UI

vim 80-ip-devops.yaml

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: internet-facing-ip-alb-80
  namespace: devops
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80}]'
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/backend-protocol: HTTP
    alb.ingress.kubernetes.io/security-groups: sg-xxx
    external-dns.alpha.kubernetes.io/hostname: nacos.xxx.xxx.xxx
  labels:
    k8s-app: internet-facing-ip-alb-80
spec:
  rules:
    - host: nacos.xxx.xxx.xxx
      http:
        paths:
          - path: /*
            backend:
              serviceName: nacos-cs
              servicePort: 8848

复制

之后等会访问它的网页就可以正常使用了

http://nacos.xxx.xxx.xxx

复制


文章转载自耶喝运维,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论