前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于Kubernetes部署MatterMost实践

基于Kubernetes部署MatterMost实践

作者头像
DevOps云学堂
发布于 2020-06-07 02:29:45
发布于 2020-06-07 02:29:45
1.5K00
代码可运行
举报
文章被收录于专栏:DevOps持续集成DevOps持续集成
运行总次数:0
代码可运行

本文主要讲解使用Helm在K8S中部署MatterMost,涉及到一些坑需要修改chart模板文件。。

Mattermost

Mattermost是为开发团队推动创新而构建的开源消息传递平台。支持私有云部署在不牺牲隐私的情况下提供了现代通信的优势。Mattermost为企业提供了自治能力和可扩展性,使他们能够在满足需求的同时提高生产力IT和安全团队的要求。

Mattermost可轻松与流行的DevOps工具集成,例如Jira,Jenkins,GitLab,Trac,Redmine和Bitbucket。免费提供数十种开源集成,包括交互式bot应用程序(例如Hubot和whatmost-bot)以及其他通信工具。

Mattermost支持DevOps工作流程,许多DevOps工作流程都依赖实时协作。团队在关键时刻使用消息传递来提高效率—设置基础架构,合并代码分支或解决紧急错误。Mattermost统一了人员,工具,系统数据和自动化,以帮助您的组织发挥最佳性能。


Mattermost驱动DevOps生命周期

消息传递是DevOps团队合作的核心。这是工作流融合,进行关键交互并制定决策的地方。Mattermost通过实现与团队现有的DevOps工具和系统的集成,使您的工作流协作更加强大。

Plan计划:最重要的是有关功能,决策,技术等等的团队对话的记录系统。每个人都保持最新状态,并就项目状态和后续步骤保持一致。

Code代码:开发人员使用Mattermost进行协作和支持,使他们能够轻松地提出问题,解决问题,讨论技术方法并查看代码。

Build构建:平台集成使构建过程变得简单而透明。开发人员在Mattermost渠道中手动触发构建,然后团队会收到有关其成功或失败的通知。

Test测试:DevOps团队将他们最喜欢的CI和错误跟踪工具与Mattermost集成在一起,从而创建了一个强大的测试中心。该平台会自动触发测试并发布有关新错误的警报。

Release发布:发布构建后,DevOps团队将依靠Mattermost中的通知来告知他们发布已成功,因此他们可以加快功能和修补程序的交付。

Deploy部署:将代码投入生产后,DevOps团队会通过Mattermost进一步接收通知和数据。他们可以轻松跟踪哪些服务器接收到该代码并查看任何相关统计信息。

Monitor监控:DevOps监视工具可跟踪应用程序的运行状况和生产性能。使数据在Mattermost上可见可以帮助团队获得见解并制定决策。


通过上述的简介,相信大家已经对Mattermost有了简单的了解。


Mattermost安装

Mattermost Server支持UbuntuCentOSWindows、Docker、Kubernetes部署,本次我们采用CentOS系统进行部署。

Mattermost Client提供了全终端支持。


Helm 部署

添加helm源

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# helm repo add mattermost https://helm.mattermost.com"mattermost" has been added to your repositories# helm repo listNAME        URLstable      http://mirror.azure.cn/kubernetes/charts/gitlab      https://charts.gitlab.iomattermost  https://helm.mattermost.com
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# helm search repo -l mattermost/mattermost-team-editionNAME                                CHART VERSION  APP VERSION  DESCRIPTIONmattermost/mattermost-team-edition  3.10.0         5.13.2       Mattermost Team Edition server.mattermost/mattermost-team-edition  3.9.1          5.13.2       Mattermost Team Edition server.mattermost/mattermost-team-edition  3.9.0          5.13.2       Mattermost Team Edition server.mattermost/mattermost-team-edition  3.8.3          5.13.2       Mattermost Team Edition server.mattermost/mattermost-team-edition  3.8.2          5.13.2       Mattermost Team Edition server.mattermost/mattermost-team-edition  3.8.1          5.13.2       Mattermost Team Edition server.mattermost/mattermost-team-edition  3.8.0          5.13.2       Mattermost Team Edition server.mattermost/mattermost-team-edition  3.7.0          5.13.2       Mattermost Team Edition server.mattermost/mattermost-team-edition  3.6.2          5.13.2       Mattermost Team Edition server.mattermost/mattermost-team-edition  3.6.0          5.13.0       Mattermost Team Edition server.mattermost/mattermost-team-edition  3.5.1          5.12.4       Mattermost Team Edition server.mattermost/mattermost-team-edition  3.4.1          5.11.0       Mattermost Team Edition server.mattermost/mattermost-team-edition  3.4.0          5.11.0       Mattermost Team Edition server.mattermost/mattermost-team-edition  3.3.0          5.10.0       Mattermost Team Edition server.mattermost/mattermost-team-edition  3.2.0          5.10.0       Mattermost Team Edition server.

下载源码进行自定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm fetch mattermost/mattermost-team-edition --version=3.10.0
创建namespace
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl create ns mattermost
创建两个PV存储数据

新建mattermost-data用于存储数据,mattermost-plugins用户存储插件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1kind: PersistentVolumemetadata:  name: mattermost-data  namespace: mattermost  labels:    type: localspec:  storageClassName: manual  capacity:    storage: 10Gi  accessModes:    - ReadWriteOnce  hostPath:    path: "/data/devops/mattermost/data"---apiVersion: v1kind: PersistentVolumemetadata:  name: mattermost-plugins  namespace: mattermost  labels:    type: localspec:  storageClassName: manual  capacity:    storage: 1Gi  accessModes:    - ReadWriteOnce  hostPath:    path: "/data/devops/mattermost/plugins"

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@zeyang-nuc-service mattermost-team-edition]# kubectl create -f pv.yamlpersistentvolume/mattermost-data createdpersistentvolume/mattermost-plugins created[root@zeyang-nuc-service mattermost-team-edition]# kubectl get pv -n mattermostNAME                 CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                              STORAGECLASS   REASON   AGEmattermost-data      10Gi       RWO            Retain           Available                                      manual                  9smattermost-plugins   1Gi        RWO            Retain           Available                                      manual                  9s
创建数据库

准备一个PG数据库,然后添加账号。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
postgres=# CREATE DATABASE mattermost;CREATE DATABASEpostgres=# CREATE USER mmuser WITH PASSWORD 'mmuser-password';CREATE ROLEpostgres=# GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;GRANTpostgres=# \qcould not save history to file "/var/lib/pgsql/.psql_history": No such file or directory[postgres@zeyang-nuc-service ~]$ exitlogout
自定义value.yml

添加PV设置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##persistence:  ## This volume persists generated data from users, like images, attachments...  ##  data:    enabled: true    size: 10Gi    ## If defined, volume.beta.kubernetes.io/storage-class: <storageClass>    ## Default: volume.alpha.kubernetes.io/storage-class: default    ##    storageClass: manual    accessMode: ReadWriteOnce  # existingClaim: ""  plugins:    enabled: true    size: 1Gi    ## If defined, volume.beta.kubernetes.io/storage-class: <storageClass>    ## Default: volume.alpha.kubernetes.io/storage-class: default    ##    storageClass: manual    accessMode: ReadWriteOnce  # existingClaim: ""

配置Ingress

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ingress:  enabled: true  path: /  annotations:     kubernetes.io/ingress.class: nginx    #### To use the nginx cache you will need to set an http-snippet in the ingress-nginx configmap    #### http-snippet: |    ####     proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;  hosts:    - mm.idevops.site  tls:    # - secretName: mattermost.example.com-tls    #   hosts:    #     - mattermost.example.com

连接外部数据库

mysql示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## If use this please disable the mysql chart by setting mysql.enable to falseexternalDB:  enabled: true
  ## postgres or mysql  externalDriverType: "mysql"
  ## postgres:  "postgres://<USERNAME>:<PASSWORD>@<HOST>:5432/<DATABASE_NAME>?sslmode=disable&connect_timeout=10"  ## mysql:     "<USERNAME>:<PASSWORD>@tcp(<HOST>:3306)/<DATABASE_NAME>?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s"  externalConnectionString: "xxxx:xxxxx@tcp(xxxx:3306)/mattermost?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s"

postgres示例:(这是我们使用的)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## If use this please disable the mysql chart by setting mysql.enable to falseexternalDB:  enabled: true
  ## postgres or mysql  externalDriverType: "postgres"
  ## postgres:  "postgres://<USERNAME>:<PASSWORD>@<HOST>:5432/<DATABASE_NAME>?sslmode=disable&connect_timeout=10"  ## mysql:     "<USERNAME>:<PASSWORD>@tcp(<HOST>:3306)/<DATABASE_NAME>?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s"  externalConnectionString: "postgres://mmuser:mmuser-password@192.168.1.200:5432/mattermost?sslmode=disable&connect_timeout=10"

验证数据库可以正常访问

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
psql -h 192.168.1.200 -p 5432 -d mattermost  -U mmuser

部署

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm install mattermost-server --namespace mattermost ./mattermost-team-editionhelm delete mattermost-server --namespace mattermost ./mattermost-team-edition

FAQ

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
err=pq: no pg_hba.conf entry for host \"10.244.0.148\", user \"mmuser\", database \"mattermost\", SSL off"}

修改pg_hba.conf、 postgres.conf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## pg_hba.conf
host   all             all            192.168.1.0/24              md5host   all             all            10.244.0.1/24              md5

##  postgres.conflisten_addresses = '*'

网页配置

访问:http://mm.idevops.site.

创建用户:输入邮箱、用户名称、密码。admin:Devops.com123

创建一个新的团队,输入团队名称。

创建完成

设置中文

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
write file: open /mattermost/config/config.json: read-only file system"}
解决配置文件无法写入问题:

创建一个pv持久化/mattermost/config目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p /data/devops/mattermost/config

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---apiVersion: v1kind: PersistentVolumemetadata:  name: mattermost-config  namespace: mattermost  labels:    type: localspec:  storageClassName: manual  capacity:    storage: 1Gi  accessModes:    - ReadWriteOnce  hostPath:    path: "/data/devops/mattermost/config"------apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: mattermost-config-pvc  namespace: mattermostspec:  storageClassName: manual  accessModes:    - ReadWriteOnce  resources:    requests:      storage: 1Gi

修改templates/deployment.yaml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#挂载pvcvolumeMounts:- mountPath: /mattermost/config/config.json  name: config-json  subPath: config.json
- mountPath: /mattermost/config  name: mattermost-config

--------------------------------------------volumes:- name: config-json  secret:    secretName: {{ include "mattermost-team-edition.fullname" . }}-config-json
- name: mattermost-config  persistentVolumeClaim:    claimName: {{ .Values.persistence.config.existingClaimName }}        --------------------------------------------#删除 24行配置checksum/config: {{ include (print $.Template.BasePath "/secret-config.yaml") . | sha256sum }}

--------------------------------------------#删除 templates/secret-config.yaml
--------------------------------------------# 在values.yaml中定义config pvc的名称(注意名称要与创建的一致)persistence:  ## This volume persists generated data from users, like images, attachments...  ##  config:    existingClaimName: mattermost-config-pvc

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
helm delete  mattermost-server --namespace mattermost ./mattermost-team-editionkubectl delete -f ./mattermost-team-edition/config-pvc.yamlkubectl delete -f ./mattermost-team-edition/pv.yamlkubectl create -f ./mattermost-team-edition/config-pvc.yamlkubectl create -f ./mattermost-team-edition/pv.yamlhelm install  mattermost-server --namespace mattermost ./mattermost-team-edition

ChatOps是一种以对话为中心的协作式工作方式,Mattermost ChatOps将不同的工具和工作流程整合在一起,以提供共享的控制台,以简化协作,缩短反馈循环并自动执行重复的手动任务。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps持续集成 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
现学现用的 10 个 Python 技巧
原文:10 Python Tips and Tricks You Should Learn Today
Crossin先生
2020/04/08
9710
相见恨晚的 Python 内置库:itertools
来源 : 忆先 01 前言 很多人都致力于把Python代码写得更Pythonic,一来更符合规范且容易阅读,二来一般Pythonic的代码在执行上也更有效率。今天就先给大家介绍一下Python的系统库itertools。 02 itertools库 迭代器(生成器)在Python中是一种很常用也很好用的数据结构,比起列表(list)来说,迭代器最大的优势就是延迟计算,按需使用,从而提高开发体验和运行效率,以至于在Python 3中map,filter等操作返回的不再是列表而是迭代器。 话虽这么说但大家平
张俊红
2022/03/03
7150
Python 技巧十则
据Stack Overflow上的数据显示,Python是增长最快的编程语言。福布斯的一篇最新报告(https://www.whatech.com/development/press-release/442278-why-developers-vote-python-as-the-best-application-programming-language)指出,Python去年增长了456%。Netflix使用Python,IBM使用Python,其他数百家公司都使用Python。对了,不要忘记Dropbox,它也是用Python创建的。根据Dice的研究显示(https://insights.dice.com/2016/02/01/whats-hot-and-not-in-tech-skills/),Python也是最热门的语言之一,并且根据《Popularityof Programming Language Index(https://pypl.github.io/PYPL.html)》来看,它也是世界上最受欢迎的编程语言。
AI研习社
2019/12/09
1.1K0
18 个 Python 高效编程技巧,Mark!
初识Python语言,觉得python满足了我上学时候对编程语言的所有要求。python语言的高效编程技巧让我们这些大学曾经苦逼学了四年c或者c++的人,兴奋的不行不行的,终于解脱了。高级语言,如果做不到这样,还扯啥高级呢?
小小詹同学
2019/05/04
5910
22个Python最佳编程技巧,新手越早知道越好
这个情况如果要交换变量在c++中,肯定需要一个空变量。但是python不需要,只需一行,大家看清楚了
一墨编程学习
2019/04/18
5010
22个Python最佳编程技巧,新手越早知道越好
【Python入门第十三讲】可迭代对象(Iterable)、迭代器(Iterator)和生成器(Generator)
在 Python 中,可迭代对象(Iterable)、迭代器(Iterator)和生成器(Generator)是处理数据集合和处理大数据时常用的概念和工具。
不惑
2024/02/08
1.7K0
【Python入门第十三讲】可迭代对象(Iterable)、迭代器(Iterator)和生成器(Generator)
命令行上的数据科学第二版 四、创建命令行工具
在整本书中,我将向您介绍许多基本上适合一行的命令和管道。这些被称为一行程序或管道。能够只用一行程序执行复杂的任务是命令行的强大之处。这是一种与编写和使用传统程序截然不同的体验。
ApacheCN_飞龙
2023/03/31
2.3K0
如何在一场面试中展现你对Python的coding能力?
如果你已经通过了招聘人员的电话面试,那么下面正是该展现你代码能力的时候了。无论是练习,作业,还是现场白板面试,这都是你证明自己的代码技巧的时刻。
Python数据科学
2019/04/26
1.3K0
如何在一场面试中展现你对Python的coding能力?
Python 炫技操作(03):连接列表的八种方法
Python 语言里有许多(而且是越来越多)的高级特性,是 Python 发烧友们非常喜欢的。在这些人的眼里,能够写出那些一般开发者看不懂的高级特性,就是高手,就是大神。
朱小五
2020/04/22
5140
Python 工匠:容器的门道
容器”这两个字很少被 Python 技术文章提起。一看到“容器”,大家想到的多是那头蓝色小鲸鱼:Docker,但这篇文章和它没有任何关系。本文里的容器,是 Python 中的一个抽象概念,是对专门用来装其他对象的数据类型的统称。
腾讯蓝鲸助手
2022/06/28
5710
弄懂这56个Python使用技巧,秒变Python大神!
你也许知道如何进行列表解析,但是可能不知道字典/集合解析。它们简单易用且高效。就像下面这个例子:
一墨编程学习
2019/08/12
1.3K0
新手上路必学的Python函数基础知识,全在这里了(多段代码举例)
导读:函数是Python中最重要、最基础的代码组织和代码复用方式。根据经验,如果你需要多次重复相同或类似的代码,就非常值得写一个可复用的函数。通过给一组Python语句一个函数名,形成的函数可以帮助你的代码更加可读。
IT阅读排行榜
2018/08/17
6850
Python3标准库built-in、
Python3中实现了很多生成器函数,本篇主要介绍built-in、itertools、functools模块中的生成器。
py3study
2020/01/02
1.5K0
流畅的 Python 第二版(GPT 重译)(九)
迭代对于数据处理是基础的:程序将计算应用于数据系列,从像素到核苷酸。如果数据不适合内存,我们需要惰性地获取项目——一次一个,并按需获取。这就是迭代器的作用。本章展示了迭代器设计模式是如何内置到 Python 语言中的,因此您永远不需要手动编写它。
ApacheCN_飞龙
2024/03/21
3040
流畅的 Python 第二版(GPT 重译)(九)
Python 容器使用的 5 个技巧和 2 个误区
在 Python 中,有四类最常见的内建容器类型: 列表(list)、 元组(tuple)、 字典(dict)、 集合(set)。通过单独或是组合使用它们,可以高效的完成很多事情。
一墨编程学习
2019/07/14
8190
笨办法学 Python · 续 练习 16:冒泡、快速和归并排序
你现在将尝试为你的DoubleLinkedList数据结构实现排序算法。对于这些描述,我将使用“数字列表”来表示随机的事物列表。这可能是一堆扑克牌,一张纸上的数字,名称列表或其他任何可以排序的东西。当你尝试排序数字列表时,通常有三个备选方案:
ApacheCN_飞龙
2022/12/01
3930
一系列有用的Python技巧
幸好,Python的标准库提供了collections模块,它为您提供了更多的数据类型
会呼吸的Coder
2020/02/17
6570
独家 | 16个Python技巧,轻松解锁编程新境界(附链接)
作者:Anmol Tomar 翻译:王闯(Chuck)校对:赵茹萱 本文约2700字,建议阅读7分钟本文介绍了16个 Python 编程技巧。 标签:数据科学、Python 掌握这些技巧不仅能够提高编程效率,还能使你的代码更加优美和高效,让人眼前一亮!如果你想在编程路上更进一步,那么不妨一试。 让Python开发者生活更加轻松的技巧 图片来源: Unsplash 简介 Python作为一种编程语言,拥有大量的库和框架,获得广泛应用。然而,有些Python 编程技巧和库却鲜为人知,开发者如果能掌握这些技巧
数据派THU
2023/04/03
3730
独家 | 16个Python技巧,轻松解锁编程新境界(附链接)
Python工匠:解析容器类型的门道
花下猫语:年关已近,我本周忙得天昏地暗,忙中出了不少错,喵了个去。无论如何,希望大伙是买票顺顺利利的,回家安安全全的,过年是开开心心的。今天,给大家分享的是一篇很长的好文,祝大家阅读愉快。PS:本文是该系列的第四篇,其它文章也很好,文末附了链接,可关联阅读哦~
Python猫
2019/04/09
8250
什么是好的编程语言?
本文作者是高级系统开发工程师 Torbear Gannholm。Torbear 有着 30 多年的开发经验,对技术很深刻的理解。对于什么是好的编程语言,他发表了一篇文章分享了自己的观点。以下是他的全文:
AI研习社
2019/11/23
2.9K0
相关推荐
现学现用的 10 个 Python 技巧
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档