Linux Containers

Can somebody smart explain this to me?

Not being a “IT” guy by education (and barely one by trade)… I honestly don’t know what this means and would like to understand the motivation behind the move. Speed/Performance? Portability?

When being sold “cloud”, it was highly touted that Epicor was a Windows based program being hosted on Windows based servers, etc. So… wondering why the future shift to Linux. Assume Linux Containers can still be used on Windows servers… but my knowledge here is nada!

… and yes, I read the FAQ linked in the message… just looking for more insight. Learning is fun?

Tom Hanks Dipshit GIF

~*~

Announcement: Windows Cloud Containers Moving to Linux

With the Kinetic 2025.1 upgrade, Epicor will begin transitioning cloud technology from Windows-based containers to Linux. This allows us to continue to elevate our cloud offerings with more resilient security, performance, and reliability.

Your Impact
This update applies to all cloud customers, and most users will experience no impact. Some custom code in areas like BPMs or Functions using Windows-specific code running on the server may need minor adjustments. Reports are available highlighting where revisions may be required for compatibility. Refer to the Linux Containers FAQ EpicWeb with additional information and documentation.

Regional Timeline and Next Steps
You will receive an email with the maintenance window and more details before your instance is upgraded to a Linux container, allowing you to plan accordingly.

  • Early Testing: Starting in May, select customers will participate in early testing and validation.
  • Customers running from datacenters in the United Kingdom, United Arab Emirates, India, and Germany:
    • Pilot: July
    • Production: August
  • All other regions:
    • Pilot: August
    • Production: September
  • Enterprise Cloud, Life Sciences Cloud, US Government Cloud
    • To Be Determined

~*~

Also… @timshuwy are 2025.1 CR environments going to utilize these Linux containers? Just curious as it would give us a head start in verifying BPM / function code to ensure it works under the new set-up.

6 Likes

Well, nobody smart has stepped up, sooooo

There are a couple questions here:

  • Why containers?
  • Why Linux?

Containers

To understand containers, we have to go back to Virtual Machines. A virtual machine is an abstraction of a physical machine complete with its operation system. VMs became popular because running programs has certain dependencies on the OS. When there was a conflict between two applications, we used to buy a physical server. With the advent of VMs, we could run two operating systems on one physical machine and each program could run with their own dependencies.

Containers takes this abstraction one step further saying, "Hey, I want to use some of the operating system stuff, but I want to package up the libraries (dependencies) that my app uses and run that on its own so other libraries don’t conflict. This is what containers do. The nice thing is they don’t need to boot up a whole OS, just the parts they need, so they start a lot faster. A company named Docker made it very easy to manage and run these containers. People create an image of a container and then Docker would run them.

Then someone (Google) said, that’s too easy. I want containers that automatically start when demand goes up, and I want to kill unhealthy containers when they hang, or shutdown containers when not needed. This system is called Kubernetes. AKS is Azure Kubernetes Service, so Azure takes “some” of the complexity away from the user.

Linux

Containers have been in Linux for decades. Microsoft created Windows containers too, but they, uh, :wind_face:. They are slower than Linux containers. A Windows license is also more expensive than Linux. So, why run a Windows container? :person_shrugging: Microsoft even has it own Linux distribution called Azure Linux. Sixty percent of the workloads running in Azure run on Linux.

Linux is cheaper to run in Azure. When .NET Core appeared, it was designed to be multi-platform. It contains some features that are Windows specific, but one can run any .NET 6+ program on Linux. The more recent versions of .NET also use less resources, so your cloud spend goes down.

11 Likes

I had to paste this in Word so I could stretch it out and see what it was :rofl:

Thanks for that!

4 Likes

We need to teach you how to zoom in the browser…

5 Likes

Pretty sure I already covered that…
image

4 Likes

Very much appreciated, @Mark_Wonsil !!

I’m looking forward for my rebate check!

5 Likes

For most of us, even me, this is going to be close to a non issue.

A few advanced, or ill conceived things may need some adjustment or rethinking.

Many of the issues you will see were already marked as warnings as they are related to reflection or system io and would have needed addressing anyway.

I’ll be starting my cleanup soon and will post anything interesting or any gotchas I find.

4 Likes

One thing I left out. You don’t patch containers like we do VMs. You create the image that is fully patched. An upgrade kills the existing container and starts the new. Reverting to an older version is just as easy. This is Pets vs Cattle difference: VMs are pets and containers are cattle.

Still have to do database migrations of course…

4 Likes

It used to be just Ctrl+scroll … it’s not working on my laptop right now, but I’m using a touchpad :sweat_smile:

Edit: Confirmed it works with a mouse and scrollwheel

2 Likes

Just a FYI - the report they tell you to run did not seem to find the problems in my Epicor Library functions.

@Epic_Santiago should I put in an Epicare case about that or is it known/expected?

I saw mine. CTRL-F in the pdf and search for “Function” and see if you just missed them.

Oh, it has a section for functions, but it does not have functions it should.

If I compile a certain library I get LOTS of ECF1002 errors, but that function or library does not show up in the report.

I could see this getting some people.

What @Mark said is brilliant! thanks for delivering a great answer.

it is my understanding that nearly all of Kinetic was very portable to Linux… we had a couple of areas dealing with the difference in file paths…
Linux file path: /path/to/file
Windows file path: c:\path\to\file

This is probably one of the few areas that you MIGHT have a concern with when moving to Linux since it doesnt have a “c” drive. BUT in the cloud, since you cannot access the system directories, you probably dont have this challenge.

4 Likes

Great question. I am not sure of the answer… I will look into this, but it would be a great question to bring up at the next CR call since others will be interested as well.

1 Like

One more comment on this subject: as mentioned before, performance is better. We were working with Microsoft on some performance issues, and they gave us advice to move towards Linux containers. We had already moved to AKS and had our software in containers… Our initial testing showed that they were correct and that the move to Linux provided improved performance.

6 Likes

Ctrl +, Ctrl - works well.

3 Likes

@Evan_Purdy, yes, please create a ticket. Also if you could paste the exact code that is giving you a warning (but not showing up in the report) we can start doing some preliminary investigation.

3 Likes

@Epic_Santiago, do you see any issues with the following warnings we see with our functions?

GetShipmentData.cs(272,24): warning CA2000: Call System.IDisposable.Dispose on object created by ‘new DataTable(“PhantomPacks”)’ before all references to it are out of scope
GetShipmentData.cs(267,24): warning CA2000: Call System.IDisposable.Dispose on object created by ‘new DataTable(“ShipVia”)’ before all references to it are out of scope
ShipIt.cs(247,55): warning CS0618: ‘JsonSerializer’ is obsolete: ‘Use the System.Text.Json serializer.’
GetShipmentData.cs(494,55): warning CS0618: ‘JsonSerializer’ is obsolete: ‘Use the System.Text.Json serializer.’
CreateInvoice.cs(1293,21): warning CS0618: ‘APInvGrpSvcContract.UnlockGroup(string)’ is obsolete: ‘Method UnlockGroup is obsolete, please use method UnlockAPGroup now’

Thanks in advance.

Yes, those warning should be resolved. None of those are Linux specific.

CA2000 is one of the most important warnings at it indicates a resource is not being released correctly after being used. This can lead to memory, db connection or other resource exhaustion.

CS0618 is telling you that the code is referencing something that is deprecated. The warning message should indicate what to use instead. Obsolete classes or methods will get removed in a future release so it is important to address those as well.

3 Likes

Not just cheaper but massively more scriptable! Windows Server will try to save you from yourself, often in intrusive ways that hinder. Linux goes “sudo rm -rf? Sure thing boss!”. Moving to an OS that doesn’t get in the way of automated deployment and maintenance can improve consistency and reliability.

I’m hoping this marks a culture change in that direction… Linux doesn’t compel automated deployment, just as Windows doesn’t require the level of artisinal handcrafting we see evidence of in SaaS instances. I could definitely see that being a transitional state, though. I’m optimistic about this one.

3 Likes