JIRA on K8s helm部署实战

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介: JIRA on K8s helm部署实战

jira on k8s实战


waht?


你可能没听说过Atlassian,但我如果说:JIRA、Confluence、Bitbucket是不是就熟悉多了。


他们家有很多产品,都真的非常好用。比如公司使用JIRA做项目管理,使用Confluence做文档、知识管理等(我个人用它来做笔记)。

架构


7b007d9bfb4648c7b1ab816105f51701.png

如何选择chart


官方的chart


官方的chart 虽然前面,但是这个chart目前还不能部署成功

https://artifacthub.io/packages/helm/atlassian-data-center/jira

mox 的chart


相对比较简单. 外部存储使用nfs、外部数据库使用自建数据库、访问方式选择nodeport

https://artifacthub.io/packages/helm/mox/jira-software

【1】mox chart 安装脚本


在脚本中指定数据库连接信息,这不是推荐的做法,可以使用secret 将DB 账密隐藏起来

helm install my-release \
      --set databaseConnection.host="mydb.example.com" \
      --set databaseConnection.user="test" \
      --set databaseConnection.password="testpass" \
      --set databaseConnection.database="jiradb" \
      --set databaseConnection.port="5432" \
      --set databaseConnection.urlPrefix="jdbc:postgresql" \
      --set databaseConnection.databaseDriver="org.postgresql.Driver" \
      --set databaseConnection.type="postgres72" \
      --set databaseConnection.schemaName="public" \
      /opt/helm/jira-software/ -n jira

6

7

8

9

10

11

结果

[root@master2 /opt/helm/jira-software]# helm install jira-for-cim       --set databaseConnection.host="10.50.10.25"       --set databaseConnection.user="dbuser_dba"       --set databaseConnection.password="DBUser.DBA"       --set databaseConnection.database="meta"       --set databaseConnection.port="5432"       --set databaseConnection.urlPrefix="jdbc:postgresql"       --set databaseConnection.databaseDriver="org.postgresql.Driver"       --set databaseConnection.type="postgres72"       --set databaseConnection.schemaName="public" /opt/helm/jira-software/ -n jira
NAME: jira-for-cim
LAST DEPLOYED: Wed Nov 23 10:42:49 2022
NAMESPACE: jira
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
# 1. Get the application URL by running these commands:
  export NODE_PORT=$(kubectl get --namespace jira -o jsonpath="{.spec.ports[0].nodePort}" services jira-for-cim-jira-software)
  export NODE_IP=$(kubectl get nodes --namespace jira -o jsonpath="{.items[0].status.addresses[0].address}")
  echo http://$NODE_IP:$NODE_PORT

【2】生产环境的yaml


部分重要配置

# https://helm.mox.sh
image:
  # 仓库修改为自己的,先自己在有外网的机器上拉去,然后push上去
  repository: 10.50.10.185/jira/atlassian/jira-software 
  tag: "latest"
  ## Specify a imagePullPolicy
  ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
  ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
  ##
  pullPolicy: IfNotPresent
  ## Optionally specify an array of imagePullSecrets.
  ## Secrets must be manually created in the namespace.
  ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
# 服务暴露方式
service:
  ## For minikube, set this to NodePort, elsewhere use LoadBalancer
  type: NodePort
  ## Use serviceLoadBalancerIP to request a specific static IP, otherwise leave blank
  ##
  ## Avoid removing the http connector, as the Synchrony proxy health check, still requires HTTP
  ## HTTP Port, must be the same as ATL_TOMCAT_PORT (default: 8080)
  port: 8080
  ## nodePorts:
  ##   http: <to set explicitly, choose port between 30000-32767>
  ##   https: <to set explicitly, choose port between 30000-32767>
  ## 外部可访问的ip,注意区间
  nodePorts:
    http: 30103
    https:
# 资源限制
resources:
  requests: # 首次启动至少需要的资源
    memory: 4Gi
    cpu: 1
  limits:  # 对总消耗资源的限制
    memory: 4Gi
persistence:
  enabled: true
  annotations: {}
  ## existingClaim needs the existing PVC name
  existingClaim: ""
  accessMode: ReadWriteOnce
  size: 50Gi
  ## If defined, storageClassName: <storageClass>
  # nfs sc
  storageClass: nfs-storage-179sc
envVars:
  #
  ## Memory / Heap Size (JVM_MINIMUM_MEMORY) Mandatory, see @Notes above
  ## default: 1024m
  JVM_MINIMUM_MEMORY: 2048m
  ## Memory / Heap Size (JVM_MAXIMUM_MEMORY) Mandatory, see @Notes above
  ## default: 1024m
  JVM_MAXIMUM_MEMORY: 2048m
  ## The reserved code cache size of the JVM
  # JVM_RESERVED_CODE_CACHE_SIZE: 512m

jira 的sharedHome 和localHome 的区别?


aae2ac48a5b94d4096265da97ea26bf0.png

申请license


e0e95ddae1f04814b0f3bad3187276f5.pngeeba19fa99284d10b1bdf58136a1b810.png

cfa619e116b34ad3882f0f6f23203a83.png

license的限制


这个license 应该是只有90天,且只能绑定到指定ip上。

AAAB2w0ODAoPeNp9kl9vokAUxd/5FCT7spsNFIZIWxOStUCjG0ED1KbGlxGvMi4w7Axg+fbLv0a3Uh9v5t57fnPO/RYUILq0FBESkTpW9TG6F00/EJGCkPAHqhUwTmhqqLqi3CsPmqYKBwaQRjTLgMlzEkLKwd6RvOmy3cD2lt7MtwW3SLbAFvsXXm8wJFUwaZrjMHdxAsaRRqmcMPn0/uuQYBLLIU2EI2FYvhpbFiyMMAcL52A0VJKqSkgTeuWgyqBdaS4cx/bM2WT+8WS/Z4RVF3OomesxbKeWHebwgZXAZpbxNH8zpaeJE0hm4HqSNQqUDjJjdFeEudwUEqf7/IQZyPVWUoKRswJutdVA2IQ0B9a1xh3tFPPIcMyT+TytTj95sl+rW/s1ikbE+rvM0kCHRcUmkafcxaUSPr8Gu+N6VTr8rdQe/fXUX9HJxtgYgl9sechI1uZxZvk6qIE4h0yt/aqZU5yGXxh748tXofY6tcfzmeXbrjRXHx41pI/0bs1nj+oWY6BtWM3PMWsm9zjmICzYAaeE4/bbYUhzwWTQVp8vqg/i4+LRf860MBkjvA/YgrPLv2t50e/lxe8NvNjR/9iMRbvEcdEKdtBXZ3LD9EuCy7nzzq7+BygDTMYwLAIUZTubAbnGSD1NupQMTmoV2JmzDTECFDmcSTJUGqj+hIhlQQv+m7gNFZD0X02mi

登录地址及密码


http://10.50.10.31:30103/login.jsp
账密: admin/admin

00cd1571d40d45acbbddc6c86c94855d.png

官方社区问答


这里是k8s on jira的一个论坛,看起来并不活跃。


https://community.atlassian.com/t5/Jira-questions/Jira-on-Kubernetes/qaq-p/1301550#U2198629

禅道 on k8s


apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: zentao-pvc
  namespace: jira
spec:
  accessModes:
  - ReadWriteMany
  storageClassName: nfs-storage-179sc
  resources:
    requests:
      storage: 100Gi 
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: zentao-mysql-pvc
  namespace: jira
spec:
  accessModes:
  - ReadWriteMany
  storageClassName: nfs-storage-179sc
  resources:
    requests:
      storage: 50Gi
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: zentao
  name: zentao-client
  namespace: jira
spec:
  ports:
  - port: 80
    nodePort: 30105
    name: zentao
  selector:
    app: zentao
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: zentao
  namespace: jira
  labels:
    app: zentao
spec:
  selector:
    matchLabels:
      app: zentao
  replicas: 1
  template:
    metadata:
      labels:
        app: zentao
    spec:
      containers:
      - name: zentao
        image: 10.50.10.185/jira/easysoft/zentao:12.4.3
        #https://hub.docker.com/r/easysoft/zentao/tags
        resources:
          requests: 
            memory: "4Gi"
            cpu: "1"
          limits:
            memory: "4Gi"
            cpu: "1"
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: '123456'
          #mysql密码
        ports:
        - name: zentao
          containerPort: 80
        - name: mysql
          containerPort: 3306
        volumeMounts:
        - name: zentao-data 
          mountPath: /www/zentaopms
        - name: zentao-mysql
          mountPath: /var/lib/mysql
      volumes:
        - name: zentao-data 
          persistentVolumeClaim:
            claimName: zentao-pvc
        - name: zentao-mysql 
          persistentVolumeClaim:
            claimName: zentao-mysql-pvc

参考


【1 】helm安装 by mox user

【2】jira运维与二开


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
存储 Kubernetes 容器
K8S部署nexus
该配置文件定义了Nexus 3的Kubernetes部署,包括PersistentVolumeClaim、Deployment和服务。PVC请求20Gi存储,使用NFS存储类。Deployment配置了一个Nexus 3容器,内存限制为6G,CPU为1000m,并挂载数据卷。Service类型为NodePort,通过30520端口对外提供服务。所有资源位于`nexus`命名空间中。
|
2月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
2月前
|
Kubernetes 监控 安全
容器化技术:Docker与Kubernetes的实战应用
容器化技术:Docker与Kubernetes的实战应用
|
2月前
|
存储 Kubernetes Devops
Kubernetes集群管理和服务部署实战
Kubernetes集群管理和服务部署实战
82 0
|
3月前
|
NoSQL 关系型数据库 Redis
高可用和性能:基于ACK部署Dify的最佳实践
本文介绍了基于阿里云容器服务ACK,部署高可用、可伸缩且具备高SLA的生产可用的Dify服务的详细解决方案。
|
13天前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。
|
23天前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
91 12
|
26天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
28天前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
61 2
|
1月前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。

推荐镜像

更多