阶段二:微服务注册中心Nacos、分布式事务组件Seata、分布式流量控制组件Sentinel

二、Nacos概述和注册中心分类

1、概述

2、核心能力

3、产品优势

4、同类产品

<sheet sheet-id="gXmYaM" token="AHmdssUTJhns7rtlfUqcubXCnle"></sheet>

三、Nacos注册中心部署模式

image

1、单机部署

YAML 保存位置: ~/k8s-manifests/jzo2o/mysql-config.yaml

先在 Kubernetes 管理节点执行:

mkdir -p ~/k8s-manifests/jzo2o
cd ~/k8s-manifests/jzo2o
vi mysql-config.yaml

把下方 YAML 全部复制进去;红色字段按当前环境修改;按 Esc 后输入 :wq 保存退出。

apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
  namespace: jzo2o
data:
  my.cnf: |
    [client]
    default-character-set = utf8mb4
    [mysqld]
    log-bin=mysql-bin
    binlog-format=ROW
    server_id=1
    expire_logs_days=3
    max_binlog_size=100m
    max_binlog_cache_size=512m
    character_set_server=utf8mb4
    collation_server=utf8mb4_bin
    secure-file-priv=NULL
    symbolic-links=0
    default_authentication_plugin=mysql_native_password

[root@jzo2o-gateway /]# kubectl apply -f mysql-config

配置详解:

需要改的项为什么改
namespace: jzo2o与实际命名空间一致;使用默认命名空间时可不写。

配置详解:

需要改的项为什么改
namespace: jzo2o与实际命名空间一致;使用默认命名空间时可不写。

注意事项:

YAML 保存位置: ~/k8s-manifests/jzo2o/mysql.yaml

先在 Kubernetes 管理节点执行:

mkdir -p ~/k8s-manifests/jzo2o
cd ~/k8s-manifests/jzo2o
vi mysql.yaml

把下方 YAML 全部复制进去;红色字段按当前环境修改;按 Esc 后输入 :wq 保存退出。

apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: jzo2o
spec:
  type: NodePort
  selector:
    app: mysql
  ports:
    - name: mysql
      port: 3306
      targetPort: 3306
      nodePort: 30306
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
  namespace: jzo2o
spec:
  serviceName: mysql
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.0.26
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 3306
              name: mysql
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: mysql
            - name: TZ
              value: Asia/Shanghai
            - name: MYSQL_DATABASE
              value: "nacos-1.4.1"
          args:
            - --default-authentication-plugin=mysql_native_password
          volumeMounts:
            - name: mysql-data
              mountPath: /var/lib/mysql
            - name: mysql-config
              mountPath: /etc/mysql/conf.d/my.cnf
              subPath: my.cnf
      volumes:
        - name: mysql-config
          configMap:
            name: mysql-config
  volumeClaimTemplates:
    - metadata:
        name: mysql-data
      spec:
        accessModes: ["ReadWriteMany"]
        storageClassName: nfs-storage
        resources:
          requests:
            storage: 50Gi
[root@k8s-master mysql]# kubectl apply -f  mysql-statfulset.yaml

配置详解:

需要改的项为什么改
namespace: jzo2o与实际命名空间一致;使用默认命名空间时可不写。
port: 3306对外暴露的 Service 端口;调用方按此端口访问。
targetPort: 3306必须与容器实际监听端口一致。
nodePort: 30306集群外通过 NodeIP:NodePort 访问时才需要改。
replicas: 1按可用性和资源容量设置副本数。
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.0.26替换为实际可拉取的镜像地址和版本。

注意事项:

kubectl cp nacos-1.4.1.sql jzo2o/mysql-0:/root
kubectl exec -it mysql-0 -n jzo2o -- /bin/bash
mysql -u root -p
mysql> use nacos-1.4.1
mysql> source /root/nacos-1.4.1.sql;
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'mysql';
mysql> flush privileges;

注意事项:

YAML 保存位置: ~/k8s-manifests/jzo2o/nacos-config.yaml

先在 Kubernetes 管理节点执行:

mkdir -p ~/k8s-manifests/jzo2o
cd ~/k8s-manifests/jzo2o
vi nacos-config.yaml

把下方 YAML 全部复制进去;红色字段按当前环境修改;按 Esc 后输入 :wq 保存退出。

apiVersion: v1
kind: ConfigMap
metadata:
  name: nacos-config
  namespace: jzo2o
data:
  application.properties: |
    server.servlet.contextPath=/nacos
    server.contextPath=/nacos
    server.port=${NACOS_APPLICATION_PORT:8848}
    spring.datasource.platform=mysql
    db.num=${MYSQL_DATABASE_NUM:1}
    db.url.0=jdbc:mysql://mysql:3306/nacos-1.4.1?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user=${MYSQL_SERVICE_USER:root}
    db.password=${MYSQL_SERVICE_PASSWORD:mysql}
    nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}
    nacos.core.auth.default.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}
    nacos.core.auth.default.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789}
    nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
    nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
    nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:serverIdentity}
    nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:security}
    nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}
    management.metrics.export.elastic.enabled=false
    management.metrics.export.influx.enabled=false

#创建nacos-config配置
[root@jzo2o-gateway /]# kubectl apply -f  nacos-config.yaml

配置详解:

需要改的项为什么改
namespace: jzo2o与实际命名空间一致;使用默认命名空间时可不写。

注意事项:

YAML 保存位置: ~/k8s-manifests/jzo2o/nacos.yaml

先在 Kubernetes 管理节点执行:

mkdir -p ~/k8s-manifests/jzo2o
cd ~/k8s-manifests/jzo2o
vi nacos.yaml

把下方 YAML 全部复制进去;红色字段按当前环境修改;按 Esc 后输入 :wq 保存退出。

apiVersion: v1
kind: Service
metadata:
  name: nacos
  namespace: jzo2o
spec:
  type: NodePort
  selector: {app: nacos}
  ports:
    - name: http
      port: 8848
      targetPort: 8848
      nodePort: 30848
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nacos
  namespace: jzo2o
spec:
  serviceName: nacos
  replicas: 1
  selector:
    matchLabels: {app: nacos}
  template:
    metadata:
      labels: {app: nacos}
    spec:
      containers:
        - name: nacos
          image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nacos/nacos-server:1.4.1
          ports:
            - containerPort: 8848
              name: http
          env:
            - name: MODE
              value: standalone
            - name: JVM_XMS
              value: 256m
            - name: JVM_XMX
              value: 256m
            - name: PREFER_HOST_MODE
              value: hostname
          volumeMounts:
            - name: nacos-config
              mountPath: /home/nacos/conf/application.properties
              subPath: application.properties
            - name: data
              mountPath: /home/nacos/plugins/peer-finder
              subPath: peer-finder
            - name: data
              mountPath: /home/nacos/data
              subPath: data
            - name: data
              mountPath: /home/nacos/logs
              subPath: logs
      volumes:
        - name: nacos-config
          configMap:
            name: nacos-config
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: ["ReadWriteMany"]
        storageClassName: nfs-storage
        resources:
          requests:
            storage: 5Gi

配置详解:

需要改的项为什么改
namespace: jzo2o与实际命名空间一致;使用默认命名空间时可不写。
port: 8848对外暴露的 Service 端口;调用方按此端口访问。
targetPort: 8848必须与容器实际监听端口一致。
nodePort: 30848集群外通过 NodeIP:NodePort 访问时才需要改。
replicas: 1按可用性和资源容量设置副本数。
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nacos/nacos-server:1.4.1替换为实际可拉取的镜像地址和版本。

注意事项:

2、集群模式

YAML 保存位置: ~/k8s-manifests/jzo2o/nacos-headless.yaml

先在 Kubernetes 管理节点执行:

mkdir -p ~/k8s-manifests/jzo2o
cd ~/k8s-manifests/jzo2o
vi nacos-headless.yaml

把下方 YAML 全部复制进去;红色字段按当前环境修改;按 Esc 后输入 :wq 保存退出。

apiVersion: v1
kind: Service
metadata:
  name: nacos-headless
  namespace: jzo2o
spec:
  clusterIP: None
  selector:
    app: nacos
  ports:
    - name: http
      port: 8848
      targetPort: 8848
    - name: raft   #选举端口
      port: 7848
      targetPort: 7848
apiVersion: v1
kind: Service
metadata:
  name: nacos
  namespace: jzo2o
spec:
  type: NodePort
  selector:
    app: nacos
  ports:
    - name: http
      port: 8848
      targetPort: 8848
      nodePort: 30848
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nacos
  namespace: jzo2o
spec:
  serviceName: nacos-headless
  replicas: 3
  selector:
    matchLabels:
      app: nacos
  template:
    metadata:
      labels:
        app: nacos
    spec:
      containers:
        - name: nacos
          image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nacos/nacos-server:1.4.1
          ports:
            - containerPort: 8848
              name: http
          env:
            - name: MODE
              value: cluster
            - name: NACOS_SERVERS
              value: "nacos-0.nacos-headless.jzo2o.svc.cluster.local:8848 nacos-1.nacos-headless.jzo2o.svc.cluster.local:8848 nacos-2.nacos-headless.jzo2o.svc.cluster.local:8848"
            - name: JVM_XMS
              value: 512m
            - name: JVM_XMX
              value: 512m
            - name: PREFER_HOST_MODE
              value: hostname
          volumeMounts:
            - name: nacos-config
              mountPath: /home/nacos/conf/application.properties
              subPath: application.properties
            - name: nacos-logs
              mountPath: /home/nacos/logs
      volumes:
        - name: nacos-config
          configMap:
            name: nacos-config
  volumeClaimTemplates:
    - metadata:
        name: nacos-logs
      spec:
        accessModes: ["ReadWriteMany"]
        storageClassName: nfs-storage
        resources:
          requests:
            storage: 5Gi

配置详解:

需要改的项为什么改
namespace: jzo2o与实际命名空间一致;使用默认命名空间时可不写。
port: 8848对外暴露的 Service 端口;调用方按此端口访问。
targetPort: 8848必须与容器实际监听端口一致。
port: 7848对外暴露的 Service 端口;调用方按此端口访问。
targetPort: 7848必须与容器实际监听端口一致。
nodePort: 30848集群外通过 NodeIP:NodePort 访问时才需要改。

注意事项:

四、分布式事务组件:Seata

这些操作分散在不同服务或不同数据库里,单靠 MySQL 本地事务不够。Seata 的作用就是协调这些服务,要么整体成功,要么整体回滚,避免出现“订单创建了,但优惠券也扣了却支付失败”这类数据不一致问题

1、创建Seata配置文件

YAML 保存位置: ~/k8s-manifests/jzo2o/seata-config.yaml

先在 Kubernetes 管理节点执行:

mkdir -p ~/k8s-manifests/jzo2o
cd ~/k8s-manifests/jzo2o
vi seata-config.yaml

把下方 YAML 全部复制进去;红色字段按当前环境修改;按 Esc 后输入 :wq 保存退出。

apiVersion: v1
kind: ConfigMap
metadata:
  name: seata-config
  namespace: jzo2o
data:
  application.yml: |
    server:
      port: 7091
    spring:
      application:
        name: seata-server
    console:
      user:
        username: seata
        password: seata
    logging:
      config: classpath:logback-spring.xml
      file:
        path: ${user.home}/logs/seata
    seata:
      config:
        type: nacos
        nacos:
          server-addr: nacos:8848
          namespace: 75a593f5-33e6-4c65-b2a0-18c403d20f63
          group: DEFAULT_GROUP
          username: nacos
          password: nacos
          data-id: seata-server.properties
      registry:
        type: nacos
        nacos:
          application: seata-server
          server-addr: nacos:8848
          group: DEFAULT_GROUP
          namespace: 75a593f5-33e6-4c65-b2a0-18c403d20f63
          cluster: default
          username: nacos
          password: nacos
      server:
        service-port: 8091
        max-commit-retry-timeout: -1
        max-rollback-retry-timeout: -1
        rollback-retry-timeout-unlock-enable: false
        enableCheckAuth: true
        retryDeadThreshold: 130000
        xaerNotaRetryTimeout: 60000
        recovery:
          handle-all-session-period: 1000
        undo:
          log-save-days: 7
          log-delete-period: 86400000
        session:
          branch-async-queue-size: 5000
          enable-branch-async-remove: false
      metrics:
        enabled: false
        registry-type: compact
        exporter-list: prometheus
        exporter-prometheus-port: 9898
      transport:
        rpc-tc-request-timeout: 30000
        enable-tc-server-batch-send-response: false
        shutdown:
          wait: 3
      security:
        secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
        tokenValidityInMilliseconds: 1800000
        ignore:
          urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

配置详解:

需要改的项为什么改
namespace: jzo2o与实际命名空间一致;使用默认命名空间时可不写。
port: 7091对外暴露的 Service 端口;调用方按此端口访问。
namespace: 75a593f5-33e6-4c65-b2a0-18c403d20f63与实际命名空间一致;使用默认命名空间时可不写。

注意事项:

2、导入Seata数据库

kubectl cp seata.sql jzo2o/mysql-0:/root
kubectl exec -it mysql-0 -n jzo2o -- /bin/bash
mysql -u root -p
mysql> create database seata;
mysql> use seata
mysql> source /root/seata.sql;

注意事项:

3、创建Seata服务

YAML 保存位置: ~/k8s-manifests/jzo2o/seata-server.yaml

先在 Kubernetes 管理节点执行:

mkdir -p ~/k8s-manifests/jzo2o
cd ~/k8s-manifests/jzo2o
vi seata-server.yaml

把下方 YAML 全部复制进去;红色字段按当前环境修改;按 Esc 后输入 :wq 保存退出。

apiVersion: v1
kind: Service
metadata:
  name: seata-server
  namespace: jzo2o
spec:
  type: NodePort
  selector: {app: seata-server}
  ports:
    - name: console
      port: 7091
      targetPort: 7091
      nodePort: 30091
    - name: service
      port: 8091
      targetPort: 8091
      nodePort: 30092
apiVersion: apps/v1
kind: Deployment
metadata:
  name: seata-server
  namespace: jzo2o
spec:
  replicas: 1
  selector:
    matchLabels: {app: seata-server}
  template:
    metadata:
      labels: {app: seata-server}
    spec:
      enableServiceLinks: false
      containers:
        - name: seata-server
          image: harbor.lanqicheng.top/jzo2o/seata-server:1.5.2
          ports:
            - containerPort: 7091
              name: console
            - containerPort: 8091
              name: service
          env:
            - name: SEATA_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
          volumeMounts:
            - name: seata-config
              mountPath: /seata-server/resources/application.yml
              subPath: application.yml
      volumes:
        - name: seata-config
          configMap:
            name: seata-config

配置详解:

需要改的项为什么改
namespace: jzo2o与实际命名空间一致;使用默认命名空间时可不写。
port: 7091对外暴露的 Service 端口;调用方按此端口访问。
targetPort: 7091必须与容器实际监听端口一致。
nodePort: 30091集群外通过 NodeIP:NodePort 访问时才需要改。
port: 8091对外暴露的 Service 端口;调用方按此端口访问。
targetPort: 8091必须与容器实际监听端口一致。

注意事项:

五、分布式流量控制组件:Sentinel

1、Sentinel概述

2、Sentinel-Dashboard服务部署

YAML 保存位置: ~/k8s-manifests/jzo2o/sentinel-dashboard.yaml

先在 Kubernetes 管理节点执行:

mkdir -p ~/k8s-manifests/jzo2o
cd ~/k8s-manifests/jzo2o
vi sentinel-dashboard.yaml

把下方 YAML 全部复制进去;红色字段按当前环境修改;按 Esc 后输入 :wq 保存退出。

apiVersion: v1
kind: Service
metadata:
  name: sentinel-dashboard
  namespace: jzo2o
  labels:
    app: sentinel-dashboard
spec:
  type: NodePort
  selector:
    app: sentinel-dashboard
  ports:
    - name: http
      port: 8080
      targetPort: 8080
      nodePort: 30087
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sentinel-dashboard
  namespace: jzo2o
  labels:
    app: sentinel-dashboard
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sentinel-dashboard
  template:
    metadata:
      labels:
        app: sentinel-dashboard
    spec:
      containers:
        - name: sentinel-dashboard
          image: harbor.lanqicheng.top/jzo2o/sentinel-dashboard:1.8.5
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              containerPort: 8080
          env:
            - name: TZ
              value: Asia/Shanghai
            - name: JAVA_OPTS
              value: >-
                -Dserver.port=8080
                -Dproject.name=sentinel-dashboard
                -Dsentinel.dashboard.auth.username=sentinel
                -Dsentinel.dashboard.auth.password=sentinel
          resources:
            requests:
              cpu: 100m
              memory: 256Mi
            limits:
              cpu: 500m
              memory: 512Mi
          livenessProbe:
            httpGet:
              path: /
              port: 8080
            initialDelaySeconds: 60
            periodSeconds: 10
            timeoutSeconds: 3
            failureThreshold: 6
          readinessProbe:
            httpGet:
              path: /
              port: 8080
            initialDelaySeconds: 30
            periodSeconds: 10
            timeoutSeconds: 3
            failureThreshold: 6

配置详解:

需要改的项为什么改
namespace: jzo2o与实际命名空间一致;使用默认命名空间时可不写。
port: 8080对外暴露的 Service 端口;调用方按此端口访问。
targetPort: 8080必须与容器实际监听端口一致。
nodePort: 30087集群外通过 NodeIP:NodePort 访问时才需要改。
replicas: 1按可用性和资源容量设置副本数。
image: harbor.lanqicheng.top/jzo2o/sentinel-dashboard:1.8.5替换为实际可拉取的镜像地址和版本。

注意事项:

3、服务启用限流

cloud:
    sentinel:
      transport:
        # 供sentinel dashboard平台访问端口
        port: 8719
        # sentinel控制台
        dashboard: sentinel-dashboard:8087
        #服务启动直接建立心跳连接
      eager: true

配置详解:

需要改的项为什么改
port: 8719对外暴露的 Service 端口;调用方按此端口访问。

注意事项:

六、分布式任务调度组件:XXL-JOB

1、XXL-JOB概述

2、项目业务使用场景

3、XXL-JOB服务部署

YAML 保存位置: ~/k8s-manifests/jzo2o/xxl-job-config.yaml

先在 Kubernetes 管理节点执行:

mkdir -p ~/k8s-manifests/jzo2o
cd ~/k8s-manifests/jzo2o
vi xxl-job-config.yaml

把下方 YAML 全部复制进去;红色字段按当前环境修改;按 Esc 后输入 :wq 保存退出。

apiVersion: v1
kind: ConfigMap
metadata:
  name: xxl-job-config
  namespace: jzo2o
data:
  application.properties: |
    ### web
    server.port=8080
    server.servlet.context-path=/xxl-job-admin

    ### actuator
    management.server.servlet.context-path=/actuator
    management.health.mail.enabled=false

    ### resources
    spring.mvc.servlet.load-on-startup=0
    spring.mvc.static-path-pattern=/static/**
    spring.resources.static-locations=classpath:/static/

    ### freemarker
    spring.freemarker.templateLoaderPath=classpath:/templates/
    spring.freemarker.suffix=.ftl
    spring.freemarker.charset=UTF-8
    spring.freemarker.request-context-attribute=request
    spring.freemarker.settings.number_format=0.##########

    ### mybatis
    mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
    #mybatis.type-aliases-package=com.xxl.job.admin.core.model

    ### xxl-job, datasource
    spring.datasource.url=jdbc:mysql://mysql:3306/xxl_job_2.3.1?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    spring.datasource.username=root
    spring.datasource.password=mysql
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

    ### datasource-pool
    spring.datasource.type=com.zaxxer.hikari.HikariDataSource
    spring.datasource.hikari.minimum-idle=10
    spring.datasource.hikari.maximum-pool-size=30
    spring.datasource.hikari.auto-commit=true
    spring.datasource.hikari.idle-timeout=30000
    spring.datasource.hikari.pool-name=HikariCP
    spring.datasource.hikari.max-lifetime=900000
    spring.datasource.hikari.connection-timeout=10000
    spring.datasource.hikari.connection-test-query=SELECT 1
    spring.datasource.hikari.validation-timeout=1000

    ### xxl-job, email
    spring.mail.host=smtp.qq.com
    spring.mail.port=25
    spring.mail.username=xxx@qq.com
    spring.mail.from=xxx@qq.com
    spring.mail.password=xxx
    spring.mail.properties.mail.smtp.auth=true
    spring.mail.properties.mail.smtp.starttls.enable=true
    spring.mail.properties.mail.smtp.starttls.required=true
    spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

    ### xxl-job, access token
    xxl.job.accessToken=default_token

    ### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
    xxl.job.i18n=zh_CN

    ## xxl-job, triggerpool max size
    xxl.job.triggerpool.fast.max=200
    xxl.job.triggerpool.slow.max=100

    ### xxl-job, log retention days
    xxl.job.logretentiondays=30

配置详解:

需要改的项为什么改
namespace: jzo2o与实际命名空间一致;使用默认命名空间时可不写。

注意事项:

kubectl cp xxl_job_2.3.1.sql jzo2o/mysql-0:/root
kubectl exec -it mysql-0 -n jzo2o -- /bin/bash
mysql -u root -p
mysql> create database `xxl_job_2.3.1`;
mysql> use xxl_job_2.3.1
mysql> source /root/xxl_job_2.3.1.sql;

注意事项:

YAML 保存位置: ~/k8s-manifests/jzo2o/xxl-job-admin.yaml

先在 Kubernetes 管理节点执行:

mkdir -p ~/k8s-manifests/jzo2o
cd ~/k8s-manifests/jzo2o
vi xxl-job-admin.yaml

把下方 YAML 全部复制进去;红色字段按当前环境修改;按 Esc 后输入 :wq 保存退出。

apiVersion: v1
kind: Service
metadata:
  name: xxl-job-admin
  namespace: jzo2o
spec:
  type: NodePort
  selector: {app: xxl-job-admin}
  ports:
    - name: http
      port: 8080
      targetPort: 8080
      nodePort: 30088
apiVersion: apps/v1
kind: Deployment
metadata:
  name: xxl-job-admin
  namespace: jzo2o
spec:
  replicas: 1
  selector:
    matchLabels: {app: xxl-job-admin}
  template:
    metadata:
      labels: {app: xxl-job-admin}
    spec:
      containers:
        - name: xxl-job-admin
          image: xuxueli/xxl-job-admin:2.3.1
          ports:
            - containerPort: 8080
              name: http
          env:
            - name: PARAMS
              value: --spring.config.location=/application.properties
          volumeMounts:
            - name: xxl-job-config
              mountPath: /application.properties
              subPath: application.properties
      volumes:
        - name: xxl-job-config
          configMap:
            name: xxl-job-config

配置详解:

需要改的项为什么改
namespace: jzo2o与实际命名空间一致;使用默认命名空间时可不写。
port: 8080对外暴露的 Service 端口;调用方按此端口访问。
targetPort: 8080必须与容器实际监听端口一致。
nodePort: 30088集群外通过 NodeIP:NodePort 访问时才需要改。
replicas: 1按可用性和资源容量设置副本数。
image: xuxueli/xxl-job-admin:2.3.1替换为实际可拉取的镜像地址和版本。

注意事项:

4、后台可视化

image