0%

如何使用k3s部署gitlab ce

  1. 安裝 k3sNode1
1
2
3
curl -sfL https://get.k3s.io | sh -
sudo k3s kubectl get nodes
sudo cat /var/lib/rancher/k3s/server/node-token
  1. 安裝 k3s-agentNode2
1
curl -sfL https://get.k3s.io | K3S_URL=https://10.0.0.1:6443 K3S_TOKEN=<TOKEN> sh -
  1. 安裝 HelmNode1
1
2
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
helm version
  1. 加入 Gitlab Helm repo 在 Node1
1
2
helm repo add gitlab https://charts.gitlab.io/
helm repo update
  1. 建立命名空間在 Node1
1
sudo k3s kubectl create namespace gitlab
  1. 建立設定檔 values.yamlNode1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mkdir -p gitlab

vim values.yaml
# values.yaml
global:
hosts:
domain: gitlab.local
https: true
edition: ce
ingress:
configureCertmanager: false

nginx-ingress:
enabled: true

gitlab-runner:
install: false

  1. 安裝 GitLab Server
1
helm upgrade --install gitlab gitlab/gitlab -n gitlab -f values.yaml
  1. 等待 Pod 啟動
1
sudo k3s kubectl get pods -n gitlab
  1. 取得 root 密碼
1
sudo k3s kubectl get secret gitlab-gitlab-initial-root-password -n gitlab -ojsonpath='{.data.password}' | base64 -d
  1. 確認 k3s 狀態
1
sudo k3s kubectl get nodes -o wide
  1. 讓 Helm 用對的 kubeconfig
1
2
3
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER:$USER ~/.kube/config
  1. 修改 ~/.kube/config127.0.0.1 改成 Node1 IP

  2. 確認 kubectl正常

1
2
3
export KUBECONFIG="$HOME/.kube/config"
kubectl config get-contexts
kubectl get ns
  • (Optional) 如何刪除 Pod
1
2
3
4
5
kubectl -n gitlab delete pod -l app=registry
kubectl -n gitlab delete pod -l app=webservice
kubectl -n gitlab delete pod -l app=sidekiq

kubectl -n gitlab get pods
  • (Optional) Node hostname 不能一樣
  1. 加入 Node1 IP在PC上
1
2
3
echo "192.168.1.10 gitlab.gitlab.local registry.gitlab.local minio.gitlab.local kas.gitlab.local" | sudo tee -a /etc/hosts

curl -k -I -H "Host: gitlab.gitlab.local" https://<任一節點IP>:30721/
  1. 啟用 ServiceLB 做到可以直接連線 80/443 在 Node1
1
sudo systemctl cat k3s | grep -i servicelb -n || true

用 systemd drop-in 覆蓋 ExecStart

1
2
3
4
5
sudo systemctl edit k3s
# 進入編輯器後貼上(這會清掉舊的 ExecStart,請保留你需要的其他參數)
[Service]
ExecStart=
ExecStart=/usr/local/bin/k3s server --write-kubeconfig-mode 644

套用並重啟:

1
2
sudo systemctl daemon-reload
sudo systemctl restart k3s

把 GitLab 的 Ingress Service 切成 LoadBalancer

1
2
3
4
5
6
7
helm upgrade --install gitlab gitlab/gitlab -n gitlab -f values.yaml \
--set nginx-ingress.controller.service.type=LoadBalancer \
--set nginx-ingress.controller.service.ports.gitlab-shell=2222 \
--set global.shell.port=2222 \
--set nginx-ingress.controller.service.nodePorts.http=null \
--set nginx-ingress.controller.service.nodePorts.https=null \
--set nginx-ingress.controller.service.nodePorts.gitlab-shell=null

幾秒後查看 EXTERNAL-IP(會是某個節點的實體 IP,或兩個節點都列出)

1
kubectl -n gitlab get svc gitlab-nginx-ingress-controller

在你的用戶端把 DNS/hosts 指到這個 EXTERNAL-IP

1
echo "<EXTERNAL-IP> gitlab.gitlab.local registry.gitlab.local minio.gitlab.local kas.gitlab.local" | sudo tee -a /etc/hosts

測試 Gitlab

1
2
3
curl -I -H "Host: gitlab.gitlab.local" http://<EXTERNAL-IP>/

curl -k -I -H "Host: gitlab.gitlab.local" https://<EXTERNAL-IP>/

測試 SSH

1
ssh -p 2222 git@gitlab.gitlab.local