Version 7.1 by Eduard Moraru on 2019/09/04
Show last authors
author | version | line-number | content |
---|---|---|---|
1 | = Mentors: = | ||
2 | |||
3 | I want to thank my mentors Shubham Jain, Neha Gupta and Xwiki organisation for giving me such an opportunity and helping me out throughout my journey of GSOC. I also want to also thank Vincent Massol for helping me out in one of my dependent project. | ||
4 | |||
5 | = A little bit about me = | ||
6 | |||
7 | My name is Ashish Sharma, I am 23 and I am a final year student from Bharati Vidyapeeth's College of Engineering, India. I have participated in GSoC'19 program as a student in XWiki and worked on "Helm chart for Xwiki". | ||
8 | |||
9 | = What did I expect from GSoC 2019 = | ||
10 | |||
11 | This was my first Google Summer of Code and the concept to contribute for 3 months in an open-source organisation was exciting for me. I got an opportunity to work remotely on a project. I was curious to explore how an open-source organisation work. Anyway, I have expected new experience in remote internship, open source project contributing, Google Summer of Code participating and international only remote communication. | ||
12 | |||
13 | In this post I want to describe what I have finished and what is not completed yet and why. | ||
14 | |||
15 | = Description = | ||
16 | |||
17 | This project focoused on creating a helm chart that would deploy xwiki on Kubernetes by using helm templating. The deployment should be configurable to be scalacble, highly available and roboust. | ||
18 | |||
19 | = You can find the project code at = | ||
20 | |||
21 | https://github.com/xwiki-contrib/xwiki-helm and | ||
22 | |||
23 | = The issue tracker can be found = | ||
24 | |||
25 | https://jira.xwiki.org/projects/HELM/issues | ||
26 | |||
27 | = How to use the result of my work = | ||
28 | |||
29 | git clone https://github.com/xwiki-contrib/xwiki-helm | ||
30 | cd xwiki-helm-chart | ||
31 | helm dependency update | ||
32 | helm --debug upgrade -i --force xwiki -f ./values.yaml . | ||
33 | |||
34 | [[Read about prerequite>>https://github.com/xwiki-contrib/xwiki-helm]] | ||
35 | |||
36 | = Milestones = | ||
37 | |||
38 | == Milestones 1: == | ||
39 | |||
40 | === Creating a basic helm chart === | ||
41 | |||
42 | * Understanding xwiki's docker structure. | ||
43 | * Understanding and taking the decision for using the correct resource to host xwiki. | ||
44 | * So I started up using the StatefulSet, clusterIP service and ingress. | ||
45 | * Added values files which help in making the chart dynamically configurable. | ||
46 | * Then we neded to support multiple databases and was in a need of a solution that don't require to deploy database externally, so a good standard for adding dependency for other services like database were needed. | ||
47 | * So we decided to add database as a helm dependency, that helped us to templatise the databases in our application which makes deploying databases easier, we don't need to deploy the chart seprately. | ||
48 | * So we added support for database mysql and postgress through dependency and also given option for user to deploy it's own external database. | ||
49 | |||
50 | == Milestestone 2: == | ||
51 | |||
52 | === Adding support for ISTIO and other features === | ||
53 | |||
54 | * Till now we have a chart that would deploy our standalone application, now we need | ||
55 | * Added support for ISTIO | ||
56 | * Till now the helm were taking values from values file, we needed a way to manage our envoirnment variable that we pass to our container, and we also need to secure the sensetive variables like db password. For that I used Kubernetes resources configMaops and Secrets. These help us save and manage our variable securely and properly. | ||
57 | * Xwiki-helm also needed an optional feature to havdle Pod disruption, if the users have a heavy dependency on xwiki. This features make the xwiki chart user configure the minimum number of pods that should be running while pods are been destroyed due to any reason. | ||
58 | * A need for shared file storage were needed, secially when serviec provider like GKE does not provide //ReadWriteMany// option, so to run xwiki on cluster we need different database solution like Rook, I had researched about it and also written a blog on how to [[set up Rook on GKE for shared file system>>https://medium.com/@ashish932/f3abe23d9e79]] | ||
59 | |||
60 | == Milestone 3: == | ||
61 | |||
62 | === Adding support for clustering,HA and Unit testing === | ||
63 | |||
64 | * While moving towards HA and clustering we got to know that Xwiki need shared file storage for clustering which was not available in StatefulSet, so we made a desicion to migrate to Deployment. | ||
65 | * We needed to add test-cases so I added unit-testing. | ||
66 | * Clustering was required to take xwiki on HA. For that we need docker to enable option to configure clustering, so first I made changes in docker project and provided option to configure JGroups. | ||
67 | * Then I needed to provide the option in helm. For that I had to face another challenge to how to pass configuration files needed by JGroup from my helm chart to the container. For that I took the file in ConfigMaps and mounted the file to the xwiki pods. Also provided option to enable and disable JGroups. | ||
68 | * While enabling clustering we need to know which pods are avialable to accept request and which are dead so that we can route traffic accordingly, for that I needed to configure liveliness and readiness probes, so that kubernetes always get updated with the state of the container and if the container crashes it could restart the pod. | ||
69 | * Xwiki uses solr and the docker it embededs solr internally, but as suggested by Xwiki for performance improvement solr should be externalised, so I tried to add it as a dependency but failed due to an immature helm chart of solr, and how the xwiki configures solr, it was not possible with the current solr chart state. So for now I have exposed the basic parameter and the user has to manually setup solr and pass the url of the solr. |