Rumah pembangunan bahagian belakang Golang Membangunkan saluran paip pada Apl Web Golang dengan Gitops dan Kubernetes

Membangunkan saluran paip pada Apl Web Golang dengan Gitops dan Kubernetes

Oct 24, 2024 am 02:44 AM

Dalam catatan blog ini, saya akan membimbing anda melalui perjalanan mengautomasikan penggunaan apl web dalam golang dengan saluran paip CI/CD dan menggunakan pendekatan Gitops.

Kami akan melalui kontena aplikasi kami untuk menggunakan ia pada kubernetes untuk menggunakan ArgoCD untuk penggunaan.

Keperluan

  1. Sekelompok kubernetes Anda boleh menggunakan mana-mana perkhidmatan terurus daripada pembekal awan untuk kubernetes atau jika sistem anda mempunyai sumber yang mencukupi untuk menyediakan kluster kubernetes anda boleh menyediakan kluster kubernetes tempatan menggunakan Minikube/kind
  2. Akaun github Akaun percuma sudah memadai kerana kami akan menggunakan Github Actions for Continuous Integration (CI)
  3. Akaun dockerhub Kami akan menggunakan dockerhub untuk menarik imej bekas
  4. Keinginan untuk belajar
  5. Tidak berputus asa Ini adalah yang penting anda akan menghadapi masalah dan anda sepatutnya dapat menyelesaikan masalah dan menyelesaikannya. Saya terpaksa menyelesaikan masalah berkali-kali sebelum saya dapat menyiapkan projek ini.

Mari mulakan

Membekalkan apl dengan binaan docker berbilang peringkat

Untuk apl web tersedia pada semua mesin, kami perlu memasukkannya ke dalam bekas dan apabila kontena adalah perkataan yang terbaik daripada buruh pelabuhan.
Saya mencipta fail Docker untuk menjalankan apl tetapi saya telah menggunakan format berbilang peringkat

Mengapa binaan berbilang peringkat?

Alasannya mudah jika saya mencipta imej dalam satu peringkat ia akan menggunakan lebih banyak ruang pada mesin manakala dengan menggunakan binaan berbilang peringkat kami mengoptimumkan saiz akhir imej dengan memisahkan persekitaran binaan dan masa jalan serta mengurangkan serangan permukaan imej kami untuk keselamatan yang lebih baik

Begini cara anda boleh melakukannya

  1. Buat fail docker
  2. Kompilasi aplikasi dalam peringkat binaan
  3. Salin binari yang disusun kepada imej asas yang minimum
  4. Bina imej dan tolaknya ke dockerhub supaya imej boleh digunakan oleh Github Actions dalam CI
# Start with a base image
FROM golang:1.22 as base
WORKDIR /app
COPY go.mod ./
RUN go mod download
COPY . .
RUN go build -o main .

#######################################################
# Reduce the image size using multi-stage builds
# We will use a distroless image to run the application
FROM gcr.io/distroless/base

# Copy the binary from the previous stage
COPY --from=base /app/main .

# Copy the static files from the previous stage
COPY --from=base /app/static ./static

# Expose the port on which the application will run
EXPOSE 8080

# Command to run the application
CMD ["./main"]
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Sekarang kita mempunyai fail docker, mari kita bina dan gunakannya ke dockerhub

docker build -t pankaj892/webapp:v1 .

Kami cuba menyemak sama ada apl berfungsi seperti yang diharapkan pada mesin tempatan
larian buruh pelabuhan -p 8080:8080 pankaj892-webapp:v1

Mari tolak ke dockerhub
docker push pankaj892/webapp:v1 .

Penciptaan kelompok Kubernetes

Anda boleh membuat kluster secara tempatan menggunakan mininkube/kind atau menggunakan mana-mana penyelesaian terurus di awan. Saya akan menggunakan Elastic Kubernetes Service(EKS) daripada AWS.

Anda boleh melancarkan kluster dalam EKS menggunakan konsol atau daripada baris arahan. Saya akan menggunakan baris arahan

eksctl create cluster--instance-selector-vcpus=2 --instance-selector-memory=4 --name <name-of-cluster> --region <region-code> 
Salin selepas log masuk
Salin selepas log masuk

Ini hanya akan memilih jenis mesin untuk kumpulan nod yang mempunyai 2 vCPU dan memori 4gb

Penciptaan dan konfigurasi carta helm

Kami boleh menggunakan semua sumber satu demi satu tetapi sukar untuk menguruskannya kerana ia berskala di sinilah Helm hadir dan bertindak sebagai pengurus pakej untuk menguruskan semua sumber kami dengan menggunakan carta

Buat carta helm

# Start with a base image
FROM golang:1.22 as base
WORKDIR /app
COPY go.mod ./
RUN go mod download
COPY . .
RUN go build -o main .

#######################################################
# Reduce the image size using multi-stage builds
# We will use a distroless image to run the application
FROM gcr.io/distroless/base

# Copy the binary from the previous stage
COPY --from=base /app/main .

# Copy the static files from the previous stage
COPY --from=base /app/static ./static

# Expose the port on which the application will run
EXPOSE 8080

# Command to run the application
CMD ["./main"]
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Helm akan membuat fail untuk kegunaan kami tetapi kami tidak memerlukan kebanyakan fail untuk projek kami.

Buat fail berikut dan tambahkannya dalam direktori pimpinan

Pengerahan

eksctl create cluster--instance-selector-vcpus=2 --instance-selector-memory=4 --name <name-of-cluster> --region <region-code> 
Salin selepas log masuk
Salin selepas log masuk

Perkhidmatan

helm create web-app
Salin selepas log masuk

Masuk

# This is a sample deployment manifest file for a simple web application.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
  labels:
    app: web-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
      - name: web-app
        image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
        ports:
        - containerPort: 8080
Salin selepas log masuk

Kemas kini fail nilai kepada ini

# Service for the application
apiVersion: v1
kind: Service
metadata:
  name: web-app
  labels:
    app: web-app
spec:
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
  selector:
    app: web-app
  type: ClusterIP
Salin selepas log masuk

Bahagian helm selesai sekarang mari kita teruskan untuk menggunakan CI kami

Integrasi Berterusan (CI) dengan Tindakan Github

Tindakan Github membolehkan kami mengautomasikan proses binaan apl kami berdasarkan beberapa acara dalam repo kami seperti tolak, tarik.

Mari buat fail saluran paip kami
Fail aliran kerja disimpan dalam (.github/workflows/cicd.yml)

# Ingress resource for the application
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-app
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: web-app.local
    http:
      paths: 
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-app
            port:
              number: 80
Salin selepas log masuk

Fail aliran kerja ini mula-mula membina imej kami daripada fail docker, kemudian menolaknya ke dockerhub dan kemudian mengemas kini teg imej dalam fail charts.yaml kami.

Menyediakan ArgoCD untuk Penghantaran Berterusan

Kami akan menggunakan argocd untuk saluran paip Cd kami kerana argocd akan dapat mengambil perubahan daripada repo git kami dan mengemas kininya dalam apl.

Mari pasang argocd pada kluster kami

kubectl mencipta ruang nama argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

Untuk mengakses pelayan argocd kita perlu menukar perkhidmatan kepada jenis loadbalancer

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'

Untuk tetingkap ini akan menjadi
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'

Jika ia tidak berfungsi cuma edit perkhidmatan melalui kubectl dan tukar jenis kepada LoadBalancer ia sepatutnya berfungsi

Sekarang dapatkan ip perkhidmatan

kubectl dapatkan svc argocd-server -n argocd

Kami mendapat ip tetapi kami memerlukan kata laluan untuk log masuk ke argocd

kubectl dapatkan rahsia argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 --nyahkod

Arahan ini akan mendapatkan kata laluan dan menyahkod kata laluan kerana kata laluan dikodkan dalam format base64

Selepas log masuk, klik pada Projek Baharu > Tambahkan nama untuk projek anda > Tambahkan repo supaya argocd boleh menyegerakkan repo argocd secara automatik akan mencari fail nilai dan mengambilnya selepas itu klik pada hantar

Devops pipeline on a Golang Web App with Gitops and Kubernetes

Ingress dan Pemetaan DNS

Kami membina saluran paip kami tetapi bagaimana kami mengakses aplikasi kami, anda tidak boleh meletakkan url kluster daripada EKS setiap kali untuk mengaksesnya, kami perlu menggunakan kemasukan untuk ini

Saya menggunakan Nginx Ingress daripada AWS supaya saya boleh mengakses apl

Sebarkan kemasukan pada kluster kami

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.11.1/deploy/static/provider/aws/deploy.yaml

Kini ingress digunakan dan kami perlu menambah ip kluster kami daripada EKS dalam fail hos tempatan kami untuk linux /etc/hosts untuk windows ia berada dalam C:WindowsSystem32etchosts

# Start with a base image
FROM golang:1.22 as base
WORKDIR /app
COPY go.mod ./
RUN go mod download
COPY . .
RUN go build -o main .

#######################################################
# Reduce the image size using multi-stage builds
# We will use a distroless image to run the application
FROM gcr.io/distroless/base

# Copy the binary from the previous stage
COPY --from=base /app/main .

# Copy the static files from the previous stage
COPY --from=base /app/static ./static

# Expose the port on which the application will run
EXPOSE 8080

# Command to run the application
CMD ["./main"]
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kini kami boleh mengakses apl kami di web-app.local

Kami telah melakukan semua langkah, mari menguji apl kami

Devops pipeline on a Golang Web App with Gitops and Kubernetes

Seperti yang anda lihat, url di bahagian atas ialah perkara yang kami takrifkan dalam fail hos kami

Devops pipeline on a Golang Web App with Gitops and Kubernetes

Kami telah menjalankan apl, mari tambahkan sesuatu dan komited pada repo kami supaya argocd boleh mengambil perubahan itu dan menggunakan aplikasi

Saya membuat perubahan kepada repo saya dan ini sepatutnya mencetuskan saluran paip

Devops pipeline on a Golang Web App with Gitops and Kubernetes

Saluran paip telah bermula dan selepas siap, mari lihat sama ada argocd mengambil perubahan itu

Devops pipeline on a Golang Web App with Gitops and Kubernetes

Ya, kami melihat perubahan dalam apl kami, argocd telah mengambil perubahan dan menyegerakkan apl kami dengan perubahan terkini

Jika anda berjaya sejauh ini maka tahniah!!!

Projek ini telah menjadi pengalaman pembelajaran yang hebat untuk saya terus daripada menggunakan kubernet pada AWS kepada membuat saluran paip dan penempatan saya serta menyelesaikan masalahnya. Projek ini membantu saya membuat saluran paip devops hujung ke hujung untuk aplikasi go dan ia boleh berskala berdasarkan keperluan. Saya bercadang untuk meneroka lebih banyak lagi seperti mungkin menggunakan eks clutser menggunakan susunan terraform atau cloudformation dan memperhalusi lebih banyak lagi.

Jika anda terperangkap di suatu tempat, anda boleh merujuk repo ini

Beri tahu saya dalam ulasan bagaimana pengalaman anda membina saluran paip ini.

Atas ialah kandungan terperinci Membangunkan saluran paip pada Apl Web Golang dengan Gitops dan Kubernetes. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1667
14
Tutorial PHP
1273
29
Tutorial C#
1255
24
Golang vs Python: Prestasi dan Skala Golang vs Python: Prestasi dan Skala Apr 19, 2025 am 12:18 AM

Golang lebih baik daripada Python dari segi prestasi dan skalabiliti. 1) Ciri-ciri jenis kompilasi Golang dan model konkurensi yang cekap menjadikannya berfungsi dengan baik dalam senario konvensional yang tinggi. 2) Python, sebagai bahasa yang ditafsirkan, melaksanakan perlahan -lahan, tetapi dapat mengoptimumkan prestasi melalui alat seperti Cython.

Golang dan C: Konvensyen vs kelajuan mentah Golang dan C: Konvensyen vs kelajuan mentah Apr 21, 2025 am 12:16 AM

Golang lebih baik daripada C dalam kesesuaian, manakala C lebih baik daripada Golang dalam kelajuan mentah. 1) Golang mencapai kesesuaian yang cekap melalui goroutine dan saluran, yang sesuai untuk mengendalikan sejumlah besar tugas serentak. 2) C Melalui pengoptimuman pengkompil dan perpustakaan standard, ia menyediakan prestasi tinggi yang dekat dengan perkakasan, sesuai untuk aplikasi yang memerlukan pengoptimuman yang melampau.

Bermula dengan Go: Panduan Pemula Bermula dengan Go: Panduan Pemula Apr 26, 2025 am 12:21 AM

GoisidealforbeginnersandSuekableforcloudandnetworkservicesduetoitssimplicity, kecekapan, danconcurrencyfeatures.1) installgofromtheofficialwebsiteandverifywith'goversion'.2)

Golang vs C: Perbandingan Prestasi dan Kelajuan Golang vs C: Perbandingan Prestasi dan Kelajuan Apr 21, 2025 am 12:13 AM

Golang sesuai untuk pembangunan pesat dan senario serentak, dan C sesuai untuk senario di mana prestasi ekstrem dan kawalan peringkat rendah diperlukan. 1) Golang meningkatkan prestasi melalui pengumpulan sampah dan mekanisme konvensional, dan sesuai untuk pembangunan perkhidmatan web yang tinggi. 2) C mencapai prestasi muktamad melalui pengurusan memori manual dan pengoptimuman pengkompil, dan sesuai untuk pembangunan sistem tertanam.

Impak Golang: Kelajuan, Kecekapan, dan Kesederhanaan Impak Golang: Kelajuan, Kecekapan, dan Kesederhanaan Apr 14, 2025 am 12:11 AM

Goimpactsdevelopmentpositivielythroughspeed, efficiency, andsimplicity.1) Speed: goCompilesquicklyandrunsefficiently, idealforlargeproject.2) Kecekapan: ITSComprehensivestandardlibraryraryrarexternaldependencies, enhingdevelyficiency.

C dan Golang: Apabila prestasi sangat penting C dan Golang: Apabila prestasi sangat penting Apr 13, 2025 am 12:11 AM

C lebih sesuai untuk senario di mana kawalan langsung sumber perkakasan dan pengoptimuman prestasi tinggi diperlukan, sementara Golang lebih sesuai untuk senario di mana pembangunan pesat dan pemprosesan konkurensi tinggi diperlukan. Kelebihan 1.C terletak pada ciri-ciri perkakasan dan keupayaan pengoptimuman yang tinggi, yang sesuai untuk keperluan berprestasi tinggi seperti pembangunan permainan. 2. Kelebihan Golang terletak pada sintaks ringkas dan sokongan konvensional semulajadi, yang sesuai untuk pembangunan perkhidmatan konvensional yang tinggi.

Golang vs Python: Perbezaan dan Persamaan Utama Golang vs Python: Perbezaan dan Persamaan Utama Apr 17, 2025 am 12:15 AM

Golang dan Python masing -masing mempunyai kelebihan mereka sendiri: Golang sesuai untuk prestasi tinggi dan pengaturcaraan serentak, sementara Python sesuai untuk sains data dan pembangunan web. Golang terkenal dengan model keserasiannya dan prestasi yang cekap, sementara Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya.

Golang dan C: Perdagangan dalam prestasi Golang dan C: Perdagangan dalam prestasi Apr 17, 2025 am 12:18 AM

Perbezaan prestasi antara Golang dan C terutamanya ditunjukkan dalam pengurusan ingatan, pengoptimuman kompilasi dan kecekapan runtime. 1) Mekanisme pengumpulan sampah Golang adalah mudah tetapi boleh menjejaskan prestasi, 2) Pengurusan memori manual C dan pengoptimuman pengkompil lebih cekap dalam pengkomputeran rekursif.

See all articles