Rancher部署Canal单节点

9 篇文章 2 订阅

上一篇介绍了如何Rancher部署Redis三主三从集群,这里继续介绍通过Rancher部署Canal

Canal

参考Canal官网:https://github.com/alibaba/canal/
参考Canal官网使用Docker管理Canal:https://github.com/alibaba/canal/wiki/Docker-QuickStart/

部署环境

[root@uat-master ~]# kubectl get nodes -o wide
NAME         STATUS   ROLES                      AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
uat-master   Ready    controlplane,etcd,worker   41d   v1.17.4   172.18.30.215   <none>        CentOS Linux 7 (Core)   3.10.0-1062.18.1.el7.x86_64   docker://18.9.9
uat-w1       Ready    worker                     41d   v1.17.4   172.18.30.216   <none>        CentOS Linux 7 (Core)   3.10.0-1062.18.1.el7.x86_64   docker://18.9.9
uat-w2       Ready    worker                     40d   v1.17.4   172.18.30.214   <none>        CentOS Linux 7 (Core)   3.10.0-1062.18.1.el7.x86_64   docker://18.9.9
[root@uat-master ~]# 

1 前期准备

参考如上配置自定义配置文件,namespace调整为 middleware

1.1 准备数据库配置参数Secret

用于保存目标数据库连接信息,用户名及密码
canal-sec.yaml

apiVersion: v1
kind: Secret
data:
  canal.instance.master.address: "base64编码后的数据库主机HOST"
  canal.instance.dbUsername: "base64编码后的用户名"
  canal.instance.dbPassword: "base64编码后的密码"
metadata:
  name: canal-secret
  namespace: middleware
type: Opaque

创建canal-sec

[root@uat-master canal]# kubectl apply -f canal-sec.yaml 
secret/canal-secret created
[root@uat-master canal]# 

1.2 准备配置参数ConfigMap

用于保存instance.properties配置信息
canal-cm.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: canal-cm
  namespace: middleware
data:
  # table regex .*\\..*表示监听所有表 也可以写具体的表名,用,隔开
  canal.instance.filter.regex: .*\\..*
  canal.instance.filter.regex: uat_shop_goods.ad_items
  # mysql 数据解析表的黑名单,多个表用,隔开
  #canal.instance.filter.black.regex: 

创建configmap

[root@uat-master canal]# vi canal-cm.yaml
[root@uat-master canal]# kubectl apply -f canal-cm.yaml 
configmap/canal-cm created
[root@uat-master canal]# 

1.3 准备NFS

参考Rancher部署NFS持久化存储:https://blog.csdn.net/iceliooo/article/details/111461651

2 部署canal单节点

2.1 编写canal-alone-statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: canal-alone
  namespace: middleware
spec:
  serviceName: canal-alone-headless
  replicas: 1
  template:
    metadata:
      labels:
        app: canal-alone
      annotations:
        pod.alpha.kubernetes.io/initialized: "true"
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                      - canal-alone
              topologyKey: "kubernetes.io/hostname"
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: canal-alone
          imagePullPolicy: IfNotPresent
          image: canal/canal-server:v1.1.4
          resources:
            requests:
              memory: "0.2Gi"
              cpu: "100m"
          ports:
            - containerPort: 11110
              protocol: TCP
              name: admin
            - containerPort: 11111
              protocol: TCP
              name: http
          env:
            - name: SERVICE_NAME
              value: "canal-alone-headless"
            - name: DOMAIN_NAME
              value: "cluster.local"
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.namespace
            - name: canal.instance.filter.regex
              valueFrom:
                configMapKeyRef:
                  name: canal-cm
                  key: canal.instance.filter.regex
            - name: canal.instance.master.address
              valueFrom:
                secretKeyRef:
                  name: canal-secret
                  key: canal.instance.master.address
            - name: canal.instance.dbUsername
              valueFrom:
                secretKeyRef:
                  name: canal-secret
                  key: canal.instance.dbUsername
            - name: canal.instance.dbPassword
              valueFrom:
                secretKeyRef:
                  name: canal-secret
                  key: canal.instance.dbPassword
          # 如果不需要查看日志信息,可以去掉挂载信息        
          volumeMounts:
            - name: logs
              mountPath: /home/admin/canal-server/logs
              subPath: logs
  volumeClaimTemplates:
  - apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: logs
      namespace: middleware
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 512Mi
      storageClassName: managed-nfs-storage
      volumeMode: Filesystem
  selector:
    matchLabels:
      app: canal-alone

2.2 部署canal

[root@uat-master canal]# kubectl apply -f canal-alone-statefulset.yaml 
statefulset.apps/canal-alone created
[root@uat-master canal]# 

2.3 部署service

canal-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: canal-alone-headless
  namespace: middleware
  labels:
    app: canal-alone
  annotations:
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
  ports:
    - port: 11111
      name: http
      targetPort: 11111
    - port: 11110
      name: admin
      targetPort: 11110
  clusterIP: None
  selector:
    app: canal-alone
---
## 开放集权外访问端口,便于本地应用访问外网canal服务
apiVersion: v1
kind: Service
metadata:
  name: canal-alone-client
  namespace: middleware
  labels:
    app: canal-alone
  annotations:
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
  ports:
    - port: 11111
      name: http
      targetPort: 11111
    - port: 11110
      name: admin
      targetPort: 11110
  selector:
    app: canal-alone
  type: NodePort

部署service

[root@uat-master canal]# kubectl apply -f canal-service.yaml
··· created
[root@uat-master canal]# 

2.4 验证

这里新建一个SpringBoot项目连接canal验证
pom.xml中引入canal客户端依赖包

 <dependency>
     <groupId>top.javatool</groupId>
     <artifactId>canal-spring-boot-starter</artifactId>
     <version>1.2.1-RELEASE</version>
 </dependency>

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值