

We all know you can use Jira Service Management for your IT helpdesk, but did you know you can also use it for facility management? No? Then you definitely didn’t imagine you can rent forklifts, scissor lifts and pretty much anything with Jira. In this blog post, I’ll show you how we took Jira Service Management to a whole new level when it comes to possibilities and integration.
Setting up Jira Service Management
Our customer Clarebout, one of the world’s largest potato products manufacturers, wanted to onboard their entire plant operations onto Jira. As a farmer in my free time myself, I just couldn’t say no to that.
We started with the IT helpdesk and kept it simple, but effective. Since helpdesks are at the core of Jira’s competence, this was a smooth process. (The screenshots below are in Dutch, English isn’t the main language at Clarebout.)

Facility management in Jira Service Management
After having covered the company’s IT department, we moved on to its facility management. We set up a service desk to report things like a hole in the floor, broken glass, faulty lights, and so on.

Since Clarebout’s facility in this case is a food processing factory, risk based priority setting is one of the most important features. An incident’s reporter can set 3 factors (Severity, Exposure, and Probability) that we use to calculate the global risk of said incident. When the risk is too high, we shut down the plant. No potato is worth risking a human life!

For IT infrastructure, plant locations and other CMDB data, we used Mindville Insight and some custom scripting combined with Lansweeper for population.
As I have my own farm and tractors at home, I really was in my comfort zone at Clarebout. So much so that I (together with the stakeholders, of course) decided to take Jira to new heights, literally. The next thing I was going to focus on was equipment such as forklifts and aerial work platforms.
Equipment management
First, we wanted the employees and external partners to be able to rent the needed equipment to do their maintenance in the facility.

After choosing a type of equipment, renters need to specify their requirements like height, whether the equipment requires fridge resistant oil, where they’ll be needing it, and so on.

Once the order is approved, the renter can collect their equipment at the security office.
This is where things really got fun: all employees need to have a valid certificate to operate the equipment. In order to securely oversee who has a permit to operate certain equipment, we imported every employee’s data in Insight. The system then conducts the necessary checks when someone requests a piece of equipment, and only if they are allowed to operate it does security hand it over.
An important part of running a renting business is planning. This is where Structure and Structure.Gantt come into play. The Structure.Gantt app allows us to visualize, track and manage equipment in easy-to-use Agile Gantt charts. In short, it provides us with a clear overview of which materials are onsite, reserved or in use. (The image below is blurred to protect our customer’s privacy, but should give you an idea of what it looks like nonetheless.)

Cool stuff, don’t you think? But why stop there?
Reporting broken equipment
Aside from the renting part, the company-owned equipment is spread all over the facility. And as with all equipment, they need maintenance or sometimes they just break and need to be fixed.
Luckily, users can easily report broken equipment through Jira.

Insight allows us to use a location-based selection of equipment. Therefore, the first step to report a broken or damaged piece of equipment is to select where exactly in the factory you are, and based upon that location, get a limited list of forklifts at that specific location. This way, users don’t have to sift through endless lists of equipment before reporting a problem. After selecting the appropriate equipment, users define the problem and mark whether it is damaged or just malfunctioning to complete the ticket.
Jira then automatically sends the ticket to a third party depending on which malfunction it is: tyres go to a tyre company, general things to the vendor, batteries to the battery specialists, and so on. With Elements Copy & Sync, we created a linkend and a synced issue in the teams/vendors project. That way, the teams or vendors responsible for working on fixing a piece of equipment can get to work ASAP.
So, users can report damage to for example a forklift or a building. But what about linking these events together? Of course that’s a possibility, but in a more ‘traditional’ way than what you’re probably thinking of. Users just have to click on their inside location and see what tickets are open on that location. If there’s a damaged forklift and you got a damaged gate, on the same day, at the same location… 1+1=2. 😉
I hope you enjoyed reading this, because I had an awesome time implementing it! If you want to see what else we did with Jira at Clarebout, you can always read our case study here. Interested which Atlassian solutions we might offer you? Check out our Atlassian services!
What others have also read


Atlassian offers great ways to resolve the need many companies have for billing and invoicing. The Atlassian Marketplace showcases numerous add-ons that integrate with Jira to help with that need. These add-ons can be extremely powerful, for example ending the need to compile numerous Excel sheets or gather paper files to invoice a client. Tempo Timesheets is an award-winning time-tracking add-on for Jira that benefits customers with real-time and accurate invoicing functions. In this guest blog post by Tempo’s Maxime-Samuel Nie-Rouquette, we track Paul’s steps to invoice a new client through Tempo Timesheets and the best practices that Paul applies to maximize the benefits he reaps from the add-on. Quick introduction Paul takes care of sending invoices to clients for his team’s R D efforts. Before using Tempo Timesheets, Paul was using the honor system to calculate the total compensation. The honor system created numerous problems with clients due to the lack of accuracy and transparency, and was quickly dropped for a more practical solution. Step 1 – Adding a Customer Paul’s new client, Soylent Corp, has signed an agreement with Paul’s company to create a new product, Soylent Green. Whenever a new customer comes around, Paul’s first step is to create a new customer in order to have an organized report throughout the progression of a project. Paul starts the invoicing process by creating a customer account so that he will be able to analyze the time his team spends on billable and non-billable issues for that particular customer. The ‘Accounts’ tab is a functionality unique to Tempo Timesheets and is very powerful. In essence, it allows you to improve the reliability, transparency, and accuracy of time tracked for clients across multiple projects and teams. Any new projects from a client can easily be added to their account. To create a customer account for Soylent Corp, Paul navigates to the ‘Accounts’ page from the Tempo Timesheets menu at the top of the page. In the upper-right corner of the screen, the ‘Customer’ tab is where new customers are added. In this case, Paul adds Soylent Corp in the ‘Name’ field and SOY in the ‘Key’ field. Step 2 – Creating Account Categories Accounts In order to fully benefit from the accounts, Paul needs to create account categories. These categories enable Tempo Timesheets to identify if the time spent is billable or non-billable, and are used in conjunction with accounts to properly showcase and organize data in reports. The first account category Paul creates is “RND”, for research and development, which Paul’s team identifies as billable work. For example, if the team works on a mathematical model to search for the best nutrients for Soylent Green, they would track the activity as billable as it falls into “RND”. Paul also creates “TRN”, for training, which is classified as non-billable work by Paul’s company. In the event that new members are added to the team and need to be worked in, the training time would be deemed non-billable as it would fall under “TRN”. To access and add new account categories, Paul navigates clicks the ‘Account Categories’ tab found under the ‘Accounts’ section of the settings menu. In this case, Paul adds ‘RND’ as the key, ‘Research and Development’ as the name, and classifies it as a Billable type. For ‘Training’, Paul repeats the process, but adds ‘internal’ as the type. With the two account categories now created (RND and TRN), it’s best practice to create accounts so that the time is rightfully associated and the data is accurate during the reporting/invoicing process. Previously, Paul created account categories to help the system categorise the type/nature of the activities. Now Paul includes that information in the Account so it’s easy to understand the nature of the work, who it is for, which projects are included in the account, and so on. Because Paul created 2 account categories (one billable and one non-billable), he does the same for the accounts: one billable and one non-billable. As such, the accounts have the following information: Going back to the account page, Paul adds the two accounts by clicking the create account button at the top right section of the page. When the account window appears all that is left to do is to fill in the right information: Name + Key: Name and tag for the account (Soylent Billable +SOYLENTBIL) Lead: Key person for the account (Paul) Category: the account category for this (Research and Development) Customer: name of the customer (Soylent Corp) Contact: Key Contact at the Customer’s Company (Amy) Projects: Collects all issues where there is billable logged time (Azome) Paul repeats the process for the non-billable account: Paul has now successfully created the necessary foundation for Paul’s team to have their logged time show under the right categories and fields – in real-time! Step 3 - Logging time Now that the foundation has been laid, Paul and his team need to log their time in order to offer the transparency and accuracy that they seek to offer. There are multiple ways to track time and have that time be associated with billable and non-billable time for a customer/project. It all depends on the way a company is set-up to operate and track time. In this case we simply modified the ‘billable’ and ‘non-billable’ hours in the worklog window. For Paul’s company, everyone is able to track billable and non-billable hours. For example, Taylor worked 8h today on a modelization task, but deemed that only 7h were billable, because she was doing 1h of relevant menial tasks that she deemed non-billable. The biggest challenge that Paul now faces is to have his team accurately and consistently track and log their time. Here are some best practices. Paul could ask his system admin to approve timesheets on a monthly frequency, as a way to ‘force’ the team to correctly track time. The team can use the real-time tracker found in the Tempo submenu (‘Tracker’). Using this method, users can simply pause the timer of the tracker when they get interrupted during the day (calls, unplanned meetings, breaks, etc.), or stop the timer to prompt the worklog window to automatically appear with the time already filled in. Paul’s team can also open the worklog dialog using the associated window hotkey. When the hotkey is pressed anywhere in Jira, the worklog window will appear to let the user log their time. This is convenient for users if they want to quickly log their time once they’re done working on something. Step 4 – Creating the custom report for the customer’s invoice Once the project is complete or when it is time to showcase some progress, Paul can easily create a report. A report displays the time spent on issues, both billable and non-billable, and updates all that information in real-time. It’s been a month since the start of the project and Soylent Corp is requesting their monthly invoice, which also doubles as a report. Paul’s team spent 291 hours this month working on the project, but only 237 hours are billable. Paul might still want to show this metric to Soylent Corp to show that the team has been spending time behind the scenes to better serve the client. Through the custom report, Paul can now have a breakdown of the hours his team worked for Soylent Corp this month. Paul can create a custom report either from the Tempo submenu at the top of the page or via the icon on the left side of the page. In this case, he only wants to display the information for the month of April relevant for Soylent Corp and easily filters by Soylent Corp. Because Paul is interested in showing both the billable and non-billable tasks worked on this month, he groups by Account + Issues. Finally, to have an understanding of the breakdown of billable and non-billable time and the total sum for each, Paul adds the billable column (found in the grid view). 🚀 Takeaway Paul was able to create the foundation and promote some practices to his team so that he would easily be able to provide his client with accurate and transparent information at the click of a button. Unsurprisingly, this method is vastly superior to the honour system as it works within Jira, so it is also very convenient for his team to track the time (as it is the same environment they work with on a daily basis). In the end, there is great value for Paul and his company in the time that is being saved internally as a result of tracking time consistently. The steps above offer a very simple way of setting up Tempo Timesheets to create some invoices. However, every company has their own unique ways of operating and tracking time, so the method explored today might not be sufficient for the needs of your company. If you’d like to better understand how this could fit with your internal methodology, we recommend visiting Tempo.io or connecting with our customer support so that they can provide their guidance to optimize your business practice with Tempo Timesheets. About Tempo timesheets Tempo Timesheets is a time-tracking and reporting solution that seamlessly integrates with Jira to help teams and managers track time for accounting, payroll, client billing, compliance, enhanced efficiency, and forecasting. Core features include: › Painless time tracking. Timesheets offers a better overview of work time for billing, measuring costs, internal time, and work performed. › Flexible reporting. Drill down on estimated versus actual time spent on JIRA issues, billable time, and more. › Cost center management. Gain better visibility of all activities and work performed for customers, internal projects, and development. Thank you to Maxime-Samuel Nie-Rouquette from Tempo for writing this guest blog post! At ACA, we also use Tempo Timesheets for our billing and invoicing, and are a Silver Partner as well. We’ve developed our own add-on to Tempo Timesheets that allows users to customize their Tempo work log fields, add custom Javascript to Jira and adapt Jira’s style and behaviour. {% module_block module "widget_0f7c6165-e281-4e27-97b2-1e28292767b8" %}{% module_attribute "buttons" is_json="true" %}{% raw %}[{"appearance":{"link_color":"light","primary_color":"primary","secondary_color":"primary","tertiary_color":"light","tertiary_icon_accent_color":"dark","tertiary_text_color":"dark","variant":"primary"},"content":{"arrow":"right","icon":{"alt":null,"height":null,"loading":"disabled","size_type":null,"src":"","width":null},"tertiary_icon":{"alt":null,"height":null,"loading":"disabled","size_type":null,"src":"","width":null},"text":"Check out our Tempo add-on"},"target":{"link":{"no_follow":false,"open_in_new_tab":true,"rel":"noopener","sponsored":false,"url":{"content_id":null,"href":"https://marketplace.atlassian.com/apps/1216590/custom-js-for-jira?hosting=server tab=overview","href_with_scheme":"https://marketplace.atlassian.com/apps/1216590/custom-js-for-jira?hosting=server tab=overview","type":"EXTERNAL"},"user_generated_content":false}},"type":"normal"}]{% endraw %}{% end_module_attribute %}{% module_attribute "child_css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "definition_id" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "field_types" is_json="true" %}{% raw %}{"buttons":"group","styles":"group"}{% endraw %}{% end_module_attribute %}{% module_attribute "isJsModule" is_json="true" %}{% raw %}true{% endraw %}{% end_module_attribute %}{% module_attribute "label" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "module_id" is_json="true" %}{% raw %}201493994716{% endraw %}{% end_module_attribute %}{% module_attribute "path" is_json="true" %}{% raw %}"@projects/aca-group-project/aca-group-app/components/modules/ButtonGroup"{% endraw %}{% end_module_attribute %}{% module_attribute "schema_version" is_json="true" %}{% raw %}2{% endraw %}{% end_module_attribute %}{% module_attribute "smart_objects" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "smart_type" is_json="true" %}{% raw %}"NOT_SMART"{% endraw %}{% end_module_attribute %}{% module_attribute "tag" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "type" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "wrap_field_tag" is_json="true" %}{% raw %}"div"{% endraw %}{% end_module_attribute %}{% end_module_block %}
Read more

Nowadays, it’s hard to find people who haven’t heard about Atlassian tools. Not surprising, since they revolutionized the way we approach team management and provide everything you need to handle everyday operations. Atlassian tools were already quite popular before the pandemic. Over the last few years, it enhanced its suite of products acquiring smaller startups like Trello and Bitbucket. According to the stats Atlassian shares on their website , there are more than 10 million users of their products across 190 countries. One of the reasons Atlassian tools are so popular for remote environments is that Atlassian has 9 offices scattered across the globe. By (partially) collaborating remotely themselves, they know what other teams need to become productive. Their practices foster the culture of distributed teams all over the world. Jira Jira is probably one of the most well-known task management tools. Operating in any kind of Agile environment be it Scrum, Kanban, or a mix of both, you can effectively manage the team progress there. Jira simplifies development team groomings, sprint planning and backlog prioritization. One of the biggest issues when running a remote team is often a lack of progress visibility, and it’s easily solved with Jira Software. It’s super easy and quick to add task estimations and generate burndown charts to measure the velocity of all the team or a particular team member. It’s also possible to enable the task tracker to see how much time it takes to complete any given task. Bitbucket Working with version control systems is an integral part of software development. The majority of software developers use Git, making it the most popular VCS (no surprise there, you can find tutorials on how to use Git in almost every web-development course ). With an ever growing number of projects, teams need to have one central management system to manage all the repositories. Bitbucket has your back covered here, as it enables all your team members to collaborate on code, test, and deploy. One of the biggest advantages to Bitbucket of course is that it integrates really well with other Atlassian products. It’s also convenient to create separate Bitbucket branches from Jira tasks or Trello cards. Trello Trello is a collaboration tool designed to organize all your projects into boards following the Kanban scheme. It provides a visual overview of your project by sorting tasks in lists, setting deadlines, putting different labels on cards, and assigning them to a particular team member. Trello allows you to create a new board from scratch or modify a template for any use-case scenario, ready for you and your team to collaborate on in just a few minutes. Numerous add-ons can simplify the project management even more by enhancing the functionality (e.g. enabling custom fields for cards, voting, or performing bulk actions to speed up the prioritization) and integrating with 146 third-party tools . Regardless of team size, Trello is equally perfect for solopreneurs, small startups, and giants of remote operations like Google and Kickstarter that already use Trello to run their projects. If you'd like to get started with Trello, check out this handy beginner's guide . Confluence For remote as well as non-remote teams, it’s critical to keep processes and workflows documented so that everyone stays on the same page. Atlassian Confluence is a perfect knowledge base tool that allows organizing spaces for different departments, keeps project documentation in one place, and group. It’s also possible to restrict access to sensitive files to make them available to certain groups or members and review the previous document versions to track changes. Status Page With remote teams, timely communication on critical incident response is simplified with the Status Page Atlassian tool. Status Page allows you to keep everyone in the loop on global issues like maintenance or unexpected outages. It’s also a great tool for businesses that run websites and have a large customer base to avoid an overload of support tickets and chat requests. Users can create a message notification, show the progress of troubleshooting, provide updates on what is going on, and finally mark the issue as ‘resolved’ when appropriate. With the help of Status Page, it’s possible to create public pages for external users, audience-specific pages (e.g. some customer groups) and private ones for internal purposes (e.g for NBPM, aka, no blame post mortem reports), for more targeted communication depending on the audience. The power of all things Atlassian The great thing about Atlassian products is that they are easy to integrate with one another, forming an ecosystem that allows you to simplify the management by transforming сomponents from one system into the actionable items in another one. For example, thanks to this tight integration it’s easy to transform Trello Cards to Jira tickets, checking Bamboo builds in Bitbucket, or leverage the APIs to create integrations with third-party tools. With a high number of professional tools to attend to, employees these days can feel distracted and less productive. Fortunately, the integration of the Atlassian tools provide a solution here as well. Creating a shared page in Confluence, contributing to the tasks on Jira, or subscribing to a Status Page, users can easily keep up with all the updates without proactive monitoring of all the different tools, as you can set up automatic email notifications once a change occurs. Wrap up When the pandemic started, a lot of businesses were struggling because of lockdowns, issues with vendors and economic recession. Especially under such circumstances, Atlassian tools are a great help in the transition to remote work. The majority of their products are free for small teams up to 10 users, giving them all the benefits of effective project management solutions. Thus, having all the means for management, small companies can keep their business running in a remote mode and ensure growth and development. With the shift towards remote work and positive results in terms of productivity, many business owners question returning back to offices once the pandemic is over and more than 70% of companies plan to keep at least partially remote environments. So while the world is changing and we do not know if remote work will totally replace offices one thing is certain: if you tried Atlassian on remote for the first time, you will want to bring it with you to the office or anywhere else. If you’re looking for an Atlassian partner, see what we can offer you! {% module_block module "widget_80c5e578-bd71-44da-abe5-b5f7c0e9a938" %}{% module_attribute "buttons" is_json="true" %}{% raw %}[{"appearance":{"link_color":"light","primary_color":"primary","secondary_color":"primary","tertiary_color":"light","tertiary_icon_accent_color":"dark","tertiary_text_color":"dark","variant":"primary"},"content":{"arrow":"right","icon":{"alt":null,"height":null,"loading":"disabled","size_type":null,"src":"","width":null},"tertiary_icon":{"alt":null,"height":null,"loading":"disabled","size_type":null,"src":"","width":null},"text":"Check out our Atlassian services"},"target":{"link":{"no_follow":false,"open_in_new_tab":false,"rel":"","sponsored":false,"url":{"content_id":null,"href":"https://acagroup.be/en/services/atlassian/","href_with_scheme":"https://acagroup.be/en/services/atlassian/","type":"EXTERNAL"},"user_generated_content":false}},"type":"normal"}]{% endraw %}{% end_module_attribute %}{% module_attribute "child_css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "definition_id" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "field_types" is_json="true" %}{% raw %}{"buttons":"group","styles":"group"}{% endraw %}{% end_module_attribute %}{% module_attribute "isJsModule" is_json="true" %}{% raw %}true{% endraw %}{% end_module_attribute %}{% module_attribute "label" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "module_id" is_json="true" %}{% raw %}201493994716{% endraw %}{% end_module_attribute %}{% module_attribute "path" is_json="true" %}{% raw %}"@projects/aca-group-project/aca-group-app/components/modules/ButtonGroup"{% endraw %}{% end_module_attribute %}{% module_attribute "schema_version" is_json="true" %}{% raw %}2{% endraw %}{% end_module_attribute %}{% module_attribute "smart_objects" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "smart_type" is_json="true" %}{% raw %}"NOT_SMART"{% endraw %}{% end_module_attribute %}{% module_attribute "tag" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "type" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "wrap_field_tag" is_json="true" %}{% raw %}"div"{% endraw %}{% end_module_attribute %}{% end_module_block %}
Read more

Within ACA, there are multiple teams working on different (or the same!) projects. Every team has their own domains of expertise, such as developing custom software, marketing and communications, mobile development and more. The teams specialized in Atlassian products and cloud expertise combined their knowledge to create a highly-available Atlassian stack on Kubernetes. Not only could we improve our internal processes this way, we could also offer this solution to our customers! In this blogpost, we’ll explain how our Atlassian and cloud teams built a highly-available Atlassian stack on top of Kubernetes. We’ll also discuss the benefits of this approach as well as the problems we’ve faced along the path. While we’re damn close, we’re not perfect after all 😉 Lastly, we’ll talk about how we monitor this setup. The setup of our Atlassian stack Our Atlassian stack consists of the following products: Amazon EKS Amazon EFS Atlassian Jira Data Center Atlassian Confluence Data Center Amazon EBS Atlassian Bitbucket Data Center Amazon RDS As you can see, we use AWS as the cloud provider for our Kubernetes setup. We create all the resources with Terraform. We’ve written a separate blog post on what our Kubernetes setup exactly looks like. You can read it here ! The image below should give you a general idea. The next diagram should give you an idea about the setup of our Atlassian Data Center. While there are a few differences between the products and setups, the core remains the same. The application is launched as one or more pods described by a StatefulSet. The pods are called node-0 and node-1 in the diagram above. The first request is sent to the load balancer and will be forwarded to either the node-0 pod or the node-1 pod. Traffic is sticky, so all subsequent traffic from that user will be sent to node-1. Both pod-0 and pod-1 require persistent storage which is used for plugin cache and indexes. A different Amazon EBS volume is mounted on each of the pods. Most of the data like your JIRA issues, Confluence spaces, … is stored in a database. The database is shared, node-0 and node-1 both connect to the same database. We usually use PostgreSQL on Amazon RDS. The node-0 and node-1 pod also need to share large files which we don’t want to store in a database, for example attachments. The same Amazon EFS volume is mounted on both pods. When changes are made, for example an attachment is uploaded to an issue, the attachment is immediately available on both pods. We use CloudFront (CDN) to cache static assets and improve the web response times. The benefits of this setup By using this setup, we can leverage the advantages of Docker and Kubernetes and the Data Center versions of the Atlassian tooling. There are a lot of benefits to this kind of setup, but we’ve listed the most important advantages below. It’s a self-healing platform : containers and worker nodes will automatically replace themselves when a failure occurs. In most cases, we don’t even have to do anything and the stack takes care of itself. Of course, it’s still important to investigate any failures so you can prevent them from occurring in the future. Exactly zero downtime deployments : when upgrading the first node within the cluster to a new version, we can still serve the old version to our customers on the second. Once the upgrade is complete, the new version is served from the first node and we can upgrade the second node. This way, the application stays available, even during upgrades. Deployments are predictable : we use the same Docker container for development, staging and production. It’s why we are confident the container will be able to start in our production environment after a successful deploy to staging. Highly available applications: when failure occurs on one of the nodes, traffic can be routed to the other node. This way you have time to investigate the issue and fix the broken node while the application stays available. It’s possible to sync data from one node to the other . For example, syncing the index from one node to the other to fix a corrupt index can be done in just a few seconds, while a full reindex can take a lot longer. You can implement a high level of security on all layers (AWS, Kubernetes, application, …) AWS CloudTrail prevents unauthorized access on AWS and sends an alert in case of anomaly. AWS Config prevents AWS security group changes. You can find out more on how to secure your cloud with AWS Config in our blog post. Terraform makes sure changes on the AWS environment are approved by the team before rollout. Since upgrading Kubernetes master and worker nodes has little to no impact, the stack is always running a recent version with the latest security patches. We use a combination of namespacing and RBAC to make sure applications and deployments can only access resources within their namespace with least privilege . NetworkPolicies are rolled out using Calico. We deny all traffic between containers by default and only allow specific traffic. We use recent versions of the Atlassian applications and implement Security Advisories whenever they are published by Atlassian. Interested in leveraging the power of Kubernetes yourself? You can find more information about how we can help you on our website! {% module_block module "widget_3d4315dc-144d-44ec-b069-8558f77285de" %}{% module_attribute "buttons" is_json="true" %}{% raw %}[{"appearance":{"link_color":"light","primary_color":"primary","secondary_color":"primary","tertiary_color":"light","tertiary_icon_accent_color":"dark","tertiary_text_color":"dark","variant":"primary"},"content":{"arrow":"right","icon":{"alt":null,"height":null,"loading":"disabled","size_type":null,"src":"","width":null},"tertiary_icon":{"alt":null,"height":null,"loading":"disabled","size_type":null,"src":"","width":null},"text":"Apply the power of Kubernetes"},"target":{"link":{"no_follow":false,"open_in_new_tab":false,"rel":"","sponsored":false,"url":null,"user_generated_content":false}},"type":"normal"}]{% endraw %}{% end_module_attribute %}{% module_attribute "child_css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "css" is_json="true" %}{% raw %}{}{% endraw %}{% end_module_attribute %}{% module_attribute "definition_id" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "field_types" is_json="true" %}{% raw %}{"buttons":"group","styles":"group"}{% endraw %}{% end_module_attribute %}{% module_attribute "isJsModule" is_json="true" %}{% raw %}true{% endraw %}{% end_module_attribute %}{% module_attribute "label" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "module_id" is_json="true" %}{% raw %}201493994716{% endraw %}{% end_module_attribute %}{% module_attribute "path" is_json="true" %}{% raw %}"@projects/aca-group-project/aca-group-app/components/modules/ButtonGroup"{% endraw %}{% end_module_attribute %}{% module_attribute "schema_version" is_json="true" %}{% raw %}2{% endraw %}{% end_module_attribute %}{% module_attribute "smart_objects" is_json="true" %}{% raw %}null{% endraw %}{% end_module_attribute %}{% module_attribute "smart_type" is_json="true" %}{% raw %}"NOT_SMART"{% endraw %}{% end_module_attribute %}{% module_attribute "tag" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "type" is_json="true" %}{% raw %}"module"{% endraw %}{% end_module_attribute %}{% module_attribute "wrap_field_tag" is_json="true" %}{% raw %}"div"{% endraw %}{% end_module_attribute %}{% end_module_block %} Apply the power of Kubernetes Problems we faced during the setup Migrating to this stack wasn’t all fun and games. We’ve definitely faced some difficulties and challenges along the way. By discussing them here, we hope we can facilitate your migration to a similar setup! Some plugins (usually older plugins) were only working on the standalone version of the Atlassian application. We needed to find an alternative plugin or use vendor support to have the same functionality on Atlassian Data Center. We had to make some changes to our Docker containers and network policies (i.e. firewall rules) to make sure both nodes of an application could communicate with each other. Most of the applications have some extra tools within the container. For example, Synchrony for Confluence, ElasticSearch for BitBucket, EazyBI for Jira, and so on. These extra tools all needed to be refactored for a multi-node setup with shared data. In our previous setup, each application was running on its own virtual machine. In a Kubernetes context, the applications are spread over a number of worker nodes. Therefore, one worker node might run multiple applications. Each node of each application will be scheduled on a worker node that has sufficient resources available. We needed to implement good placement policies so each node of each application has sufficient memory available. We also needed to make sure one application could not affect another application when it asks for more resources. There were also some challenges regarding load balancing. We needed to create a custom template for nginx ingress-controller to make sure websockets are working correctly and all health checks within the application are reporting a healthy status. Additionally, we needed a different load balancer and URL for our BitBucket SSH traffic compared to our web traffic to the BitBucket UI. Our previous setup contained a lot of data, both on filesystem and in the database. We needed to migrate all the data to an Amazon EFS volume and a new database in a new AWS account. It was challenging to find a way to have a consistent sync process that also didn’t take too long because during migration, all applications were down to prevent data loss. In the end, we were able to meet these criteria and were able to migrate successfully. Monitoring our Atlassian stack We use the following tools to monitor all resources within our setup Datadog to monitor all components created within our stack and to centralize logging of all components. You can read more about monitoring your stack with Datadog in our blog post here . NewRelic for APM monitoring of the Java process (Jira, Confluence, Bitbucket) within the container. If our monitoring detects an anomaly, it creates an alert within OpsGenie . OpsGenie will make sure that this alert is sent to the team or the on-call person that is responsible to fix the problem. If the on-call person does not acknowledge the alert in time, the alert will be escalated to the team that’s responsible for that specific alert. Conclusion In short, we are very happy we migrated to this new stack. Combining the benefits of Kubernetes and the Atlassian Data Center versions of Jira, Confluence and BitBucket feels like a big step in the right direction. The improvements in self-healing, deploying and monitoring benefits us every day and maintenance has become a lot easier. Interested in your own Atlassian Stack? Do you also want to leverage the power of Kubernetes? You can find more information about how we can help you on our website! Our Atlassian hosting offering
Read moreWant to dive deeper into this topic?
Get in touch with our experts today. They are happy to help!

Want to dive deeper into this topic?
Get in touch with our experts today. They are happy to help!

Want to dive deeper into this topic?
Get in touch with our experts today. They are happy to help!

Want to dive deeper into this topic?
Get in touch with our experts today. They are happy to help!


