การติดตั้ง gitlab บน kubernetes
การติดตั้ง gitlab บน kubernetes นั้นทำได้ 2 วิธีคือ
เตรียมตัวก่อนติดตั้ง
สิ่งที่คุณต้องมีก่อนติดตั้ง gitlab คือ kubernetes ซึ่งคุณจะสร้าง kubernetes cluster ด้วยวิธีไหนก็ได้ เช่น
- enable kubernetes ใน docker desktop
- ติดตั้ง kubernetes ผ่าน minikube
- ติดตั้ง kubernetes ผ่าน kind
- ใช้ Elastic Kubernetes Services(EKS) บน AWS
- อื่นๆ
หลังจากที่คุณมี kubernetes cluster แล้ว command ที่คุณต้องมีในเครื่อง คือ
- helm command สำหรับการติดตั้ง gitlab ผ่าน helm (ในบทความนี้เราจะใช้ helm version 3 ขึ้นไป)
- kubectl
การติดตั้ง gitlab ด้วย Helm
หลังจากที่เราทำการติดตั้ง helm เรียบร้อยแล้ว(เราจะใช้ helm version 3 เป็นต้นไป) เริ่มทำการติดตั้ง gitlab ตามขั้นตอนต่างๆ ดังนี้
-
add repository
helm repo add gitlab https://charts.gitlab.io/
-
update repository
helm repo update
-
ติดตั้ง gitlab
helm upgrade --install gitlab gitlab/gitlab \ --timeout 600 \ --set global.hosts.domain=http://api.example.com/ \ --set global.edition=ce --set postgresql.image.tag=13.6.0
parameters แต่ละตัวมีความหมายว่า
- helm upgrade เป็นคำสั่งที่ใช้ในการติดตั้ง ซึ่งถ้าเราเคยติดตั้งมาแล้วมันก็จะทำการ update แทน
- –install gitlab กำหนดให้มีการตั้งชื่อ release ว่า gitlab ซึ่งเราสามารถให้ helm generate ชื่อของ release ให้เราได้ โดยเราต้องใส่ –generate-name เข้าไปแทน
- –timeout ใน helm version 3 บังคับให้เราต้องระบุ timeout ไว้ด้วย โดยในกรณีนี้เราจะระบุไว้ที่ 600 วินาที เราสามารถใส่หน่วยเป็นนาทีก็ได้ เช่นเราอาจเปลี่ยนเป็น 10m(10 นาที) ก็ได้เหมือนกัน
- –set เป็นการกำหนดค่าให้กับตัวแปรใน template ซึ่งเป็นค่าที่จะนำไปใส่ไว้ใน manifest file ให้เรา ต้องดูจาก chart แต่ละตัวว่าต้องกำหนดค่าอะไรบ้าง ในกรณีนี้จะเหมือนกับที่เรากำหนด configuration ให้กับ gitlab ใน docker
- เราสามารถใช้ –version ในการระบุ version ของ gitlab ได้ด้วย
ค่าที่เรากำหนดให้กับ configuration ของ gitlab มี 3 ตัวคือ
- globals.hosts.domain เป็นการกำหนด external url
- globals.edition เลือกว่าจะใช้ community edition(ce) หรือ enterprise edition(ee) ค่า default จะเป็น ee
- postgresql.image.tag กำหนด version ของ postgresql (gitlab จะใช้ postgresql ในการเก็บข้อมูล และไม่ support database ตัวอื่น)
-
login เข้า gitlab ด้วย root account เราต้องใข้ kubectl ดีึงเอา password ออกมาจาก kubernetes secret (gitlab จะทำการเก็บ initial root password ไว้ใน kubernetes secret)
kubectl get secret <name>-gitlab-initial-root-password
หรือ
kubectl get secret <name>-gitlab-initial-root-password -o jsonpath='{.data.password}'
Initial root password ที่ได้จะถูก encoding ไว้ด้วย base64 ซึ่งเราสามารถถอดได้ด้วย command
base64 --decode <<< [intial root password ที่ได้]
หรือถ้าไม่มีคำสั่ง base64 ก็สามารถใช้งาน Base64 decode online ตาม link นี้ได้
บน linux และ macos เราสามารถ run kubectl get secret และ decode พร้อมกันได้เลย
kubectl get secret <name>-gitlab-initial-root-password -ojsonpath='{.data.password}' | base64 --decode ; echo
หลังจากได้ intial root password ที่ถูก decode ออกมาแล้วคุณก็สามารถ login เข้าสู่ gitlab server ได้แล้วเป็นอันเสร็จพิธี
การติดตั้ง gitlab ด้วย Gitlab Operator
การติดตั้งด้วย gitlab operator จะเป็นการติดตั้งที่เป็นไปตาม kubernetes operator patterns ซึ่งจะแตกต่างจาก helm เพราะการใช้ kubernetes operator นอกจากจะช่วยให้เราติดตั้ง gitlab ได้ง่ายขึ้นแล้ว gitlab operator จะมีการสร้าง Custom Resource Definition(CRD) ในกรณีนี้จะเป็น custom resource ที่ชื่อ gitlab(kind: gitlab) ซึ่งจะช่วยให้เราสามารถจัดการกับ gitlab instance ได้ง่ายขึ้น และใน gitlab operator ก็จะมี certificate manager มาด้วยทำให้เราสามารถติดตั้ง gitlab instance ที่ใช้งานผ่าน https ได้ในขั้นตอนเดียว พูดง่ายๆก็คือ helm จะจบที่การติดตั้งและการ upgrade แต่ gitlab operator จะเริ่มตั้งแต่การติดตั้งและยาวไปสิ่งที่ต้องมีและสิ่งที่ต้องทำตอน operation ด้วย
GitLab Operator รองรับ Kubernetes 1.19 ถึง 1.22, และได้ทำการทดสอบการทำ Continuous Integration(CI) ใน 1.21 และ 1.22
ติดตั้งด้วย Gitlab Operator
การติดตั้งด้วย gitlab operator ให้ทำตามขั้นตอนต่างๆ ดังนี้
-
กำหนด version ของ gitlab operator และ platform ใน Environment variable
export GL_OPERATOR_VERSION=0.16.0 # https://gitlab.com/gitlab-org/cloud-native/gitlab-operator/-/releases export PLATFORM=kubernetes # or "openshift"
บน windows ให้ run คำสั่งนี้ใน powershell
$env:GL_OPERATOR_VERSION="0.16.0" $env:PLATFORM="kubernetes"
ดู gitlab operator version ล่าสุดได้ที่นี่
-
สร้าง namespace สำหรับ gitlab(ไม่แนะนำให้ติดตั้งลงใน cluster scope)
kubectl create namespace gitlab-system
-
ทำการ deploy gitlab ลงบน kubernetes
kubectl apply -f https://gitlab.com/api/v4/projects/18899486/packages/generic/gitlab-operator/${GL_OPERATOR_VERSION}/gitlab-operator-${PLATFORM}-${GL_OPERATOR_VERSION}.yaml
-
สร้าง custom resource ด้วย menifest file นี้ โดยไฟล์นี้จะตั้งชื่อว่า gitlab-server.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
apiVersion: apps.gitlab.com/v1beta1 kind: GitLab metadata: name: gitlab spec: chart: version: "6.0.2" # ดู chart version ล่าสุดได้ที่ link ด้านล่าง values: global: hosts: domain: gitlab.example.com # ต้องใช้ domain จริง ingress: configureCertmanager: true certmanager-issuer: email: youremail@example.com # ต้องใช้ e-mail จริง
kind: Gitlab มาจาก gitlab operator ในขั้นตอนที่ 3
ดู version ล่าสุดของ chart version ได้ที่นี่
-
Deploy gitlab instance ด้วยคำสั่ง apply
kubectl -n gitlab-system apply -f mygitlab.yaml
-
ดู progress ของการติดตั้งผ่าน logs ได้ด้วยคำสั่ง
kubectl -n gitlab-system logs deployment/gitlab-controller-manager -c manager -f
-
เราสามารถดึงเอา gitlab instance ออกมาดูได้ด้วยคำสั่ง
kubectl -n gitlab-system get gitlab
การถอนการติดตั้ง Gitlab Operator
ถ้าเราต้องการถอนการติดตั้ง gitlab ออกให้ทำตามขั้นตอนนี้
- ลบ gitlab instance ออกก่อนด้วยคำสั่งนี้
kubectl -n gitlab-system delete -f mygitlab.yaml
- ลบ gitlab operator ออก ในกรณีที่เราไม่ต้องการใช้ gitlab(custom resource definition) ใน version นี้อีกแล้วให้ใช้คำสั่ง
export GL_OPERATOR_VERSION=0.16.0 # ใส่เลข version ที่เราติดตั้ง ถ้าในเครื่องนี้ set environemnt variable ไว้ถาวรก็ไม่ต้องใส่
export PLATFORM=kubernetes # or "openshift"
kubectl delete -f https://gitlab.com/api/v4/projects/18899486/packages/generic/gitlab-operator/${GL_OPERATOR_VERSION}/gitlab-operator-${PLATFORM}-${GL_OPERATOR_VERSION}.yaml
หรือบน windows ก็จะเป็น
$env:GL_OPERATOR_VERSION="0.16.0" # ใส่เลข version ที่เราติดตั้ง ถ้าในเครื่องนี้ set environemnt variable ไว้ถาวรก็ไม่ต้องใส่
$env:PLATFORM="kubernetes" # or "openshift"
kubectl delete -f https://gitlab.com/api/v4/projects/18899486/packages/generic/gitlab-operator/${GL_OPERATOR_VERSION}/gitlab-operator-${PLATFORM}-${GL_OPERATOR_VERSION}.yaml
เป็นอันเสร็จเรียบร้อยทั้งการติดตั้งและถอนการติดตั้งด้วย gitlab operator ซึ่งจะเห็นว่าเราจะสร้าง gitlab ที่มีมากกว่า 1 instance ได้ง่ายกว่าการใช้ helm เพราะเรามี custom resource definition(kind: gitlab)
อ่านต่อเพิ่มเติมได้ที่นี่