Cài đặt Github Runner + Deploy dự án từ Github lên Harvester

1. Cài Harbor để lưu image khi deploy lên k8s

Tạo 1 máy ảo và cài Harbor lên đấy. Làm theo hướng dẫn trong URL sau.

https://goharbor.io/docs/2.9.0/install-config/

Sau khi cài xong vào Cloudflare tạo một public hostname trỏ vào ip tĩnh của máy trên.

Giờ vào domain trên với user admin và password trong harbor.yaml lúc cài.

Vào tạo 1 dự án riêng tư để đẩy hình ảnh.

Tiếp theo vào dashboard của Harvester, Advanced > Settings > containerd-registry > Edit Setting, nhập ip hoặc domain khi cài Harbor, thêm user password vào để sau này deploy trên k8s, không cần thêm secret để k8s có thể pull image về

2. Cài đặt Github Runner

Từ trang chủ repository hoặc Organization, truy cập Settings > Actions > Runners > New runner > New self-hosted runner

Chọn hệ điều hành sẽ cài đặt runner trên đấy.

SSH vào máy ảo và làm theo hướng dẫn.

Trên máy ảo, tạo một systemd để runner tự động chạy mỗi khi khởi động máy ảo.

sudo vi /etc/systemd/system/runner.service

[Unit]
Description=Github Runner

[Service]
ExecStart=/home/pxd/actions-runner/run.sh
Restart=on-failure
User=pxd

[Install]
WantedBy=multi-user.target

# Thoát  lưu lại

# Cập nhật dịch vụ
sudo systemctl daemon-reload

# Chạy dịch vụ
sudo systemctl start runner.service

# Kiểm tra trạng thái dịch vụ
sudo systemctl status runner.service

# Kích hoạt dịch vụ để tự động chạy lại khi khởi động máy ảo
sudo systemctl enable runner.service

Con runner này dùng để deploy lên k8s trên Harvester nên cần cài thêm docker và kubectl.

Đăng nhập docker với tài khoản admin hoặc tạo một tài khoản trên Harbor.

docker login harbor.pxd.asia

Vào k8s lấy file kubeconfig, lưu vào ~/.kube/config trên máy runner, nhớ đổi lại ip private của máy chạy Harvester trong file config.

vi ~/.kube/config

# thử lệnh kubectl
kubectl get node

3. Deploy dự án từ Github lên Harvester

Đầu tiên cần build image từ dự án Github:

  • Git clone dự án về máy runner
  • Viết Dockerfile
  • Build và push image
# cd vài thư mục dự án
# harbor.pxd.asia (domain config trong cloudflare), pxd (tên project tạo trong harbor), test:latest (tên image  tag)
docker build -t harbor.pxd.asia/pxd/test:latest .

# Push image lên registry
docker push harbor.pxd.asia/pxd/test:latest

Tiếp theo cần viết file deployment.yaml, service.yaml, ingress.yaml để deploy dự án lên k8s. Ví dụ:

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  namespace: test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: test
        image: harbor.pxd.asia/pxd/test:latest
        ports:
        - containerPort: 80
        
# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: test
  namespace: test
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: 80
  selector:
    app: test
    
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test
  namespace: test
  labels:
    app: test
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: test
            port:
              number: 80
    host: test.pxd.asia
    
# deploy lên k8s
kubectl apply -f deployment.yaml service.yaml ingress.yaml -n test

4. Viết Github Action để tự động deploy trên Github

Tìm hiểu về Github Action:

Cd vào thư mục chứa code dự án, tạo file .yml trong đương dẫn .github/workflows.

name: Deploy k8s

# điều kiện để chạy action, như này  khi  push  nhánh master
on:
  push:
    branches: master

jobs:
  test:  #tên công việc
    runs-on: pxd  #tên runner để chọn runner chạy
    steps:
      # cd vào thư mục chứa code hiện tại
      - name: Checkout  
        uses: actions/checkout@v3
      # Lệnh build, push image  that đổi image mới trên k8s
      - run: |
          time=$(date +"%s")
          
          docker build -t harbor.pxd.asia/test:$time .
          docker push harbor.pxd.asia/test:$time
          
          kubectl set image deployment/test test=harbor.pxd.asia/test:$time -n test

Push code mới lên Github và Github Action sẽ chạy để tự động deploy lên k8s.

5. Kết luận

Như vậy, trong bài này, bạn đã có thể cài Harbor registry để lưu image, Github Runner để deploy lên k8s.

Leave a Reply

Your email address will not be published. Required fields are marked *