使用k8s部署confluence数据中心版(非集群模式)

分类:笔记 日期:2023-12-19 作者:caocaofff 浏览:236

使用docker搭建confluence的教程非常多,这里写一下使用k8s部署的方法。
本教程仅供学习使用。

1、环境准备

k8s 版本:1.23.0 (master+node,两个节点)

docker 版本:20.10.6

mysql 版本:5.7.44
mysql使用docker运行(也可以写deployment),数据和my.cnf持久化:

docker run -d --name=mysql-server -p 13306:3306 --restart=always -v /opt/mysql-data/my.cnf:/etc/my.cnf -v /opt/mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password mysql:5.7.44

my.cnf使用下面的配置:

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
default-storage-engine=INNODB
max_allowed_packet=256M
innodb_log_file_size=2GB
transaction-isolation=READ-COMMITTED
binlog_format=row
log-bin-trust-function-creators = 1

提前创建数据库:

create database confluence character set 'utf8mb4' collate 'utf8mb4_bin' ;
use confluence;
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;

2、镜像准备

官方仓库下载你需要的版本,这里示例是7.13.20版本

docker pull atlassian/confluence-server:7.13.20

Dingtalk_20231219153521.jpg

Dingtalk_20231219152417.jpg

3、编写Dockerfile

网上的教程是需要加入中文字体,但实测不需要,默认支持中文语言,而且上传中文名称的图片也显示正常。
破解包源自GitHub,但我编译后无法正常破解,所以又在网上找到了v1.3.1的jar包:atlassian-agent-v1.3.1.zip,实测正常破解(破解后就不要使用官网来生成试用授权了,会提示无效)。
还需要从官网下载MySQL的驱动,这个根据你使用的数据库版本来选择,我使用了高版本,所以后面使用kubectl logs查看pod日志时会有告警,但不影响:https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.2.0.tar.gz
Dingtalk_20231219155202.jpg

以下是Dockerfile文件内容

FROM atlassian/confluence-server:7.13.20
USER root

# 将代理破解包加入容器
COPY "atlassian-agent-v1.3.1.jar" /opt/atlassian/confluence/

# mysql驱动
COPY "mysql-connector-j-8.2.0.jar" /opt/atlassian/confluence/confluence/WEB-INF/lib/

# 设置启动加载代理包
RUN mkdir /opt/share && apt update -y && apt install -y busybox && apt clean && busybox --install && echo  "" >> /opt/atlassian/confluence/bin/setenv.sh && echo 'export CATALINA_OPTS="-javaagent:$LOGBASEABS/atlassian-agent-v1.3.1.jar ${CATALINA_OPTS}"' >> /opt/atlassian/confluence/bin/setenv.sh

因为confluence官方docker镜像使用的基础镜像是Ubuntu22.04,而且缺少一些常用命令(比如vi、netstat),所以我直接安装了busybox来代替这些命令。
如果直接追加jar包到setenv.sh,会出现追加到注释后面而失效的问题,所以加了echo先打印一个换行。

4、创建docker镜像

docker build -t 192.168.1.129/public/confluence-crack:7.13.20 .

Dingtalk_20231219155943.jpg

构造过程中安装软件的过程省略。

Dingtalk_20231219155903.jpg

查看构建好的镜像:docker images|grep conf

Dingtalk_20231219160207.jpg

推送到harbor仓库:docker push 192.168.1.129/public/confluence-crack:7.13.20

Dingtalk_20231219160404.jpg

Dingtalk_20231219160525.jpg

5、编写deployment

我使用了nfs来做持久化存储,加了就绪检查。本来是准备做集群模式的,但发现这在单个deployment下无法实现,所以只能单副本(或者你可以使用StatefulSet)。
实际只需要/var/atlassian/application-data/confluence目录持久化就足够了,pod重启不影响授权和用户数据。

注意:如果你更新镜像,按k8s默认部署方式是先创建新资源后删除旧资源,但因为加入了就绪检查,新pod在running时会一直不ready,访问/status会返回500,所以要先删除旧资源。(这个是confluence部署的问题,因为使用了相同的数据目录和数据库,所以同一时间只能运行一个副本,建议你更新镜像时先把副本数缩0、再更新镜像、再扩成1)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: confluence
spec:
  replicas: 1
  selector:
    matchLabels:
      app: confluence
  template:
    metadata:
      labels:
        app: confluence
    spec:
      containers:
      - name: confluence
        image: 192.168.1.129/public/confluence-crack:7.13.20
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: confluence-data
          mountPath: /var/atlassian/application-data/confluence
        - name: confluence-share
          mountPath: /opt/share
        env:
        - name: TZ
          value: "Asia/Shanghai"
        ports:
        - containerPort: 8090
          name: http
        - containerPort: 8091
        resources:
          limits:
            cpu: "4"
            memory: 8Gi
          requests:
            cpu: "2"
            memory: 4Gi
        readinessProbe:
          httpGet:
            path: /status
            port: http
          initialDelaySeconds: 150
          periodSeconds: 30
          successThreshold: 1
          timeoutSeconds: 1
      volumes:
      - name: confluence-data
        nfs:
          path: /opt/nfs/confluence/data
          server: 192.168.1.130
      - name: confluence-share
        nfs:
          path: /opt/nfs/confluence/share
          server: 192.168.1.130

6、编写service

svc文件内容:

apiVersion: v1
kind: Service
metadata:
  name: confluence-service
  labels:
    name: confluence-service
    app: confluence
spec:
  type: NodePort
  ports:
  - port: 8090
    targetPort: 8090
    protocol: TCP
    nodePort: 30090
  selector:
    app: confluence

7、创建资源

kubectl apply -f confluence-crack-*.yaml

8、查看资源

kubectl get po,svc -l app=confluence

Dingtalk_20231219163322.jpg

9、开始安装confluence

根据svc地址,在浏览器访问IP加端口,开始进行安装。

破解步骤

安装时会提示让你输入license,你可以进入pod,然后执行:

java -jar /opt/atlassian/confluence/atlassian-agent-v1.3.1.jar -d -m admin@test.com -o test -p 'conf' -s `cat /var/atlassian/application-data/confluence/confluence.cfg.xml |grep confluence.setup.server.id|awk -F">" '{print $2}'|awk -F"<" '{print $1}'`

这样会生成跟你server id相匹配的license,复制到输入框就行了。

安装步骤很简单,网络上都有教程,我就不细说了。

Dingtalk_20231219163819.jpg

10、版本升级

找到要升级的版本,重新构建镜像,可以使用下面命令直接更新:

kubectl set image deploy/confluence confluence=192.168.1.129/public/confluence-crack:8.5.4 --record=true

Dingtalk_20231220162226.jpg

但是我不建议这样做,因为上面已经对相关数据做了持久化,所以跑多个pod时就绪检查会报错,正确做法应该这样:

#副本数缩小为0
kubectl scale deploy confluence --replicas=0

Dingtalk_20231220162410.jpg

然后再更新镜像,这时就能正常执行健康检查了。

Dingtalk_20231220162605.jpg

Dingtalk_20231220162105.jpg

CC版权: 本篇博文采用《CC 协议》,转载必须注明作者和本文链接

评论 (暂无评论)

发表评论

昵称:  
邮箱:  
网址:

验证码:captcha