-
Notifications
You must be signed in to change notification settings - Fork 172
Proposal_for_docker_Support_in_xCAT
Table of Contents
The docker technology is very hot in 2014, xCAT is planning to support the docker too. Following are the proposal list that will be supported in xCAT
- To include xCAT in docker image. Create a docker image to include 'xCAT' and xCAT dependency packages so that xCAT service can be easily enabled by pulling and running a docker image.
- Create a Dockerfile for xCAT so that customer can easily create a docker image for xCAT.
-
Pros:
- Customer can easily pull a xCAT docker image from public docker register and run it directly to get a xCAT environment.
- It will be easy to backup the whole xCAT management node.
- It will be easy to implement HA for xCAT management node.
- Easy to deploy an environment for testing and traning.
-
Cons:
- Customer might want to have a physical and individual server for xCAT MN;
- Use Yum or Zypper to install xCAT is not hard.
- Even with xCAT docker, customer still needs to run a lot configuration to enable a xCAT MN.
- The docker image is not easy to update packages or fix bugs.
- A dockerized xCAT can be useful for small cluster or leaning/training.
- It also can be used to create diskless image for the one which OS isn't same with the xCAT management node.
The work was surprisingly easy. We have a Dockerfile of about 15 lines that does a a setup of xCAT inside a container. In the initialization we setup a default table configuration. Directories that contain state are exported as docker volumes. For process management we use supervisord. For image generation we inject iso files into the container at start time. Then on our login node we install the xCAT client package and we are done.
We have tested by running Docker with the guest host's network stack.
The details can be found https://github.com/clustervision/trinity/, notably in the ha-xcat folder.
Deploy and configure docker host.
- Prepare docker packages for docker host;
- Install docker packages on docker host during OS deployment or updatenode.
- Configure network bridges on the docker host. This step is used to enable the network connection for dockers cross host.
After this step, the dock host is ready to initiate container.
Create, Remove, Start and Stop Containers on docker host. Also will support the status check and remote console for containers.
Comments: We are arguing that using the 'mkvm, rmvm' which are used for virtual machine might NOT suitable for container management.
3.1 Define a Container in xCAT
-
Description: Make the definition of container. Add the necessary attributes for a container object.
Definition Example: Object name: host1c1 #Container 1 on Host 1 mac=xx:xx:xx:xx:xx:xx mgt=docker ip=xxx.xxx.xxx.xxx provmethod=<docker image name> vmhost=<docker host> vmcpu=xx vmmemory=xx ... # The docker parameters like 'port', 'volume' and 'link containers' are the considered ones.
3.2 Create a Container
- Description: Create a container on target host. e.g. 'mkvm host1c1'. Create a container named c1 on host1 base on the attributes defined in host1c1 object.
- xcat CMD: mkvm
- docker CMD: docker run
3.3 Remove a Container
- Description: Remove a container from target host. e.g. 'rmvm host1c1'. Remove the container named c1 from host1.
- xcat CMD: rmvm
- docker CMD: docker rm
3.4 Start a Container
- Description: Start a container from target host. e.g. 'rpower host1c1 on'. Start the container named c1 on host1.
- xcat CMD: rpower on
- docker CMD: docker start
3.5 Stop a Container
- Description: Stop a container from target host. e.g. 'rpower host1c1 off'. Stop the container named c1 from host1.
- xcat CMD: rpower off
- docker CMD: docker stop
3.6 Check the Status for a Container
- Description: Display the status of a container. e.g. 'rpower host1c1 state'. Check the status for the container named c1 from host1.
- xcat CMD: rpower state
- docker CMD: docker ps
3.7 Start Remote Console for a Container
- Description: Remote connect to container from target host. e.g. 'rcons host1c1'. Remote connect to the console of the container named c1 on host1.
- xcat CMD: rcons
- docker CMD: docker attach
Comment: This might require the container to have a tty output so that rcons can display something.
Maintain a local docker image Register in xCAT cluster.
4.1 Maintain a local docker image register on xCAT management node. (xCAT will help to install and configure this local register) 4.2 Trigger docker host to download docker image from local image register. Remotely run 'docker pull' on docker host. 4.3 For a updated container, support the 'commit' and 'push' command to convert the changed container to an image and push the image to local register.
Comment: In the phase one, it requires customer to create docker image manually by docker 'commit', 'pull', 'build', or 'import'. In the phase 2, xCAT might implement some commands to help customer to create image.
5.1 Enable the cross hosts/cluster network communication for containers. (use the bridge mode) Assign predefined IP for each container. The container can ping each other in the whole cluster.
5.2 Enable the docker container link between containers. (Need requirement scenarios)
5.3 Support openvswitch as network switch
Enable volumes for containers. (Need requirement scenarios)
It sounds useful to support docker image in xCAT diskless since we can leverage the available docker image which has application configured and ready for using. I did some tries to enable docker image in diskless image. But the result was not good as we expected.
- I captured the whole file system from a running container.
- I tried to add lacked packages like 'kernel' to this captured file system.
- Use the captured file system as base, run xCAT 'genimage' command to add the lacked packages.
- Run 'genimage' command to generate a base file system, then use the captured file system to override the one which generated by 'genimage'.
With both ways, I found several issues to enable the produced file system.
- Some packages which installed in docker image conflict with the ones from xCAT repo. To solve this problem, we have to require the packages which used to generate docker image must be same with the ones in the xCAT osimage repository.
- Some package like fakesystemd is for docker specific. They must be removed.
- Some container configurations for network are different with a general OS. The result was the merged osimage cannot start network service like nfs server, sshd.
- Required reviewers:
- Required approvers: Guang Cheng
- Database schema changes: N/A
- Affect on other components: N/A
- External interface changes, documentation, and usability issues: N/A
- Packaging, installation, dependencies: N/A
- Portability and platforms (HW/SW) supported: N/A
- Performance and scaling considerations: N/A
- Migration and coexistence: N/A
- Serviceability: N/A
- Security: N/A
- NLS and accessibility: N/A
- Invention protection: N/A
- Nov 13, 2024: xCAT 2.17 released.
- Mar 08, 2023: xCAT 2.16.5 released.
- Jun 20, 2022: xCAT 2.16.4 released.
- Nov 17, 2021: xCAT 2.16.3 released.
- May 25, 2021: xCAT 2.16.2 released.
- Nov 06, 2020: xCAT 2.16.1 released.
- Jun 17, 2020: xCAT 2.16 released.
- Mar 06, 2020: xCAT 2.15.1 released.
- Nov 11, 2019: xCAT 2.15 released.
- Mar 29, 2019: xCAT 2.14.6 released.
- Dec 07, 2018: xCAT 2.14.5 released.
- Oct 19, 2018: xCAT 2.14.4 released.
- Aug 24, 2018: xCAT 2.14.3 released.
- Jul 13, 2018: xCAT 2.14.2 released.
- Jun 01, 2018: xCAT 2.14.1 released.
- Apr 20, 2018: xCAT 2.14 released.
- Mar 14, 2018: xCAT 2.13.11 released.
- Jan 26, 2018: xCAT 2.13.10 released.
- Dec 18, 2017: xCAT 2.13.9 released.
- Nov 03, 2017: xCAT 2.13.8 released.
- Sep 22, 2017: xCAT 2.13.7 released.
- Aug 10, 2017: xCAT 2.13.6 released.
- Jun 30, 2017: xCAT 2.13.5 released.
- May 19, 2017: xCAT 2.13.4 released.
- Apr 14, 2017: xCAT 2.13.3 released.
- Feb 24, 2017: xCAT 2.13.2 released.
- Jan 13, 2017: xCAT 2.13.1 released.
- Dec 09, 2016: xCAT 2.13 released.
- Dec 06, 2016: xCAT 2.9.4 (AIX only) released.
- Nov 11, 2016: xCAT 2.12.4 released.
- Sep 30, 2016: xCAT 2.12.3 released.
- Aug 19, 2016: xCAT 2.12.2 released.
- Jul 08, 2016: xCAT 2.12.1 released.
- May 20, 2016: xCAT 2.12 released.
- Apr 22, 2016: xCAT 2.11.1 released.
- Mar 11, 2016: xCAT 2.9.3 (AIX only) released.
- Dec 11, 2015: xCAT 2.11 released.
- Nov 11, 2015: xCAT 2.9.2 (AIX only) released.
- Jul 30, 2015: xCAT 2.10 released.
- Jul 30, 2015: xCAT migrates from sourceforge to github
- Jun 26, 2015: xCAT 2.7.9 released.
- Mar 20, 2015: xCAT 2.9.1 released.
- Dec 12, 2014: xCAT 2.9 released.
- Sep 5, 2014: xCAT 2.8.5 released.
- May 23, 2014: xCAT 2.8.4 released.
- Jan 24, 2014: xCAT 2.7.8 released.
- Nov 15, 2013: xCAT 2.8.3 released.
- Jun 26, 2013: xCAT 2.8.2 released.
- May 17, 2013: xCAT 2.7.7 released.
- May 10, 2013: xCAT 2.8.1 released.
- Feb 28, 2013: xCAT 2.8 released.
- Nov 30, 2012: xCAT 2.7.6 released.
- Oct 29, 2012: xCAT 2.7.5 released.
- Aug 27, 2012: xCAT 2.7.4 released.
- Jun 22, 2012: xCAT 2.7.3 released.
- May 25, 2012: xCAT 2.7.2 released.
- Apr 20, 2012: xCAT 2.7.1 released.
- Mar 19, 2012: xCAT 2.7 released.
- Mar 15, 2012: xCAT 2.6.11 released.
- Jan 23, 2012: xCAT 2.6.10 released.
- Nov 15, 2011: xCAT 2.6.9 released.
- Sep 30, 2011: xCAT 2.6.8 released.
- Aug 26, 2011: xCAT 2.6.6 released.
- May 20, 2011: xCAT 2.6 released.
- Feb 14, 2011: Watson plays on Jeopardy and is managed by xCAT!
- xCAT OS And Hw Support Matrix
- Oct 22, 2010: xCAT 2.5 released.
- Apr 30, 2010: xCAT 2.4 is released.
- Oct 31, 2009: xCAT 2.3 released. xCAT's 10 year anniversary!
- Apr 16, 2009: xCAT 2.2 released.
- Oct 31, 2008: xCAT 2.1 released.
- Sep 12, 2008: Support for xCAT 2 can now be purchased!
- June 9, 2008: xCAT breaths life into (at the time) the fastest supercomputer on the planet
- May 30, 2008: xCAT 2.0 for Linux officially released!
- Oct 31, 2007: IBM open sources xCAT 2.0 to allow collaboration among all of the xCAT users.
- Oct 31, 1999: xCAT 1.0 is born!
xCAT started out as a project in IBM developed by Egan Ford. It was quickly adopted by customers and IBM manufacturing sites to rapidly deploy clusters.