背景

团队计划基于 kubernetes 搭建一套云原生的开发平台,集成项目管理、需求管理、 BUG 管理、在线 IDE 、 gitops 、代码检查 、 自动测试、知识库等功能。

xwiki 是优秀的开源 wiki 系统,基于 java 开发,目前更新还比较活跃, 正好需要一个 wiki 来做知识库管理,决定选他了。

以下工作是在 kubernetes 1.23.0 已经部署好的情况下进行的。部署 kubernetes 可以参考我另外的文章 “kubesphere 多节点集群安装”

准备storageclass

我们使用 openebs作为存储,openebs默认安装的 local storageclass 在 pod 销毁后自动删除,不适合用于我的 mysql 存储,我们在 local storageclass 基础上稍作修改,创建新的 storageclass,允许 pod 销毁后,pv 内容继续保留,手动决定怎么处理。

apiVersion: v1
items:
- apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:annotations:cas.openebs.io/config: |- name: StorageTypevalue: "hostpath"- name: BasePathvalue: "/var/openebs/localretain/"openebs.io/cas-type: localstorageclass.beta.kubernetes.io/is-default-class: "false"storageclass.kubesphere.io/supported-access-modes: '["ReadWriteOnce"]'name: localretainprovisioner: openebs.io/localreclaimPolicy: RetainvolumeBindingMode: WaitForFirstConsumer
kind: List
metadata:resourceVersion: ""selfLink: ""

部署 mysql

在 kubernetes 环境下,因为 pod 都是动态创建的,采用传统的 ENV 环境变量来传递信息,存在敏感信息泄露的风险,推荐使用 secret 来保存敏感的配置信息,同时也可以方便动态绑定到 pod。

推荐使用 configmap 保存 pod 需要的其他配置信息。这样可以跟 pod 更好的配合。

准备用户名密码配置

我们使用 secret 保存 mysql 用户名密码等敏感信息。

kind: Secret
apiVersion: v1
metadata:name: xwiki-mysql
data:MYSQL_DATABASE: eHdpa2k=MYSQL_PASSWORD: 自行填写MYSQL_USER: eHdpa2k=MYSQL_ROOT_PASSWORD: 自行填写
type: Opaque

创建 configmap

我们使用 configmap 保存 mysql 的配置文件,以及数据库初始化文件。

apiVersion: v1
kind: ConfigMap
metadata:name: xwiki-mysql-cnf
data:xwiki.cnf: |-[client]default-character-set = utf8mb4[mysqld]character-set-server = utf8mb4collation-server = utf8mb4_binexplicit_defaults_for_timestamp = 1[mysql]default-character-set = utf8mb4---
apiVersion: v1
kind: ConfigMap
metadata:name: xwiki-mysql-init
data:init.sql: |-grant all privileges on *.* to xwiki@'%'

准备存储

我们使用 openesb 来提供存储服务。可以通过 创建 pvc 来提供持久化存储。

这里声明一个 10G 的 pvc

---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: xwiki-db-datafinalizers:- kubernetes.io/pvc-protection
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: localretainvolumeMode: Filesystem

部署 mysql 数据库

在前面的步骤准备好各种配置信息和存储后,就可以开始部署 mysql 服务了。
我们的 kubernetes 没有配置 存储阵列,使用的是 openesb 作为存储,我们使用 deployment 来部署 mysql 服务。

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: xwiki-dbname: xwiki-db
spec:replicas: 1selector:matchLabels:app: xwiki-dbtemplate:metadata:labels:app: xwiki-dbspec:containers:- name: dbimagePullPolicy: IfNotPresentimage: 'mysql:5.7'ports:- name: tcp-3306protocol: TCPcontainerPort: 3306envFrom:- secretRef:name: xwiki-mysqlvolumeMounts:- name: xwiki-db-datareadOnly: falsemountPath: /var/lib/mysql- name: xwiki-mysql-cnfreadOnly: truemountPath: /etc/mysql/conf.d- name: xwiki-mysql-initreadOnly: truemountPath: /docker-entrypoint-initdb.dvolumes:- name: xwiki-db-datapersistentVolumeClaim:claimName: xwiki-db-data- name: xwiki-mysql-cnfconfigMap:name: xwiki-mysql-cnf- name: xwiki-mysql-initconfigMap:name: xwiki-mysql-init

创建供 xwiki 访问的 service

apiVersion: v1
kind: Service
metadata:name: xwiki-db
spec:selector:app: xwiki-dbports:- protocol: TCPport: 3306targetPort: tcp-3306

完成 mysql 部署。

测试略

部署 xwiki

准备用户名密码配置

我们使用 secret 保存 xwiki 用于连接数据库的用户名密码等敏感信息。

apiVersion: v1
kind: Secret
apiVersion: v1
metadata:name: xwiki-web
data:DB_HOST: eHdpa2ktZGI=DB_PASSWORD: 自行填写DB_USER: eHdpa2k=
type: Opaque

准备存储pvc

我们使用 openesb 来提供存储服务。可以通过 创建 pvc 来提供持久化存储。

这里声明一个 50G 的 pvc

kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: xwiki-web-datafinalizers:- kubernetes.io/pvc-protection
spec:accessModes:- ReadWriteOnceresources:requests:storage: 50GistorageClassName: localretainvolumeMode: Filesystem

部署 xwiki

在前面的步骤准备好各种配置信息和存储后,就可以开始部署 xwiki 服务了。

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: xwikiname: xwiki
spec:replicas: 1selector:matchLabels:app: xwikitemplate:metadata:labels:app: xwikispec:containers:- name: xwikiimage: 'xwiki:mysql-tomcat'ports:- name: http-8080protocol: TCPcontainerPort: 8080envFrom:- secretRef:name: xwiki-webvolumeMounts:- name: xwiki-web-datareadOnly: falsemountPath: /usr/local/xwikivolumes:- name: xwiki-web-datapersistentVolumeClaim:claimName: xwiki-web-data

创建供 xwiki 的 service

apiVersion: v1
kind: Service
metadata:name: xwiki
spec:selector:app: xwikiports:- protocol: TCPport: 8080targetPort: http-8080

创建集群外访问的 Ingress

kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:name: xwiki
spec:ingressClassName: nginxrules:- host: xwiki.xyz.cnhttp:paths:- path: /pathType: ImplementationSpecificbackend:service:name: xwikiport:number: 8080

完整的 yaml 文件

以下是完整的通过 deployment 部署 mysql 数据库和 xwiki 的 yaml 文件,保存为 xwiki.yaml 。

apiVersion: v1
kind: Secret
apiVersion: v1
metadata:name: xwiki-web
data:DB_HOST: eHdpa2ktZGI=DB_PASSWORD: 自行填写DB_USER: eHdpa2k=
type: Opaque---
kind: Secret
apiVersion: v1
metadata:name: xwiki-mysql
data:MYSQL_DATABASE: eHdpa2k=MYSQL_PASSWORD: 自行填写MYSQL_USER: eHdpa2k=MYSQL_ROOT_PASSWORD: 自行填写
type: Opaque---
apiVersion: v1
kind: ConfigMap
metadata:name: xwiki-mysql-cnf
data:xwiki.cnf: |-[client]default-character-set = utf8mb4[mysqld]character-set-server = utf8mb4collation-server = utf8mb4_binexplicit_defaults_for_timestamp = 1[mysql]default-character-set = utf8mb4---
apiVersion: v1
kind: ConfigMap
metadata:name: xwiki-mysql-init
data:init.sql: |-grant all privileges on *.* to xwiki@'%'---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: xwiki-web-datafinalizers:- kubernetes.io/pvc-protection
spec:accessModes:- ReadWriteOnceresources:requests:storage: 50GistorageClassName: localretainvolumeMode: Filesystem---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: xwiki-db-datafinalizers:- kubernetes.io/pvc-protection
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: localretainvolumeMode: Filesystem---
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: xwiki-dbname: xwiki-db
spec:replicas: 1selector:matchLabels:app: xwiki-dbtemplate:metadata:labels:app: xwiki-dbspec:containers:- name: dbimagePullPolicy: IfNotPresentimage: 'mysql:5.7'ports:- name: tcp-3306protocol: TCPcontainerPort: 3306envFrom:- secretRef:name: xwiki-mysqlvolumeMounts:- name: xwiki-db-datareadOnly: falsemountPath: /var/lib/mysql- name: xwiki-mysql-cnfreadOnly: truemountPath: /etc/mysql/conf.d- name: xwiki-mysql-initreadOnly: truemountPath: /docker-entrypoint-initdb.dvolumes:- name: xwiki-db-datapersistentVolumeClaim:claimName: xwiki-db-data- name: xwiki-mysql-cnfconfigMap:name: xwiki-mysql-cnf- name: xwiki-mysql-initconfigMap:name: xwiki-mysql-init---
apiVersion: v1
kind: Service
metadata:name: xwiki-db
spec:selector:app: xwiki-dbports:- protocol: TCPport: 3306targetPort: tcp-3306---
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: xwikiname: xwiki
spec:replicas: 1selector:matchLabels:app: xwikitemplate:metadata:labels:app: xwikispec:containers:- name: xwikiimage: 'xwiki:mysql-tomcat'ports:- name: http-8080protocol: TCPcontainerPort: 8080envFrom:- secretRef:name: xwiki-webvolumeMounts:- name: xwiki-web-datareadOnly: falsemountPath: /usr/local/xwikivolumes:- name: xwiki-web-datapersistentVolumeClaim:claimName: xwiki-web-data---
apiVersion: v1
kind: Service
metadata:name: xwiki
spec:selector:app: xwikiports:- protocol: TCPport: 8080targetPort: http-8080---
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:name: xwiki
spec:ingressClassName: nginxrules:- host: xwiki.xyz.cnhttp:paths:- path: /pathType: ImplementationSpecificbackend:service:name: xwikiport:number: 8080

直接执行可以创建好 xwiki

kubectl apply -f xwiki.yaml

kubernetes上部署xwiki相关推荐

  1. 在Kubernetes上部署一个简单的、类PaaS的平台,原来这么容易!

    作者 | Bram Dingelstad 译者 | 弯月 责编 |徐威龙 封图| CSDN下载于视觉中国 我们都遇到过这种情况:有人发现了一个bug,然而这不是一般的软件bug,甚至都不是通常意义上的 ...

  2. 在Kubernetes上部署和管理PostgreSQL

    目录 有哪些选项可用于部署PostgreSQL? 选项 01 - 从头开始​​创建部署配置 选项 02 - 使用helm chart 什么是Helm? Helm架构 Helm由三个主要概念组成 如何安 ...

  3. aws eks_在带aws eks的kubernetes上部署带舵的破折号

    aws eks Today we are going to be talking about Deploying a Dash App on Kubernetes with a Helm Chart ...

  4. 小程序动画从头开始_如何从头开始在Kubernetes上部署弹性Node.js应用程序

    小程序动画从头开始 视频 (Video) 描述 (Description) You may have heard the buzz around Kubernetes and noticed that ...

  5. kubernetes上部署rook-ceph存储系统

    文章目录 1. 简单说说为什么用rook 2. rook-ceph部署 2.1 环境 2.2 Rook Operator部署 2.3 Ceph集群创建 2.3.1 标识osd节点 2.3.2 yaml ...

  6. 在 Kubernetes 上部署 Secret 加密系统 Vault

    作者 | 小碗汤 来源 | 进击云原生 HashiCorp Vault 是一个基于身份的 Secret 和加密管理系统.Secret 是您想要严格控制访问的内容,例如 API 加密密钥.密码或证书.V ...

  7. 如何在Kubernetes 上部署安装PHP + Nginx 多容器应用

    引言 Kubernetes是一个开源的容器编排系统.它允许你创建.更新和扩展容器,而无需担心停机. 要运行一个PHP应用程序,Nginx充当PHP-FPM的代理.将此设置打包到单个容器中可能是一个繁琐 ...

  8. 一文教你如何在生产环境中在Kubernetes上部署Jaeger

    作者 |  Dotan Horovit 翻译 | 火火酱~ 责编 | 晋兆雨 出品 | CSDN云计算 日志.指标和跟踪是"可观察性"领域的三大支柱.最近几个月,随着OpenTel ...

  9. 统计twitter帖子_在Kubernetes上部署InfluxDB和Grafana以收集Twitter统计信息

    统计twitter帖子 Kubernetes是市场上容器编排的事实上的领导者,它是一种令人难以置信的可配置且功能强大的编排工具. 与许多强大的工具一样,一开始它可能会让人感到困惑. 本演练将介绍创建多 ...

最新文章

  1. python安装后怎么配置环境变量_Python安装与环境变量的配置
  2. 算法----左叶子之和
  3. Hystrix之外健壮微服务的新选择:Sentinel 发布首个生产版本 1
  4. Pytorch基础(十)——优化器(SGD,Adagrad,RMSprop,Adam,LBFGS等)
  5. 服务器windows模拟linux环境,科学网—Windows不用虚拟机或双系统,轻松实现shell环境:gitforwindows - 刘永鑫的博文...
  6. ubuntu18.04下安装grafana6和简单使用
  7. Linux服务器如何防御ARP***
  8. 卡尔曼滤波原理(二):扩展卡尔曼
  9. mediamind SyncAds
  10. linux包含绝对路径头文件,linux-kernel - 访问用户空间内存访问函数(如access_ok(),get_from_user())需要包含的头文件的确切路径。 - 堆栈内存溢出...
  11. [转载]Oracle监听器安装与设置(2)
  12. c#如何调用php接口方法参数类型,c# – .NET:使用通用接口参数调用Assembly obj的GetInterface方法...
  13. jdy ble sdk android,JDY-18蓝牙模块 连接blinker超时
  14. 船舶导航软件测试,北斗卫星船舶定位及信息通信应用
  15. 莫言2012诺贝尔奖颁奖词
  16. get与navigate方法
  17. mfc 中文乱码转换为正常中文_中文编码转换
  18. 树莓派系统镜像的下载和烧录
  19. Mybatis Plus基础06 mapperLocations配置(指定Mapper.xml文件路径)
  20. SVG/CSS路径动画

热门文章

  1. Top N问题(一)基础
  2. java刷新透视表数据源,Excel数据透视表过滤源更新时更改的值
  3. Unity3D 取消发布游戏启动时的设置窗口并窗口化运行
  4. python3学习之路 -- 7)初级练习4 - 支付密码、账号、价格竞猜、星座
  5. 新技术到底靠不靠谱?在中国用一下就知道了
  6. go语言 第三方包安装方法_Adobe AE 2020 软件下载安装包教程(附下载方法)
  7. core java第十版_java核心技术第十版 笔记
  8. IOCTL_SCSI_PASS_THROUGH_DIRECT的使用对设备进行操作
  9. go桌面计算机,GO桌面快速找到应用程序方法教程
  10. 各层级、各部门有OKR模版吗,员工不知道怎么定目标怎么办?