推荐阅读

Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506
Helm3(K8S 资源对象管理工具)博客专栏:https://blog.csdn.net/xzk9381/category_10895812.html

本文原文链接:https://blog.csdn.net/xzk9381/article/details/109570960,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。

将公司中已有的 confluence 服务迁移到 k8s 集群中,需要保留当前已有的数据。整体需要分为如下几个步骤:

  1. 备份 mysql 数据
  2. 备份 confluence 安装目录
  3. 备份 confluence 数据目录
  4. 制作 mysql 镜像并导入数据
  5. 制作 confluence 镜像

一、MySQL 服务

1. 制作 MySQL 镜像

由于公司环境中的 confluence 服务使用的数据库版本是 5.6,所以首先下载官方 mysql 镜像:

docker pull mysql:5.6

将下载好的镜像修改 tag 并推送到内部镜像仓库:

docker tag mysql:5.6 harbor.inner.com/ops/mysql:5.6
docker push harbor.inner.com/ops/mysql:5.6

2. 创建命名空间

首先创建一个 MySQL 和 Confluence 服务共用的命名空间 ns-wiki,yaml 文件内容如下:

---
apiVersion: v1
kind: Namespace
metadata:name: ns-wikilabels:name: ns-wiki

3. 创建 PV

首先创建如下目录:

mkdir -p /opt/ops_ceph_data/mysql_for_confluence

为了实现 MySQL 数据的持久化存储,需要使用到 pv 和 pvc,yaml 文件内容如下:

---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:name: ceph-mysql-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer---
apiVersion: v1
kind: PersistentVolume
metadata:name: ceph-mysql-pv
spec:accessModes:- ReadWriteOncecapacity:storage: 500Gilocal:path: /opt/ops_ceph_data/mysql_for_confluencenodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: mysql-for-confluenceoperator: Invalues:- "true"persistentVolumeReclaimPolicy: RetainstorageClassName: ceph-mysql-storage
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: ceph-mysql-pvcnamespace: ns-wiki
spec:accessModes:- ReadWriteOncestorageClassName: ceph-mysql-storageresources:requests:storage: 500Gi

在 k8s 的 node 节点上创建用于绑定 pv 的 label:

for i in 1 2 3 4 5
dokubectl label nodes k8s-node${i} mysql-for-confluence=true
done

4. 创建 Service

创建用于映射 3306 端口的 Service,yaml 文件内容如下:

---
kind: Service
apiVersion: v1
metadata:labels:app: mysqlname: mysql-portnamespace: ns-wiki
spec:type: NodePortports:- port: 3306protocol: TCPtargetPort: 3306nodePort: 32306selector:app: mysql

5. 创建 configmap

为了可以动态的修改 MySQL 的配置文件,需要在创建 pod 时将配置进行挂载,用 k8s 提供的 configmap 可以实现该功能。

创建 configmap 有两种方式,一种是从已有的配置文件中进行导入:

kubectl create configmap mysql-config --from-file=my.cnf -n ns-wiki

导入完成后可以通过 describe 命令查看:

[@k8s-master2 /opt/k8s/mysql]# kubectl describe configmap mysql-config -n ns-wiki
Name:         mysql-config
Namespace:    ns-wiki
Labels:       <none>
Annotations:  <none>Data
====
my.cnf:
----
[mysqld]
datadir=/var/lib/mysql
symbolic-links=0
max_allowed_packet=256M
max_connections=1000
innodb_log_file_size=2GB
transaction-isolation=READ-COMMITTED
binlog_format=row[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pidEvents:  <none>

还有一种方式是编写 yaml 文件创建,文件内容如下:

apiVersion: v1
kind: ConfigMap
metadata:name: mysql-confignamespace: ns-wiki
data:my.cnf: |[mysqld]datadir=/var/lib/mysqlsymbolic-links=0max_allowed_packet=256Mmax_connections=1000innodb_log_file_size=2GBtransaction-isolation=READ-COMMITTEDbinlog_format=row[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid

本文原文链接:https://blog.csdn.net/xzk9381/article/details/109570960,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。

6. 创建 secret

在启动 MySQL 的 Pod 时,需要给系统传递一个参数用于初始化数据库 root 用户的密码,通常情况下可以直接在 pod 的 yaml 文件中按照如下格式编写:

containers:
- name: mysqlimage: harbor.inner.com/ops/mysql:5.6imagePullPolicy: IfNotPresentenv:- name: MYSQL_ROOT_PASSWORDvalue: "123456"

另一种方式是使用 secret,在 secret 中设置的值是经过 base64 编码的。创建 secret 的 yaml 文件内容如下:

apiVersion: v1
kind: Secret
metadata:name: mysql-secret     # 指定secret的名称namespace: ns-wiki
type: Opaque                # 指定secret的类型
data:mysql-user-root-pwd: MTIzNDU2

创建 secret 后可以使用如下命令查看:

[@k8s-master2 /opt/k8s/mysql]# kubectl describe secret mysql-secret -n ns-wiki
Name:         mysql-secret
Namespace:    ns-wiki
Labels:       <none>
Annotations:
Type:         OpaqueData
====
mysql-user-root-pwd:  6 bytes

再创建一个用于和 Harbor 校验的 secret:

kubectl create secret docker-registry harbor-secret --namespace=ns-wiki --docker-server=http://harbor.inner.com --docker-username=admin --docker-password=Harbor12345

7. 创建 Deployment

最后是编写用于创建 MySQL Pod 的 yaml 文件,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:name: mysqllabels:app: mysqlnamespace: ns-wiki
spec:replicas: 1selector:matchLabels:app: mysqltemplate:metadata:name: mysqllabels:app: mysqlspec:restartPolicy: Alwayscontainers:- name: mysqlimage: harbor.inner.com/ops/mysql:5.6imagePullPolicy: IfNotPresentenv:- name: MYSQL_ROOT_PASSWORD                # 注意此处引用 secret 来初始化 root 密码valueFrom:secretKeyRef:name: mysql-secretkey:mysql-user-root-pwdvolumeMounts:- name: mysql-conf                     # 指定数据库配置文件挂载的目录路径mountPath: /etc/mysql/mysql.conf.d- name: mysql-data                      # 指定数据目录路径mountPath: /var/lib/mysql- name: date-conf                        # 指定时区配置文件挂载路径mountPath: /etc/localtimeimagePullSecrets:- name: harbor-secretvolumes:- name: mysql-conf                         # 引用 configmap 挂载配置文件configMap:name: mysql-config- name: mysql-datapersistentVolumeClaim:claimName: ceph-mysql-pvc- name: date-conf                             # 将本地的时区文件挂载到 pod 中,避免 pod 时区错误hostPath:path: /usr/share/zoneinfo/Asia/Shanghai

8. 创建数据库并导入数据

Pod 创建完成后,需要进入到 Pod 中创建 confluence_smc 库:

CREATE DATABASE confluence_smc CHARACTER SET utf8 COLLATE utf8_bin;

为数据库赋权:

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO root@'127.0.0.1' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO root@'localhost' IDENTIFIED BY '123456';
flush privileges;

配置完成后,将已备份的数据库数据导入到新的库中即可。

二、Confluence 服务

1. 制作 Confluence 镜像

我是基于 Ubuntu:16.04 来制作的 Confluence 镜像,首先下载 Ubuntu:16.04 镜像,修改 tag 后推送到内部镜像仓库:

docker pull ubuntu:16.04
docker tag ubuntu:16.04 harbor.inner.com/ops/ubuntu:16.04
docker push harbor.inner.com/ops/ubuntu:16.04

然后创建用于制作 Confluence 镜像的 Dockerfile 文件,内容如下:

FROM harbor.inner.com/ops/ubuntu:16.04MAINTAINER haha@xxx.comCOPY run.sh /
COPY sources.list /etc/apt/ADD wiki.tar.gz /optENV TZ=Asia/ShanghaiRUN apt-get update && apt-get -y install fontconfig \&& rm -rf /var/cache/apt/archives/*.deb \&& ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneEXPOSE 8090CMD ["/run.sh"]
  • wiki.tar.gz 文件就是备份的原 confluence 工作目录文件
  • 安装 fontconfig 是为了解决 confluence 启动时报错 System fonts are not available 的问题,具体报错内容如下:
Starting Installer ...
java.lang.NullPointerExceptionat sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)at sun.awt.FontConfiguration.init(FontConfiguration.java:107)at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774)
...

启动脚本 run.sh 内容如下(脚本需要添加 x 权限):

#!/bin/bash[ -e /opt/confluencedata/lock ] && rm -rf /opt/confluencedata/lock
/opt/wiki/bin/catalina.sh run

confluence 服务启动的命令是 /opt/wiki/bin/startup.sh ,这里使用 /opt/wiki/bin/catalina.sh run 是为了保证 tomcat 在前台运行,否则 Pod 会自动停止。

在启动之前删除数据目录下的 lock 文件是确保 confluence 服务在重新部署时,有可能未删除 lock 文件,这样会导致新启动的 confluence 服务检测到 lock 文件,认为与其他 confluence 服务共用了数据目录,会导致报错。

将 run.sh 、sources.list 、wiki.tar.gz 文件放到与 Dockerfile 文件同级的目录下,执行如下命令构建镜像:

docker build --tag harbor.inner.com/ops/confluence:6.15.10 -f Dockerfile .

推送镜像到内部仓库。

docker push harbor.inner.com/ops/confluence:6.15.10 -f Dockerfile .

2. 创建命名空间

上文中创建 MySQL 服务时已经创建了 ns-wiki 命名空间,此处不再创建。

3. 创建 PV

创建如下目录用于存储 confluence 数据:

 mkdir -p /opt/ops_ceph_data/confluence_data

将备份的原 confluence 服务的数据目录文件 confluencedata.tar.gz 解压到该目录下,并修改数据库连接地址。

创建用于持久化存储 confluence 数据的 pv,yaml 文件内容如下:

---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:name: ceph-wiki-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer---
apiVersion: v1
kind: PersistentVolume
metadata:name: ceph-wiki-pv
spec:accessModes:- ReadWriteOncecapacity:storage: 500Gilocal:path: /opt/ops_ceph_data/confluence_data/confluencedatanodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: confluence-appoperator: Invalues:- "true"persistentVolumeReclaimPolicy: RetainstorageClassName: ceph-wiki-storage
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: ceph-wiki-pvcnamespace: ns-wiki
spec:accessModes:- ReadWriteOncestorageClassName: ceph-wiki-storageresources:requests:storage: 500Gi

在 k8s 的 node 节点上创建用于绑定 pv 的label:

for i in 1 2 3 4 5
dokubectl label nodes k8s-node${i} confluence-app=true
done

4. 创建 Service

创建用于映射 confluence 服务端口的 Service,yaml 文件内容如下:

---
kind: Service
apiVersion: v1
metadata:labels:app: wikiname: wiki-portnamespace: ns-wiki
spec:type: NodePortports:- port: 8090protocol: TCPtargetPort: 8090nodePort: 32090selector:app: wiki

5. 创建 Deployment

创建 confluence 的 Pod,yaml 文件内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:name: wikilabels:app: wikinamespace: ns-wiki
spec:replicas: 1selector:matchLabels:app: wikitemplate:metadata:name: wikilabels:app: wikispec:restartPolicy: Alwayscontainers:- name: wikiimage: harbor.inner.com/ops/confluence:6.15.10imagePullPolicy: AlwaysvolumeMounts:- name: wiki-datamountPath: /opt/confluencedata- name: date-confmountPath: /etc/localtimeimagePullSecrets:- name: harbor-secretvolumes:- name: wiki-datapersistentVolumeClaim:claimName: ceph-wiki-pvc- name: date-confhostPath:path: /usr/share/zoneinfo/Asia/Shanghai

本文原文链接:https://blog.csdn.net/xzk9381/article/details/109570960,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。

使用 k8s 搭建 confluence 6.10.x 版本相关推荐

  1. 2019最新k8s集群搭建教程 (centos k8s 搭建)

    2019-k8s-centos 2019最新k8s集群搭建教程 (centos k8s 搭建) 网上全是要么过时的,要么残缺的,大多数都是2016年,2017年的文档,照着尝试了N次,各种卸了重装,最 ...

  2. 搭建 Harbor 1.10.6 高可用集群

    推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...

  3. k8s部署tomcat及web应用_k8s介绍 k8s搭建一个应用(mysql+tomcat)

    k8s介绍 k8s搭建一个应用(mysql+tomcat) kubetnetes介绍 官网 https://kubernetes.io/ Kubernetes也就是k8s Kubernetes是一个开 ...

  4. 《Centos7——k8s搭建》

    目录 k8s搭建 1.关闭防火墙 2.时间同步 3.修改主机名(三台分别修改) 4. 编辑hosts文件 5: 安装指定版本的docker 6:运行docker 7:docker镜像加速 8:上传k8 ...

  5. K8S搭建自动化部署环境(四)Jenkins多分支流水线Blue Ocean的安装和使用

    各位大佬,前文如下: K8S搭建自动化部署环境(一)安装Kubernetes K8S搭建自动化部署环境(二)安装K8S管理工具Kuboard V3 K8S搭建自动化部署环境(三)Jenkins下载.安 ...

  6. k8s搭建部署--三个节点服务器(超详细)

    目录 k8s搭建部署--三个节点服务器 docker环境准备 安装kubeadm,kubelet和kubectl Centos添加kubernetes YUM软件源 ubuntu修改源 master主 ...

  7. (亲测无坑)Centos7.x使用kubeadm安装K8s集群1.15.0版本

    基础环境配置 三台Centos7.x的服务器,主节点 cpu >=2,node节点>=1 注:(上述cpu为最低配置,否则集群安装部署会报错,无法启动,对其他硬件无硬性要求) 以下操作若无 ...

  8. K8S搭建自动化部署环境(三)Jenkins下载、安装和启动

    各位大佬,前文如下: K8S搭建自动化部署环境(一)安装Kubernetes K8S搭建自动化部署环境(二)安装K8S管理工具Kuboard V3 一.jenkins 下载 jenkins下载地址:h ...

  9. 使用Docker搭建ceph群集(nautilus版本)

    使用Docker搭建ceph群集(nautilus版本) 一.ceph简介 概述 Ceph是一种为优秀的性能.可靠性和可扩展性而设计的统一的.分布式文件系统.Ceph是一个开源的分布式文件系统.因为它 ...

最新文章

  1. UISegmentedControl swift
  2. vs code 添加jquery的智能提示
  3. linux学习教程(一)(安装篇)centos7没有安装ifconfig命令的解决方法
  4. 怎样从frm ibd恢复mysql_怎样从frm,ibd恢复MYSQL
  5. java对象gc恢复_JVM垃圾回收与对象状态
  6. 雅马哈AI系统能自动为舞蹈配乐,跟节奏跳舞时代已不再
  7. 【模拟信号】基于matlab标准调幅信号产生+解调【含Matlab源码 984期】
  8. c语言双人贪吃蛇-基于图形库实现
  9. windows下 PHP 安装
  10. 寻找“最好”(2)——欧拉-拉格朗日方程
  11. Android开发----MaterialDesign设计下material-dialogs用法
  12. GMT、UTC、DST、CST时区
  13. 实现数据结构中的栈---后进先出LIFO
  14. 用户名修改后进入不了计算机,更改计算机用户名后不能登录到桌面怎么办?
  15. 计算机用户删除文件找回,电脑上删除的文件如何找回 业内人士分享小技巧
  16. Windows平台下GTK 窗口在任务栏的隐藏问题以及解决办法
  17. NAND Flash硬件原理
  18. java 设计模式 常用21种
  19. (附源码)计算机毕业设计黄淮学院二手物品交易平台
  20. 图片+文案(在图片上)

热门文章

  1. POJ3579 Median【二分法+中位数】
  2. NUC1013 阶乘结果末尾有多少零【分析思维】
  3. NUC1100 Biorhythms【中国剩余定理】
  4. 骗术 —— 魔高一尺道高一丈
  5. Linux 动态链接和静态链接简析(库名与库文件名)
  6. Spark 机器学习 —— KMeans
  7. Python 机器学习——线性代数和矩阵运算:从matlab迁移到python
  8. python varchar_在python中声明varchar
  9. micropython和python区别-什么是MicroPython?
  10. python编程入门与案例详解-干货|| 清华大佬推荐的python400集入门资料