Harbor Nedir? Kubernetes Harbor Kurulumu ve Github Action İşlemleri

DevOpsYazılım

Harbor Nedir? Kubernetes Harbor Kurulumu ve Github Action İşlemleri

Harbor Nedir?

Harbor, açık kaynaklı bir Docker Container Registry yönetim platformudur. Docker Hub, ACR gibi Container Registry hizmetlerine benzer şekilde çalışıyor.

Bu yapının güzel kısmı kendi altyapımızda barındırabiliyor olmamız. Öncesinde ACR üzerinde olan projelerimizi buraya taşımamız gerektiğini varsayalım. Bunun için de Harbor kullanıyor olacağız. Öncelikle hangi adımlardan geçeceğimize bakalım.

Yapılacaklar

Harbor Kurulumu

Harbor Proje Oluşturma

Harbor Projesi için Github Action Hazırlama

Harbor k8s Deploy İşlemleri

Harbor Token ve Secret İşlemleri

Harbor Kurulumu

Bir dizin içerisinde, helm kullanarak harbor u yükleyelim.

helm repo add harbor https://helm.goharbor.io

helm fetch harbor/harbor –untar

Harbor sorunsuz yüklendiyse işlemimize devam edebiliriz. Dizine çıkardığımız dosyaları buradan kontrol edebiliriz. Özellikle values.yaml dosyası için kendi ayarlarımızı konfigüre edebiliriz. Dilersek Kubernetes kurulum anında da bazı değerleri set edebiliriz. Daha fazla detay için buraya göz atabilirsiniz.

helm install harbor . –set persistence.persistentVolumeClaim.registry.accessMode=ReadWriteMany –set persistence.persistentVolumeClaim.jobservice.accessMode=ReadWriteMany –set persistence.persistentVolumeClaim.registry.size=20Gi –set persistence.persistentVolumeClaim.chartmuseum.size=2Gi –set persistence.persistentVolumeClaim.database.size=2Gi –set persistence.persistentVolumeClaim.trivy.size=2Gi –set expose.ingress.hosts.core=harbor.domain.com –set expose.ingress.hosts.notary=notary.domain.com –set persistence.enabled=false –set externalURL=https://harbor.domain.com –set expose.ingress.className=nginx -n harbor

Harbor ingress üzerinden çalışacak. Bu yüzden ingress className kısmını nginx olarak geçiyoruz ve harbor namespace altında podlarımız oluşacak. Domain kısmına dilerseniz kendi bilgilerinizi girebilirsiniz.

Bu adımlardan sonra ilgili domaini yönlendirdikten sonra giriş yapabilirsiniz. Eğer herhangi bir kullanıcı adı veya parola belirlemediyseniz. admin ve Harbor12345 şeklinde ilerleyebilirsiniz.

Harbor Proje Oluşturma

Harbor paneline artık erişebilir durumdayız. Giriş yaptıktan sonra bir harbor tarafında proje oluşturalım ve proje içerisine Github Action dan gönderdiğimiz repository, oluşturduğumuz proje içerisine gönderilsin.

Harbor tarafında projemiz oluştu. Bu adımdan sonra, container larımızın artık burada depolanmasını isteyebiliriz. Bunun için Github üzerinden bir repository ile haberleşiyor olacağız.

Harbor Projesi için Github Action Hazırlama

Github üzerinden herhangi bir repository oluşturduğumuzu varsayalım. Harbor adresimiz kullanıcı adımız ve parolamızı alıp Github tarafında secret olarak geçelim.

Harbor bilgilerini de secret olarak geçtiğimize göre artık projemizi build alabiliriz. Buradaki önemli nokta projemizin dockerize mimarisina uygun olmasıdır. Aşağıdaki yaml dosyası buna uyumludur.

.github/workflows/action.yaml

name: testapp Github Action Workflow
on:
  workflow_dispatch:
 
jobs:
  docker_build_push_acr:
    name: 'Docker Build and Push to Harbor'
    runs-on: ubuntu-latest

    defaults:
      run:
        shell: bash
  
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Login to Harbor Registry
        run: docker login -u ${{ secrets.HARBOR_REGISTRY_USERNAME }} -p ${{ secrets.HARBOR_REGISTRY_PASSWORD }} ${{ secrets.HARBOR_REGISTRY }}

      - name: Build Docker image
        run: docker build -t ${{ secrets.HARBOR_REGISTRY }}/test/testapp:${{ github.sha }} . 
        ## Dockerfile adlı dosya build edilir (.)

      - name: Push Docker image to Harbor
        run: docker push ${{ secrets.HARBOR_REGISTRY }}/test/testapp:${{ github.sha }}

Action dosyamızı çalıştırdıktan sonra Harbor panelinde oluşturduğumuz projenin içerisine göz atabiliriz.

Oluşturduğumuz repository bilgileri action işleminden sonra harbor içerisine gönderildi.

Harbor k8s Deploy İşlemleri

Artık container oluşturabildiğimize göre, docker imajlarını pod olarak çalıştırabiliriz.

deploy

apiVersion: apps/v1
kind: Deployment
metadata:
  name: testapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: testapp
  template:
    metadata:
      labels:
        app: testapp
    spec:
      containers:
        - name: testapp
          image: harbor.domain.com/test/testapp:image-id
          resources:
            requests:
              cpu: 50m
              memory: 150Mi
            limits:
              cpu: 150m
              memory: 250Mi
      imagePullSecrets:
        - name: harbor-registry

apply

kubectl apply -f deployment.yaml

Harbor adresimize yukarıdaki deployment dosyası ile istek yapmaya çalıştığımızda 401 Unauthorized hatası almamız muhtemel. Çünkü docker imajına ait değeri çekmeye çalışıyoruz. Bunun için imagePullSecrets oluşturmamız gerek. Deployment dosyasında zaten bunu gönderdik fakat böyle bir secret değerimiz mevcut değil. Şimdi bunu oluşturalım.

Harbor Token ve Secret İşlemleri

Harbor paneli üzerinden Adminstration > Robot Accounts > New Robot Account kısmına gelerek bir token oluşturalım. Robot hesabı oluştururken ilgili projemizi seçebilir ve verilecek yetkiyi düzenleyebiliriz.

Oluşturduğumuz robotu kubernetes içerisine apply edeceğiz.

kubectl create secret docker-registry harbor-registry –docker-server=harbor.domain.com –docker-username=’robot$robotadi’ –docker-password=token

kubectl get secret

Eğer her şey sorunsuz ilerlediyse harbor-registry adında secret değerimizin oluşmuş olması gerekiyor. Bundan sonrası için artık repository action larımızı çalıştırıp kubernetes tarafına deploy işlemlerimizi kolaylıkla tamamlayabiliriz.

Etiketler: harbor, harbor k8s github action, harbor kubernetes kurulumu, harbor kurulumu, harbor nedir?

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Fill out this field
Fill out this field
Lütfen geçerli bir e-posta adresi yazın.

Yeni
Bu yazıyı beğendin mi? Arkadaşlarınla paylaş!

Benzer içerikler: