Hi Imesh / all,

Personally, I think the best option going forward is to maintain a single
set of docker image across all platforms. It's true that there is a concern
of users having to do more work, but in reality, user's will have do quite
a lot of config changes such as copying jdbc drivers, create key stores and
update hostnames etc right? As long as we provide a clean option, which is
using volume mounts or in k8s case config maps, we should be good.

For the evaluation / demo case, users can use the docker-compose artifacts
that's already preconfigured and ready to go.

While it might seem attractive to maintain images per platform, I think it
would be very costly and hard to maintain in the long run. In the future,
we would have to do things like running some scans etc on the built images
before making it available to pull. Having to identify issues across many
different platforms and fixing them one by one would be cumbersome.

I would suggest we go with a single set of images for all platforms and
then create per platform images if the need arises.


On Mon, Jan 22, 2018 at 5:30 PM, Imesh Gunaratne <[email protected]> wrote:

> On Mon, Jan 22, 2018 at 2:46 PM, Pubudu Gunatilaka <[email protected]>
> wrote:
>
>> Hi Imesh,
>>
>> It is very convenient if we can reuse the docker image. AFAIU if we
>> follow the above approach we can use a single docker image in all the
>> container platforms.
>>
>> One of the drawbacks I see with this approach is that the user has to
>> update the volume mounts with the necessary jar files, JKS files, etc. If
>> any user tries this approach in Kubernetes, he has to add those jar files
>> and binary files to the NFS server (To the volume which holds NFS server
>> data). This affects the installation experience.
>>
>> IMHO, we should minimize the effort in trying out the WSO2 products in
>> Kubernetes or any container platform. Based on the user need, he can switch
>> to their own deployment approach.
>>
>
> Thanks for the quick response Pubudu! Yes, that's a valid concern. With
> the proposed approach user would need to execute an extra step to copy
> required files to a set of volume mounts before executing the deployment.
> In a production deployment I think that would be acceptable as there will
> be more manual steps involved such as creating databases, setting up CI/CD,
> deployment automation, etc. However, in an evaluation scenario when someone
> is executing a demo it might become an overhead.
>
> I also noticed that kubectl cp command can be used to copy files from a
> local machine to a container. Let's check whether we can use that approach
> to overcome this issue:
> https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#cp
>
> On Mon, Jan 22, 2018 at 3:03 PM, Isuru Haththotuwa <[email protected]>
> wrote:
>
>> In API Manager K8s artifacts, what we have followed is not having an
>> image-per-profile method. With the introduction of Config Maps, it has
>> become only two base images - for APIM and Analytics. Its extremely helpful
>> from the maintenance PoV that we have a single set of Dockerfiles, but has
>> a tradeoff with automation level AFAIU, since the user might have manual
>> steps to perform.
>>
>
> ​Thanks Isuru for the quick response! What I meant by image per profile is
> that, in products like EI and SP, we would need a Docker image per profile
> due to their design.​
>
>>
>> Its would be still possible to to write a wrapper script for a single set
>> of Dockerfiles so that we can copy the artifacts, etc. using a single
>> Docker image, but still that script would need to be maintained.
>>
>
> ​A good point! I think it would be better to have a one to one mapping
> between the Docker images and the Dockerfiles to make it easier for users
> to understand how Docker images are built.​
>
>>
>> What if we go for a hybrid mode - not using Dockerfile per product
>> profile or a single set of Dockerfiles for all, but use a specific set of
>> Dockerfiles for a platform (Kubernetes, DC/OS,  etc.)? Also we need to be
>> open for any other platform that would need to support in future.
>>
>
> ​Yes, I think that's what we have at the moment and with that approach
> every other container platform we need to support we need to create a new
> set of Docker images.
>
> Thanks
> Imesh
>
>>
>> On Mon, Jan 22, 2018 at 1:36 PM, Imesh Gunaratne <[email protected]> wrote:
>>
>>> Hi All,
>>>
>>> Currently, we build Docker images for each platform (Docker, Kubernetes,
>>> DC/OS, etc) for each WSO2 product profile (EI: Integrator, MB, BPS; API-M:
>>> Gateway, Key Manager, Pub/Store, etc). AFAIU, the main reason to do this
>>> was bundling platform specific JAR files (membership scheme JAR file for
>>> clustering) and platform specific filesystem security permission management
>>> (mainly for OpenShift).
>>>
>>> With the recent refinements we did in Dockerfiles, Docker Compose
>>> templates we found that the same set of Docker images can be used in all
>>> container platforms if we follow below approach:
>>>
>>>    - Create the product profile Docker images by including the product
>>>    distribution, and the JDK.
>>>    - Provide configurations using volume mounts (on Kubernetes use
>>>    ConfigMaps)
>>>    - Provide JAR files and other binary files using volume mounts
>>>    - Use a standard permission model for accessing volume mounts in
>>>    runtime:
>>>       - Use a none root user to start the container: wos2carbon (uid:
>>>       200)
>>>       - Use a none root user group: wso2 (gid: 200) and add wso2carbon
>>>       user to wso2 group
>>>       - Grant required filesystem access to wso2 user group to the
>>>       product home directory
>>>       - Use wso2 user group (using gid: 200) to provide access to the
>>>       volume mounts in runtime:
>>>          - On Kubernetes we can use Pod Security Policies to manage
>>>          these permissions
>>>          - On OpenShift this can be managed using Security Context
>>>          Constraints
>>>          - On DC/OS volumes can be directly granted to user group
>>>          gid:200.
>>>
>>> Really appreciate your thoughts on this proposal.
>>>
>>> Thanks
>>> Imesh
>>>
>>> --
>>> *Imesh Gunaratne*
>>> WSO2 Inc: http://wso2.com
>>> T: +94 11 214 5345 M: +94 77 374 2057 <077%20374%202057>
>>> W: https://medium.com/@imesh TW: @imesh
>>> lean. enterprise. middleware
>>>
>>>
>>
>>
>> --
>> Thanks and Regards,
>>
>> Isuru H.
>> +94 716 358 048 <+94%2071%20635%208048>* <http://wso2.com/>*
>>
>>
>>
>
>
> --
> *Imesh Gunaratne*
> WSO2 Inc: http://wso2.com
> T: +94 11 214 5345 M: +94 77 374 2057 <+94%2077%20374%202057>
> W: https://medium.com/@imesh TW: @imesh
> lean. enterprise. middleware
>
>


-- 
Thanks,
Shariq
Associate Technical Lead
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to