写在前面
在团队开发过程中,经常会遇到这样的问题:
技术文档到处都是,有的在本地,有的在群文件,还有的甚至只存在某个人的电脑里。一旦人员变动或者时间久了,很多知识就“丢失”了。为了解决这些问题,我决定通过搭建confluence 来解决这一个痛点问题。以下记录本人搭建心里路程
1. 整体架构
NodePort
↓
Confluence Pod
↓
MySQL Pod(utf8mb4)
↓
PVC 持久化存储
版本说明:
MySQL:5.7.30
Kubernetes:1.29+
images:haxqer/confluence:8.9.1
2. MySQL(核心:防乱码)
我的数据库版本是5.7.30,部分优化参数可以不加,其中 字符编码必须要是 character-set-server=utf8mb4 ,collation-server=utf8mb4_bin 不然会是乱码,踩坑。
ConfigMap
[root@kingdee /data]# cat /manifests/configmap/mysql-config.yaml
[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
// 如果为Mysql5.7,关闭derived_merge能优化仪表板加载缓慢
optimizer_switch = derived_merge=off
...
启动MySQL
创建数据库
CREATE DATABASE confluence CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;创建用户
CREATE user 'confluence'@'%' IDENTIFIED BY '<password>';授权
GRANT ALL PRIVILEGES ON confluence .* TO 'confluence'@'%' WITH GRANT OPTION;3. Confluence
pv/pvc
[root@kingdee /manifests/pv]# cat confluence/pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: confluence-k8s-pv
namespace: confluence
spec:
capacity:
storage: 200Gi
accessModes:
- ReadWriteMany
nfs:
server: 192.168.0.77
path: /data/confluence[root@kingdee /manifests/pv]# cat confluence/pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: confluence-k8s-pvc
namespace: confluence
spec:
resources:
requests:
storage: 200Gi
accessModes:
- ReadWriteManyDeployment
[root@kingdee /manifests]# cat deployments/confluence.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: confluence
namespace: confluence
spec:
replicas: 1
selector:
matchLabels:
app: confluence
template:
metadata:
labels:
app: confluence
spec:
containers:
- name: confluence
image: 192.168.0.77:32237/haxqer/confluence:8.9.1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8090
name: web
protocol: TCP
volumeMounts:
- name: confluence-data
mountPath: /var/confluence
volumes:
- name: confluence-data
persistentVolumeClaim:
claimName: confluence-k8s-pvcservice
这里我使用了NodePort 的暴露方式。
[root@kingdee /manifests]# cat service/confluence-service.yaml
apiVersion: v1
kind: Service
metadata:
name: confluence-service
namespace: confluence
labels:
app: confluence
spec:
selector:
app: confluence
type: NodePort
ports:
- name: web
port: 8090
targetPort: web
nodePort: 30085浏览器访问:<server-ip>:30085
拿到server id
4. 破解插件
## 查看pod
[root@kingdee /manifests]# kubectl get pod -n confluence
NAME READY STATUS RESTARTS AGE
confluence-6db6678655-25pwm 1/1 Running 0 53m
## 进入pod 进行破解 这里的server-id 需要你在浏览器访问获取
[root@kingdee /manifests]# kubectl exec -it confluence-6db6678655-25pwm -n confluence /bin/bash
root@confluence-6db6678655-25pwm:/opt/confluence# cd /var/agent/
root@confluence-6db6678655-25pwm:/var/agent# ls
atlassian-agent.jar
root@confluence-6db6678655-25pwm: java -jar atlassian-agent.jar -d -p conf -m xingzhibang@pexetech.com xingzhibang@pexetech.com -n Hello@world.com -o pexetech -s <you-server-id>
## 生成许可 粘贴进浏览器中5. 连接MySQL
点击下一步后 可以选择数据库,我这里是MySQL,地址可以写数据库的service的地址。后面的useUnicode=true&characterEncoding=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai 建议加一下,如果是MySQL5.7的话 改为characterEncoding=utf8。
jdbc:mysql://xxx:3306/confluence?useUnicode=true&characterEncoding=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai
评论