Does Helm has a plan to support the complete Operator maturity level?


Anil Kumar <anil181@...>
 

Hello Helm Team,

We are using Helm in our product for the deployments and upgrade. We are looking at the next step of introducing the Kubernetes Operator for handling the Day 2 Operations.

Going through this page we see that Helm does not support complete Operator capability level:https://sdk.operatorframework.io/docs/overview/operator-capabilities/

Could someone let me know if Helm has a plan to support the complete Operator maturity level on the roadmap as we see with Ansible and Go.

Thanks and Regards,
Anil Kumar



Paul C
 

The complete Operator capability level is a bit of a misnomer and very self serving and are often not operator specific, but assume the operator writer has implemented extra things. There not really much there that a well written Helm Chart can't/won't do.  

* Full lifecycle -  Assuming the app is fairly cloud native the kube controllers (deployment/statefulset/etc) will manage most failure recoveries, and jobs/cronjobs for backups, and helm hooks for assisting with upgrade tasks.  

* Deep insight - this isn't really an operator thing, except for the fact an operator can automatically set up prometheus (and similar) servicemonitors/alerts etc, all things you can do with your helm charts

* Auto Pilot - most of the auto-scaling can be done with kube HPA/VPA and similar techniques, I've seens cronjobs used to do scheduled scaling as well, abnormality detection etc can be done as easily with a sidecar application as it can with an operator.



On Wed, Oct 6, 2021 at 3:53 AM Anil Kumar <anil181@...> wrote:
Hello Helm Team,

We are using Helm in our product for the deployments and upgrade. We are looking at the next step of introducing the Kubernetes Operator for handling the Day 2 Operations.

Going through this page we see that Helm does not support complete Operator capability level:https://sdk.operatorframework.io/docs/overview/operator-capabilities/

Could someone let me know if Helm has a plan to support the complete Operator maturity level on the roadmap as we see with Ansible and Go.

Thanks and Regards,
Anil Kumar



Matt Farina
 

I’d like to add to what Paul said.

Helm and operators are two different types of things. They don’t solve the same problem. Think of it this way, would I ask apt or yum to implement ansible features? The answer is obviously no because they solve two different problems and can be used to compliment each other. Ansible regularly uses RPMs and Debian packages.

Helm is a package manager like apt or yum. It is used to install, upgrade, and uninstall packages.

Operators are more complex. To quote the original definition of operators

An Operator is an application-specific controller that extends the Kubernetes API to create, configure, and manage instances of complex stateful applications on behalf of a Kubernetes user. It builds upon the basic Kubernetes resource and controller concepts but includes domain or application-specific knowledge to automate common tasks.

It’s about managing instances of applications. This reminds me of something like ansible or Chef. It’s more like Chef conceptually because Chef did things with agents and a pull based model.

These two can complement each other. An operator can use Helm and charts for the install, upgrade, and uninstall elements. In fact, some do.

So, I would not expect to have Helm support operator capabilities because they solve different problems. The fact that they’re compared that way is marketing rather than technical.

- Matt Farina

On Oct 6, 2021, at 11:31 AM, Paul C <username.taken@...> wrote:

The complete Operator capability level is a bit of a misnomer and very self serving and are often not operator specific, but assume the operator writer has implemented extra things. There not really much there that a well written Helm Chart can't/won't do.  

* Full lifecycle -  Assuming the app is fairly cloud native the kube controllers (deployment/statefulset/etc) will manage most failure recoveries, and jobs/cronjobs for backups, and helm hooks for assisting with upgrade tasks.  

* Deep insight - this isn't really an operator thing, except for the fact an operator can automatically set up prometheus (and similar) servicemonitors/alerts etc, all things you can do with your helm charts

* Auto Pilot - most of the auto-scaling can be done with kube HPA/VPA and similar techniques, I've seens cronjobs used to do scheduled scaling as well, abnormality detection etc can be done as easily with a sidecar application as it can with an operator.



On Wed, Oct 6, 2021 at 3:53 AM Anil Kumar <anil181@...> wrote:
Hello Helm Team,

We are using Helm in our product for the deployments and upgrade. We are looking at the next step of introducing the Kubernetes Operator for handling the Day 2 Operations.

Going through this page we see that Helm does not support complete Operator capability level:https://sdk.operatorframework.io/docs/overview/operator-capabilities/

Could someone let me know if Helm has a plan to support the complete Operator maturity level on the roadmap as we see with Ansible and Go.

Thanks and Regards,
Anil Kumar






Michael Hrivnak
 

The "Operator Capability Levels" you reference are comparing helm-based operators, ansible-based operators, and go-based operators as supported by the operator-sdk. Those are the three operator types that operator-sdk can help you make. The capability levels *do not* draw a comparison of operators vs. helm.

For very brief background: the operator-sdk enables you to use a helm chart as the basis for a simple operator, with no coding required. You get a CRD to represent your operand, and a controller that applies the chart during reconciliation. That can be useful, but the resulting operator is limited to whatever the chart can do.

Michael

On Wed, Oct 6, 2021 at 3:07 PM Matt Farina <matt@...> wrote:
I’d like to add to what Paul said.

Helm and operators are two different types of things. They don’t solve the same problem. Think of it this way, would I ask apt or yum to implement ansible features? The answer is obviously no because they solve two different problems and can be used to compliment each other. Ansible regularly uses RPMs and Debian packages.

Helm is a package manager like apt or yum. It is used to install, upgrade, and uninstall packages.

Operators are more complex. To quote the original definition of operators

An Operator is an application-specific controller that extends the Kubernetes API to create, configure, and manage instances of complex stateful applications on behalf of a Kubernetes user. It builds upon the basic Kubernetes resource and controller concepts but includes domain or application-specific knowledge to automate common tasks.

It’s about managing instances of applications. This reminds me of something like ansible or Chef. It’s more like Chef conceptually because Chef did things with agents and a pull based model.

These two can complement each other. An operator can use Helm and charts for the install, upgrade, and uninstall elements. In fact, some do.

So, I would not expect to have Helm support operator capabilities because they solve different problems. The fact that they’re compared that way is marketing rather than technical.

- Matt Farina

On Oct 6, 2021, at 11:31 AM, Paul C <username.taken@...> wrote:

The complete Operator capability level is a bit of a misnomer and very self serving and are often not operator specific, but assume the operator writer has implemented extra things. There not really much there that a well written Helm Chart can't/won't do.  

* Full lifecycle -  Assuming the app is fairly cloud native the kube controllers (deployment/statefulset/etc) will manage most failure recoveries, and jobs/cronjobs for backups, and helm hooks for assisting with upgrade tasks.  

* Deep insight - this isn't really an operator thing, except for the fact an operator can automatically set up prometheus (and similar) servicemonitors/alerts etc, all things you can do with your helm charts

* Auto Pilot - most of the auto-scaling can be done with kube HPA/VPA and similar techniques, I've seens cronjobs used to do scheduled scaling as well, abnormality detection etc can be done as easily with a sidecar application as it can with an operator.



On Wed, Oct 6, 2021 at 3:53 AM Anil Kumar <anil181@...> wrote:
Hello Helm Team,

We are using Helm in our product for the deployments and upgrade. We are looking at the next step of introducing the Kubernetes Operator for handling the Day 2 Operations.

Going through this page we see that Helm does not support complete Operator capability level:https://sdk.operatorframework.io/docs/overview/operator-capabilities/

Could someone let me know if Helm has a plan to support the complete Operator maturity level on the roadmap as we see with Ansible and Go.

Thanks and Regards,
Anil Kumar







--

Michael Hrivnak

Senior Principal Software EngineerRHCE 

Red Hat


Fox, Kevin M <Kevin.Fox@...>
 

That url is a bit misleading. Its describing their "helm based operator sdk"s capabilities. I have personally done more advanced things then possible with the "helm based operator sdk" can do using a combination of the "ansible based operator sdk" and helm.

Thanks,
Kevin

________________________________________
From: cncf-helm@... <cncf-helm@...> on behalf of Anil Kumar <anil181@...>
Sent: Wednesday, October 6, 2021 1:52 AM
To: cncf-helm@...
Subject: [cncf-helm] Does Helm has a plan to support the complete Operator maturity level?

Check twice before you click! This email originated from outside PNNL.

Hello Helm Team,

We are using Helm in our product for the deployments and upgrade. We are looking at the next step of introducing the Kubernetes Operator for handling the Day 2 Operations.

Going through this page we see that Helm does not support complete Operator capability level:https://sdk.operatorframework.io/docs/overview/operator-capabilities/<https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fsdk.operatorframework.io%2Fdocs%2Foverview%2Foperator-capabilities%2F&data=04%7C01%7CKevin.Fox%40pnnl.gov%7C24354ce801a448b2a2fe08d988a6d126%7Cd6faa5f90ae240338c0130048a38deeb%7C0%7C0%7C637691072956766292%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=q4fizH5nDmOI8a4ex06ykUIrNT3aPInNvTYxkEVkrtM%3D&reserved=0>

Could someone let me know if Helm has a plan to support the complete Operator maturity level on the roadmap as we see with Ansible and Go.

Thanks and Regards,
Anil Kumar


Fox, Kevin M <Kevin.Fox@...>
 

I don't think they ever designed their lifecycle definition to be agnostic to operators. The page there is talking specifically about: Operator Capability Levels. So I don't knock them for being operator specific.

That being said, the view of cloud native app packaging needing these kinds of capabilities, and easy description thereof is a good thing. Maybe a workgroup under the CNCF could form (or one already exists) to standardize some terminology and encourage its use? Anyone interested in doing that?

Thanks,
Kevin

________________________________________
From: cncf-helm@... <cncf-helm@...> on behalf of Paul C <username.taken@...>
Sent: Wednesday, October 6, 2021 8:31 AM
To: Anil Kumar
Cc: cncf-helm@...
Subject: Re: [cncf-helm] Does Helm has a plan to support the complete Operator maturity level?

Check twice before you click! This email originated from outside PNNL.

The complete Operator capability level is a bit of a misnomer and very self serving and are often not operator specific, but assume the operator writer has implemented extra things. There not really much there that a well written Helm Chart can't/won't do.

* Full lifecycle - Assuming the app is fairly cloud native the kube controllers (deployment/statefulset/etc) will manage most failure recoveries, and jobs/cronjobs for backups, and helm hooks for assisting with upgrade tasks.

* Deep insight - this isn't really an operator thing, except for the fact an operator can automatically set up prometheus (and similar) servicemonitors/alerts etc, all things you can do with your helm charts

* Auto Pilot - most of the auto-scaling can be done with kube HPA/VPA and similar techniques, I've seens cronjobs used to do scheduled scaling as well, abnormality detection etc can be done as easily with a sidecar application as it can with an operator.



On Wed, Oct 6, 2021 at 3:53 AM Anil Kumar <anil181@...<mailto:anil181@...>> wrote:
Hello Helm Team,

We are using Helm in our product for the deployments and upgrade. We are looking at the next step of introducing the Kubernetes Operator for handling the Day 2 Operations.

Going through this page we see that Helm does not support complete Operator capability level:https://sdk.operatorframework.io/docs/overview/operator-capabilities/<https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fsdk.operatorframework.io%2Fdocs%2Foverview%2Foperator-capabilities%2F&data=04%7C01%7CKevin.Fox%40pnnl.gov%7C0268ce034cde496114e308d988de8670%7Cd6faa5f90ae240338c0130048a38deeb%7C0%7C0%7C637691312500956290%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=2HAcTqHjb84hpT00bwJ10unC1B4aCUNt44a5JBkafug%3D&reserved=0>

Could someone let me know if Helm has a plan to support the complete Operator maturity level on the roadmap as we see with Ansible and Go.

Thanks and Regards,
Anil Kumar


Devdatta Kulkarni
 

Hi Anil,

To complement and add to Paul and Matt's response.

Helm and Operator serve separate purposes and can be used in combination to achieve your application packaging and distribution goal. An Operator is typically developed if you want to perform certain application specific tasks in Kubernetes-native manner. We have seen a number of DevOps teams start out first by packaging their application as a Helm chart. They may use popular community Operators on their cluster (such as cert manager, Prometheus etc.) and create their custom resources through the Helm chart. Lot of times this arrangement is sufficient and does not require a brand-new Operator development. If you still see the need to perform certain application specific configurations through Kubernetes API, then you can explore writing an Operator for your application.

Going a step further beyond understanding the difference between an Operator and Helm, there are also some Operators in the community that are written to automate distribution and management of Helm charts, such as the Helm Operator from Operator SDK and our project KubePlus (https://github.com/cloud-ark/kubeplus). These Operators essentially wrap a Kubernetes-native API around Helm charts. The need for such Operators arises in situations when there are multiple teams or personas involved, such as provider of the application and consumer of the application, - say a DevOps team is looking to deliver an application as a service to their product team. For such a service-based delivery model, the typical day 2 operations include things like - ability to apply resource policies at application-level, ability to troubleshoot the deployed applications, ability to track resource consumption per application instance, etc. Generic Operators like KubePlus can help with these operations. If you are looking for day 2 operations such as the above, you can check out KubePlus.

-Devdatta


From: cncf-helm@... on behalf of Matt Farina
Sent: Wednesday, October 6, 2021 2:04 PM
To: Anil Kumar
Cc: cncf-helm@...; Paul C
Subject: Re: [cncf-helm] Does Helm has a plan to support the complete Operator maturity level?

I’d like to add to what Paul said.

Helm and operators are two different types of things. They don’t solve the same problem. Think of it this way, would I ask apt or yum to implement ansible features? The answer is obviously no because they solve two different problems and can be used to compliment each other. Ansible regularly uses RPMs and Debian packages.

Helm is a package manager like apt or yum. It is used to install, upgrade, and uninstall packages.

Operators are more complex. To quote the original definition of operators

An Operator is an application-specific controller that extends the Kubernetes API to create, configure, and manage instances of complex stateful applications on behalf of a Kubernetes user. It builds upon the basic Kubernetes resource and controller concepts but includes domain or application-specific knowledge to automate common tasks.

It’s about managing instances of applications. This reminds me of something like ansible or Chef. It’s more like Chef conceptually because Chef did things with agents and a pull based model.

These two can complement each other. An operator can use Helm and charts for the install, upgrade, and uninstall elements. In fact, some do.

So, I would not expect to have Helm support operator capabilities because they solve different problems. The fact that they’re compared that way is marketing rather than technical.

- Matt Farina

On Oct 6, 2021, at 11:31 AM, Paul C <username.taken@...> wrote:

The complete Operator capability level is a bit of a misnomer and very self serving and are often not operator specific, but assume the operator writer has implemented extra things. There not really much there that a well written Helm Chart can't/won't do.  

* Full lifecycle -  Assuming the app is fairly cloud native the kube controllers (deployment/statefulset/etc) will manage most failure recoveries, and jobs/cronjobs for backups, and helm hooks for assisting with upgrade tasks.  

* Deep insight - this isn't really an operator thing, except for the fact an operator can automatically set up prometheus (and similar) servicemonitors/alerts etc, all things you can do with your helm charts

* Auto Pilot - most of the auto-scaling can be done with kube HPA/VPA and similar techniques, I've seens cronjobs used to do scheduled scaling as well, abnormality detection etc can be done as easily with a sidecar application as it can with an operator.



On Wed, Oct 6, 2021 at 3:53 AM Anil Kumar <anil181@...> wrote:
Hello Helm Team,

We are using Helm in our product for the deployments and upgrade. We are looking at the next step of introducing the Kubernetes Operator for handling the Day 2 Operations.

Going through this page we see that Helm does not support complete Operator capability level:https://sdk.operatorframework.io/docs/overview/operator-capabilities/

Could someone let me know if Helm has a plan to support the complete Operator maturity level on the roadmap as we see with Ansible and Go.

Thanks and Regards,
Anil Kumar






Matt Farina
 

Thanks for providing clarification with…

The "Operator Capability Levels" you reference are comparing helm-based operators, ansible-based operators, and go-based operators as supported by the operator-sdk.

I think there are a couple problems here, though.

  1. People are taking the levels as Helm stand alone vs operators in general. This has come up in numerous conversations. It appears to be a point of confusion. How can we work to clear that up?
  2. The community has taken the model far further than Operator SDK based. The operator working group included it as a general thing in their white paper on operators. This model is being applied outside its intended space, as you have said the space is. How can the communication be updated to help clear that up?
  3. The OperatorHub website uses the model and says it’s for operators. It does not clarify that it’s for Operator SDK based operators. There are many non-Operator SDK based operators. This, I think, leads to the confusion in messaging.

Do you see why people are confused on the topic?

- Matt Farina


On Oct 6, 2021, at 4:10 PM, Michael Hrivnak <mhrivnak@...> wrote:

The "Operator Capability Levels" you reference are comparing helm-based operators, ansible-based operators, and go-based operators as supported by the operator-sdk. Those are the three operator types that operator-sdk can help you make. The capability levels *do not* draw a comparison of operators vs. helm.

For very brief background: the operator-sdk enables you to use a helm chart as the basis for a simple operator, with no coding required. You get a CRD to represent your operand, and a controller that applies the chart during reconciliation. That can be useful, but the resulting operator is limited to whatever the chart can do.

Michael

On Wed, Oct 6, 2021 at 3:07 PM Matt Farina <matt@...> wrote:
I’d like to add to what Paul said.

Helm and operators are two different types of things. They don’t solve the same problem. Think of it this way, would I ask apt or yum to implement ansible features? The answer is obviously no because they solve two different problems and can be used to compliment each other. Ansible regularly uses RPMs and Debian packages.

Helm is a package manager like apt or yum. It is used to install, upgrade, and uninstall packages.

Operators are more complex. To quote the original definition of operators

An Operator is an application-specific controller that extends the Kubernetes API to create, configure, and manage instances of complex stateful applications on behalf of a Kubernetes user. It builds upon the basic Kubernetes resource and controller concepts but includes domain or application-specific knowledge to automate common tasks.

It’s about managing instances of applications. This reminds me of something like ansible or Chef. It’s more like Chef conceptually because Chef did things with agents and a pull based model.

These two can complement each other. An operator can use Helm and charts for the install, upgrade, and uninstall elements. In fact, some do.

So, I would not expect to have Helm support operator capabilities because they solve different problems. The fact that they’re compared that way is marketing rather than technical.

- Matt Farina

On Oct 6, 2021, at 11:31 AM, Paul C <username.taken@...> wrote:

The complete Operator capability level is a bit of a misnomer and very self serving and are often not operator specific, but assume the operator writer has implemented extra things. There not really much there that a well written Helm Chart can't/won't do.  

* Full lifecycle -  Assuming the app is fairly cloud native the kube controllers (deployment/statefulset/etc) will manage most failure recoveries, and jobs/cronjobs for backups, and helm hooks for assisting with upgrade tasks.  

* Deep insight - this isn't really an operator thing, except for the fact an operator can automatically set up prometheus (and similar) servicemonitors/alerts etc, all things you can do with your helm charts

* Auto Pilot - most of the auto-scaling can be done with kube HPA/VPA and similar techniques, I've seens cronjobs used to do scheduled scaling as well, abnormality detection etc can be done as easily with a sidecar application as it can with an operator.



On Wed, Oct 6, 2021 at 3:53 AM Anil Kumar <anil181@...> wrote:
Hello Helm Team,

We are using Helm in our product for the deployments and upgrade. We are looking at the next step of introducing the Kubernetes Operator for handling the Day 2 Operations.

Going through this page we see that Helm does not support complete Operator capability level:https://sdk.operatorframework.io/docs/overview/operator-capabilities/

Could someone let me know if Helm has a plan to support the complete Operator maturity level on the roadmap as we see with Ansible and Go.

Thanks and Regards,
Anil Kumar









-- 
Michael Hrivnak

Senior Principal Software EngineerRHCE 
Red Hat


Michael Hrivnak
 

Matt,

I do think the capabilities themselves are a useful construct for thinking about operators in general, whether implemented using operator-sdk or not. But of course outside the context of operator-sdk, the three types (helm/ansible/go) are less relevant. It sounds like the messaging might be more clear if there was a version of the graphic that did not include the three types, but just focused on the levels themselves, for use when talking about operator capabilities in general. Do you think that would be less confusing? Maybe someone else has a better idea.

This seems like a reasonable topic for the operator-framework email list.

Michael



On Wed, Oct 6, 2021 at 4:47 PM Matt Farina <matt@...> wrote:
Thanks for providing clarification with…

The "Operator Capability Levels" you reference are comparing helm-based operators, ansible-based operators, and go-based operators as supported by the operator-sdk.

I think there are a couple problems here, though.

  1. People are taking the levels as Helm stand alone vs operators in general. This has come up in numerous conversations. It appears to be a point of confusion. How can we work to clear that up?
  2. The community has taken the model far further than Operator SDK based. The operator working group included it as a general thing in their white paper on operators. This model is being applied outside its intended space, as you have said the space is. How can the communication be updated to help clear that up?
  3. The OperatorHub website uses the model and says it’s for operators. It does not clarify that it’s for Operator SDK based operators. There are many non-Operator SDK based operators. This, I think, leads to the confusion in messaging.

Do you see why people are confused on the topic?

- Matt Farina


On Oct 6, 2021, at 4:10 PM, Michael Hrivnak <mhrivnak@...> wrote:

The "Operator Capability Levels" you reference are comparing helm-based operators, ansible-based operators, and go-based operators as supported by the operator-sdk. Those are the three operator types that operator-sdk can help you make. The capability levels *do not* draw a comparison of operators vs. helm.

For very brief background: the operator-sdk enables you to use a helm chart as the basis for a simple operator, with no coding required. You get a CRD to represent your operand, and a controller that applies the chart during reconciliation. That can be useful, but the resulting operator is limited to whatever the chart can do.

Michael

On Wed, Oct 6, 2021 at 3:07 PM Matt Farina <matt@...> wrote:
I’d like to add to what Paul said.

Helm and operators are two different types of things. They don’t solve the same problem. Think of it this way, would I ask apt or yum to implement ansible features? The answer is obviously no because they solve two different problems and can be used to compliment each other. Ansible regularly uses RPMs and Debian packages.

Helm is a package manager like apt or yum. It is used to install, upgrade, and uninstall packages.

Operators are more complex. To quote the original definition of operators

An Operator is an application-specific controller that extends the Kubernetes API to create, configure, and manage instances of complex stateful applications on behalf of a Kubernetes user. It builds upon the basic Kubernetes resource and controller concepts but includes domain or application-specific knowledge to automate common tasks.

It’s about managing instances of applications. This reminds me of something like ansible or Chef. It’s more like Chef conceptually because Chef did things with agents and a pull based model.

These two can complement each other. An operator can use Helm and charts for the install, upgrade, and uninstall elements. In fact, some do.

So, I would not expect to have Helm support operator capabilities because they solve different problems. The fact that they’re compared that way is marketing rather than technical.

- Matt Farina

On Oct 6, 2021, at 11:31 AM, Paul C <username.taken@...> wrote:

The complete Operator capability level is a bit of a misnomer and very self serving and are often not operator specific, but assume the operator writer has implemented extra things. There not really much there that a well written Helm Chart can't/won't do.  

* Full lifecycle -  Assuming the app is fairly cloud native the kube controllers (deployment/statefulset/etc) will manage most failure recoveries, and jobs/cronjobs for backups, and helm hooks for assisting with upgrade tasks.  

* Deep insight - this isn't really an operator thing, except for the fact an operator can automatically set up prometheus (and similar) servicemonitors/alerts etc, all things you can do with your helm charts

* Auto Pilot - most of the auto-scaling can be done with kube HPA/VPA and similar techniques, I've seens cronjobs used to do scheduled scaling as well, abnormality detection etc can be done as easily with a sidecar application as it can with an operator.



On Wed, Oct 6, 2021 at 3:53 AM Anil Kumar <anil181@...> wrote:
Hello Helm Team,

We are using Helm in our product for the deployments and upgrade. We are looking at the next step of introducing the Kubernetes Operator for handling the Day 2 Operations.

Going through this page we see that Helm does not support complete Operator capability level:https://sdk.operatorframework.io/docs/overview/operator-capabilities/

Could someone let me know if Helm has a plan to support the complete Operator maturity level on the roadmap as we see with Ansible and Go.

Thanks and Regards,
Anil Kumar









-- 
Michael Hrivnak

Senior Principal Software EngineerRHCE 
Red Hat



--

Michael Hrivnak

Senior Principal Software EngineerRHCE 

Red Hat