የኮምፒዩተሮች: ለ Kubernetes ተስማሚ እና ዝቅተኛ ቡድን የሚፈልጉ ሰዎች. ይህ ብዙ የኮምፒዩተሮች እና ተጨማሪ ማስታወቂያዎች ጋር ረጅም, ተስማሚ መመሪያ ነው. መድሃኒት በ GitHub Actions ውስጥ Docker ፎቶዎችን ለመፍጠር, እያንዳንዱ ፎቶን በ kommit SHA ጋር ይሸፍናል, በ GITHUB Container Registry (GHCR) በመጠቀም የተመሠረተ GITHUB_TOKEN ይጠቀሙ, እና በ Kubernetes በ Helm ጋር ይሸፍናል. የ Kubernetes መተግበሪያዎች ለቀለቀቁ updates, እና wire readiness + liveness probes ስለዚህ pods ከቀለቀቁት ድረስ የሽያጭ ማግኘት አይችልም (በእነርሱ ያካትታሉ ከሆነ መተግበሪያ ይቀላቀሉ). የፓይፕሊን ጋር ይከናወሩ --Wait --atomic እና kubectl መተግበሪያ መተግበሪያ መተግበሪያ ሁኔታ ያደርጋል ስለዚህ አንድ "አረንጓዴ" ሥራ በእርግጥ መተግበሪያ የተሻለ ነው. (Kubernetes, Helm) ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ከባድ ስሜት ቁጥጥር ገጽ ይህ ስኬት ፍሬዲንግ ተስማሚ ምን ያህል ነው አንድ ፎቶ ውስጥ የአትክልት እርስዎ የሚፈልጉት አንድ ጊዜ መጫን እና ኮንክቶፕ አንድ አነስተኛ ናሙና መተግበሪያ (Node.js) በእርግጥ መጫን ይችላሉ የ Dockerfile: multi-stage build, ያውቃል Helm chart structure & values: ምን ይሆናል እና ለምን CI: GitHub ተግባሮች workflow to build/tag/push (የኬሚካል ጋር) CD: የ Helm Upgrade, Safe Timeouts እና Rollout Checks የሽያጭ ጊዜዎችን ለመከላከል የሽያጭ ጊዜዎችን ለመከላከል እያንዳንዱ ሳምንት ይመልከቱ (እነርሱ እንዴት እንደሚቻል) ዝቅተኛ RBAC ለ CI (ወይም ከኮምፒውተር-አዳሚን) የግል ዝርዝሮች እና imagePullSecrets (GHCR አስተያየት) Rollbacks, ምን ማድረግ, እና በፍጥነት "እኔ ደስተኛ ነኝ?" A reusable repo layout & a secrets checklist ፡፡ አማራጭ: በ Kustomize ጋር ተመሳሳይ ሉህ አግኝቷል: ተጨማሪ የ CI ደረጃዎች (የሙከራዎች, ተመሳሳይነት, የዱቄት ማረጋገጫዎች) አስተያየቶች 1) ይህ ስኬት ፍሪንሰሮች ተስማሚ ነው እርስዎ አንድ ሰው ወይም አንድ አነስተኛ ቡድን ጋር ይሰራል ጊዜ, ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ከባድ መሣሪያዎች ምንም GitHub Actions + GHCR: የእርስዎን ኮድ በ GitHub ውስጥ ያተኮረዎታል; Actions የእርስዎን builds ይሰራል እና GHCR የእርስዎን ፎቶዎችን ተመሳሳይ ደህንነት መስፈርቶች ውስጥ ይጠበቃል. በተመሳሳይ workflow permissions ጋር, የተመሠረተ GITHUB_TOKEN የእርስዎን ፎቶዎችን ለመፍጠር ብቻ ነው - ምንም ተጨማሪ ቶኮችን ለመርዳት, ምንም ተጨማሪ መለያዎችን ለመቆጣጠር. (GitHub Docs) ኬብል: ደንበኞች ኬብል ኬብል ኬብል ይፈልጋሉ. ኬብል ብቻ የኮብል ኬብል ኬብል (values.yaml) እና የኮብል ኬብል ኬብል ኬብል ኬብል ኬብል ኬብል ኬብል ኬብል ነው. (Helm) Kubernetes መተግበሪያዎች: የመተግበሪያዎች የመተግበሪያዎች መደበኛ ነው — Kubernetes ከሁለቱም ከሁለቱም ከሁለቱም ከሁለቱም ከሁለቱም ከሁለቱም ከሁለቱም ከሁለቱም ከሁለቱም ከሁለቱም ከሁለቱም ከሁለቱም ከሁለቱም ከሁለቱም ከሁለቱም ይሰራል. (Kubernetes) 2) አንድ ፎቶ ውስጥ መዋቅር መጨረሻው ደረጃ ነው: ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ( ) your pipeline blocks ጓደኛዎች 3) እርስዎ የሚፈልጉት አንድ ጊዜ መጫን እና ኮንክቶፕ Kubectl በ Runner እና በኮምፒውተርዎ ላይ ይጠቀሙ. በይፋ ስሪትዎችን በኮምፒውተርዎን የሚተባበር የፈጠራ ስሪት ጋር ተስማሚ ይጠቀሙ. (Kubernetes) Helm v3 on the runner. The official installation page documents the script many people use in CI. (Helm) የእርስዎ org/repo ውስጥ GHCR ያካትታል. የእርስዎ Dockerfile ውስጥ የ OCI label org.opencontainers.image.source ያካትታል, ስለዚህ GHCR ወደ repo ወደ ፓኬጅ ራስ-ነጻ ያካትታል; ፓኬቶች ጋር GITHUB_TOKEN ይጠቀሙ: workflow permissions በ scope. (GitHub Docs) የእርስዎ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ( ) Why versions/skew matters: kubectl ጓደኛዎች 4) አንድ አነስተኛ ናሙና መተግበሪያ (Node.js) በእርግጥ መጫን ይችላሉ በ Kubernetes ሻጋታዎች ላይ በቀጥታ ይሸፍናል ሁለት Endpoints: // app/server.js import http from 'node:http'; const port = process.env.PORT || 3000; let ready = false; // Simulate warm-up work: DB connection, JIT, caches... setTimeout(() => (ready = true), 3000); const server = http.createServer((req, res) => { if (req.url === '/livez') return res.end('ok'); // liveness probe if (req.url === '/healthz') return res.end(ready ? 'ok' : 'starting'); // readiness probe res.writeHead(200, { 'content-type': 'text/plain' }); res.end('hello'); }); server.listen(port, () => console.log(`listening on ${port}`)); አነስተኛ እርስዎ ፈጣን ፈተናዎችን ማግኘት ይችላሉ: package.json { "name": "demo-app", "type": "module", "scripts": { "start": "node app/server.js", "test": "node -e \"const http=require('http');http.get('http://127.0.0.1:3000',r=>process.exit(r.statusCode===200?0:1))\"" }, "dependencies": {} } ምንድን ነው እና : Kubernetes እነሱን የተለያዩ ይጠቀማል- የሽያጭ መለያዎች; ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ( ) /healthz /livez readiness liveness ጓደኛዎች 5) Dockerfile: multi-stage Build, ያውቃል የኮምፒውተር መሣሪያዎች (ኮምፒውተርዎች, ቦርሳዎች) በ runtime ላይ አይፈልግም. እና በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" በ "Docker" ) build runtime የ Docker ማረጋገጫ # Dockerfile # -------- build stage -------- FROM node:20 AS build WORKDIR /app COPY package*.json ./ RUN npm ci --omit=dev COPY . . # leave only prod deps RUN npm prune --omit=dev # -------- runtime stage -------- FROM node:20-slim WORKDIR /app COPY --from=build /app ./ EXPOSE 3000 CMD ["node","app/server.js"] # helps GHCR link this image to your repo automatically LABEL org.opencontainers.image.source="https://github.com/your-org/your-repo" የ multi-arch images (arm64 laptop, amd64 server) የሚፈልጉ ከሆነ, እና QEMU ይህ አንድ workflow ጋር ሊሆን ይችላል. እኛም አንድ አንድ አክ ለ ፍጥነት ይቀላቀሉ. ( ) Buildx የ Docker ማረጋገጫ 6) Helm chart structure & values: ምን ይሆናል እና ለምን የ Helm ግራፊዎች የተወሰነ ቅርጸት ጋር ፎቶዎች ናቸው; መደበኛዎች በ የሙዚቃ መለያዎች በይፋ እያንዳንዱ መሳሪያዎን በመስመር ላይ መጠቀም ይችላሉ በ Inline አግኙን ( ) values.yaml templates/ --values path.yaml --set key=value ኬብል chart/Chart.yaml apiVersion: v2 name: app description: Minimal demo app type: application version: 0.1.0 # chart version appVersion: "0.1.0" # your app version (for humans; not enforced) (የእርስዎን መግቢያ ላይ ያግኙን) chart/values.yaml image: repository: ghcr.io/your-org/your-repo/app tag: "CHANGE_ME" # CI will set this to the commit SHA pullPolicy: IfNotPresent service: type: ClusterIP port: 80 targetPort: 3000 replicaCount: 2 resources: requests: { cpu: 100m, memory: 128Mi } limits: { cpu: 500m, memory: 256Mi } # optional if using private images # imagePullSecrets: # - name: ghcr-pull (የተግበሪያዎች + መተግበሪያዎች) chart/templates/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "app.fullname" . }} labels: app.kubernetes.io/name: {{ include "app.name" . }} spec: replicas: {{ .Values.replicaCount }} strategy: { type: RollingUpdate } selector: matchLabels: app.kubernetes.io/name: {{ include "app.name" . }} template: metadata: labels: app.kubernetes.io/name: {{ include "app.name" . }} spec: {{- if .Values.imagePullSecrets }} imagePullSecrets: {{- range .Values.imagePullSecrets }} - name: {{ .name }} {{- end }} {{- end }} containers: - name: app image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} ports: - containerPort: {{ .Values.service.targetPort }} readinessProbe: httpGet: { path: /healthz, port: {{ .Values.service.targetPort }} } initialDelaySeconds: 5 periodSeconds: 5 livenessProbe: httpGet: { path: /livez, port: {{ .Values.service.targetPort }} } initialDelaySeconds: 15 periodSeconds: 10 chart/templates/service.yaml apiVersion: v1 kind: Service metadata: name: {{ include "app.fullname" . }} spec: type: {{ .Values.service.type }} selector: app.kubernetes.io/name: {{ include "app.name" . }} ports: - port: {{ .Values.service.port }} targetPort: {{ .Values.service.targetPort }} ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ የኦሪጂናል ኮምፒዩተሮች እና የኦሪጂናል ኮምፒዩተሮች እና የኦሪጂናል ኮምፒዩተሮች እና የኦሪጂናል ኮምፒዩተሮች ( ) _helpers.tpl ኬብል 7) CI: GitHub መተግበሪያዎች ለመፍጠር, መለያ, እና አዝናኝ (በ caching ጋር) በ Docker ላይ የሚጠቀሙ የክፍያዎች ይጠቀማሉ: አግኙን እና ፎቶዎን ያግኙን ፡፡ እያንዳንዱ አግኝቷል, እያንዳንዱ አግኝቷል, እያንዳንዱ አግኝቷል. ለ አግኙን ( አግኙን ) setup-buildx login build-push commit SHA packages: write GITHUB_TOKEN በ GitHub በ GitHub Docs .github/workflows/ci.yml name: ci on: push: branches: [ "main" ] permissions: contents: read packages: write # allow pushing to GHCR (least privilege) jobs: build-and-push: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 # optional: speed up local tests - uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - run: npm ci - run: npm test - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to GHCR uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push image uses: docker/build-push-action@v6 with: context: . push: true tags: ghcr.io/${{ github.repository }}/app:${{ github.sha }} cache-from: type=gha cache-to: type=gha,mode=max አንዳንድ gotchas እዚህ: workflow permissions must allow writing packages, or GHCR will reject pushes. you can set defaults in repo settings and still restrict per workflow/job. (GitHub Docs) በ org.opencontainers.image.source ጋር ምስሎች መታወቂያ በመጠቀም GHCR ወደ repo UI ወደ ፓኬጅን ለመገናኘት ይረዳል. Buildx በ Actions ውስጥ ፎቶዎችን ለመፍጠር የተመሠረተ መንገድ ነው, በ Docker's CI guide ውስጥ የተመሠረተ caching እና multi-arch ድጋፍ ጋር. Kubernetes በጽሑፎችን በጽሑፎችን በጽሑፎችን ይጠቀማል. Mutable መለያዎች ምን ይሰራል ያውቃሉ እና የፕላስቲክ ቅርጸት መጠበቅ ይችላሉ. የ SHA (Immutable Tag) ወይም አንድ መለያ ይጠቀሙ (አንድ (አንድ ሰው ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ነው) ) Why SHA tags instead of :latest :latest digest image@sha256:... ጓደኛዎች 8) CD: የ Helm Upgrade, Safe Timeouts እና Relout Checks ቀጥተኛ በኋላ ተስማሚ ግምገማዎች. የመጀመሪያው ጊዜ እና የመጀመሪያው ጊዜ መተግበሪያዎች ይጠቀሙ. (እነዚህ መሣሪያዎች መፍጠር ድረስ) (እናንተም በእርግጥ ይሆናል) እና (የተግበሪያ መለያዎች) ከዚያም, እንደ ተጨማሪ ደህንነት መስመር, ይጫኑ የፕላስቲክ መኖሪያ ቤት ውስጥ የፕላስቲክ መኖሪያ ቤት ይሰራል. ( አግኙን ) helm upgrade --install --wait --timeout --atomic kubectl rollout status ኬብል ጓደኛዎች deploy: needs: build-and-push runs-on: ubuntu-latest environment: production steps: - uses: actions/checkout@v4 - name: Install kubectl (official) run: | curl -LO "https://dl.k8s.io/release/$(curl -Ls https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl && sudo mv kubectl /usr/local/bin/ - name: Install Helm run: curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash - name: Configure kubeconfig env: { KUBECONFIG_DATA: ${{ secrets.KUBECONFIG_DATA }} } run: | mkdir -p $HOME/.kube echo "$KUBECONFIG_DATA" | base64 -d > $HOME/.kube/config - name: Helm upgrade (create or update) run: | helm upgrade --install app ./chart \ --namespace prod --create-namespace \ --set image.tag=${{ github.sha }} \ --wait --timeout=10m --atomic - name: Rollout status (extra verification) run: kubectl rollout status deploy/app -n prod --timeout=180s እና የ Helms የፕላስቲክ ደረጃ ስኬታማነት / ስኬታማነት ያደርጋል. እያንዳንዱ ደረጃ ላይ ልክ ማተም እና እያንዳንዱ ነገር ከባድ ጊዜ ፈጣን, ቀላል መልዕክት ይሰጣል. ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ( አግኙን ) Why both --wait kubectl rollout status --wait kubectl rollout status --atomic ኬብል ጓደኛዎች 9) የጤና ሻጋታዎች ከባድ ሻጋታ ሻጋታ ሻጋታዎች እርስዎ የተሻለ ሮለር አቅርቦት ሊሆን ይችላል እና በተጨማሪም ስህተቶች ይሰጣሉ, እርስዎ መተግበሪያው የሽያጭ መውሰድ በፊት ሊሆን ይችላል. መከላከያ: የእርስዎ Pod "የመቀላቀቱ" ድረስ Service endpoints መግቢያ ይጠቀማሉ. የፕላስቲክ መተግበሪያዎች እና የፕላስቲክ መተግበሪያዎች (የፕላስቲክ መተግበሪያዎች እና የፕላስቲክ መተግበሪያዎች መተግበሪያዎች መተግበሪያዎች መተግበሪያዎች እና የፕላስቲክ መተግበሪያዎች መተግበሪያዎች መተግበሪያዎች መተግበሪያዎች መተግበሪያዎች) ) readiness probes Liveness probes ጓደኛዎች የ Tuning መመሪያዎች: የእርስዎ መተግበሪያው 20s ያስፈልገዋል ከሆነ, በመጀመሪያ DelaySeconds በ ተስማሚ ሁኔታ ላይ መተግበሪያ ይጫኑ. የእርስዎ መተግበሪያ አንዳንድ ጊዜ (እን.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤም.ኤ የእርስዎ መተግበሪያው ለመጀመር ቀላል ከሆነ, ለመጀመር መጀመር መጨረሻው ድረስ ይሰጣሉ. (Kubernetes) 10) እያንዳንዱ ሳምንታት ውስጥ የሚከተሉትን ትዕዛዞች (እነርሱ እንዴት እንደሚቻል) 10.1 የመጓጓዣ :latest ምንድን ነው: ተመሳሳይ ትዕዛዞች በጊዜው ወደ የተለያዩ ቢት ይመጠራሉ; የፕላስቲክ ኬይዝ እና ፖሊሲዎች አታማሚዎች በእርግጥ አንድ አታማሚ አዲስ ፎቶን አታማሚ አይደለም. ፎቶዎች በ commit SHA ወይም digests (@sha256:...). Kubernetes በ digest ቅርጸት ያቀርባል; ይህ ሁልጊዜ ትክክለኛ ቅርጸት ያቀርባል. የ 공식 ቅርጸት ዶኮች Kubernetes ፎቶ ቅርጸት, መለያዎች, እና digests እንዴት ያቀርባል. (Kubernetes) 10.2 ሩሌት ለመጠበቅ አይችልም የፓይፕሊን በ "አረንጓዴ" መጨረሻ ይሆናል, ነገር ግን ተጠቃሚዎች በ 30-60 ሰከንዶች ውስጥ ስህተት ይመልከቱ, ምክንያቱም የፕላስቲንግ አሁን ተለዋዋጭ አይደለም. የክፍያ: ወደ Helm --wait --timeout (እና አማራጭ --atomic) ያካትታል, እና kubectl መተግበሪያ ሁኔታ ይሰራል, ስለዚህ ፍለጋዎች በክፍያዎች ውስጥ ይታወቃሉ. 10.3 ከከፍተኛ-የመደብ CI (cluster-admin) ምን ከባድ ነው: አንድ የክፍያ የክፍያ ሙሉ የክፍያ ተመሳሳይ ነው. የክፍያ: አንድ ServiceAccount + Role + RoleBinding ለመፍጠር, የእርስዎ ካርታዎን የሚፈልጉትን ስጦታዎች እና መሳሪያዎች ብቻ ጋር, የ target name space ጋር. (Kubernetes) 11) ዝቅተኛ RBAC ለ CI (ኮፒ / ፓስቲ) # rbac/deployer.yaml apiVersion: v1 kind: ServiceAccount metadata: name: helm-deployer namespace: prod --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: helm-deployer namespace: prod rules: - apiGroups: ["apps"] resources: ["deployments","replicasets"] verbs: ["get","list","watch","create","update","patch"] - apiGroups: [""] resources: ["services","configmaps","secrets"] verbs: ["get","list","watch","create","update","patch"] - apiGroups: ["networking.k8s.io"] resources: ["ingresses"] verbs: ["get","list","watch","create","update","patch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: helm-deployer namespace: prod subjects: - kind: ServiceAccount name: helm-deployer namespace: prod roleRef: kind: Role name: helm-deployer apiGroup: rbac.authorization.k8s.io ይህ የሚከተለው የ SA ብቻ የእርስዎ የካርታ መቆጣጠሪያዎች የኔፕሬስ እና የሽያጭ አይነት መጠቀም ይችላሉ. አንድ ቶኬን በሽያጭ ከሆነ, የሽያጭ በእርስዎ የክፍል / የሽያጭ አጠቃቀም ላይ ያካትታል. የ RBAC በ Kubernetes ውስጥ የተመሠረተ የማረጋገጫ ሞዴል ነው. ( ) least privilege prod ጓደኛዎች 12) የግል መለያዎች & (የእንዴታዎች) ፎቶዎች ፎቶዎች የ GHCR አጠቃላይ ጥቅሞች: እያንዳንዱ ሰው በይነገጽ ሊሆን ይችላል; ምንም ደህንነት ያስፈልጋል. የግል GHCR ፓኬቶች: በ Docker ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ ደስተኛ አንድ አስደሳች መፍጠር እና ውስጥ ይጠቀሙ : prod kubectl create secret docker-registry ghcr-pull \ --docker-server=ghcr.io \ --docker-username=YOUR_GITHUB_USERNAME \ --docker-password=YOUR_GHCR_TOKEN_OR_PAT \ --docker-email=you@example.com \ -n prod ከዚያም ውስጥ ለ prod: values.yaml imagePullSecrets: - name: ghcr-pull የኦሪጂናል ኮርፖሬሽኖች እና የኦሪጂናል ኮርፖሬሽኖች የኦሪጂናል ኮርፖሬሽኖች ( ) ጓደኛዎች 13) Rollbacks, ምን ማድረግ ነው, እና ፈጣን "እኔ ሕክምና ነኝ?" ሁለት ጫማዎች እርስዎ ለመረዳት ይችላሉ: የ Helm Release History → የ Helm History / Rollback. መተግበሪያ ታሪክ → kubectl rollout undo/status. መደበኛ ትዕዛዞች: # See release history managed by Helm helm history app -n prod # Roll back to the previous release helm rollback app 1 -n prod # Verify the Deployment converges kubectl rollout status deploy/app -n prod --timeout=180s የ Helms አሁን መተግበሪያው መተግበሪያው መተግበሪያው መተግበሪያው መተግበሪያው መተግበሪያው መተግበሪያው መተግበሪያው መተግበሪያው መተግበሪያው መተግበሪያው መተግበሪያው መተግበሪያው ነው. የፕላስቲክ መሣሪያዎች እና የፕላስቲክ መሣሪያዎች በፕላስቲክ መሣሪያዎች ውስጥ ይጠቀማሉ. ( አግኙን ) --atomic kubectl rollout status ኬብል ጓደኛዎች 14) የ Repo Layout & a Secrets Checklist ይጠቀማል repo-root/ app/ # your code Dockerfile chart/ Chart.yaml values.yaml values-staging.yaml values-prod.yaml templates/ deployment.yaml service.yaml _helpers.tpl rbac/ deployer.yaml .github/workflows/ci.yml Secrets (GitHub → Settings → Secrets and variables → Actions): KUBECONFIG_DATA – base64 kubeconfig for the helm-deployer ServiceAccount ለ. GITHUB_TOKEN – Auto-injected; workflow permissions set: packets: write to push to GHCR (repo/org defaults ወይም YAML መጠቀም). (GitHub Docs) 15) አማራጭ: ጋር ተመሳሳይ ሉህ ተስማሚ ተስማሚ የሙዚቃ ጫማዎችን ከባድዎን ይፈልጋሉ? የተመሰረተ ነው የእርስዎ የፓይፕሊን ይሆናል: build → push → አማርኛ ይህ አንድ-የሽያጭ ክፍያዎች እና ትንሽ ብጁ ለማግኘት በጣም ጥሩ ነው; የ Helm ከባድነት ፍላጎት ወይም ደንበኞች ከባድ ቅርጸት ይጠቀማሉ ጊዜ ከባድ ይጠቀማል. ( ) Kustomize kubectl kubectl apply -k overlays/prod kubectl rollout status ጓደኛዎች Quick sketch: kustomize/ base/ deployment.yaml service.yaml kustomization.yaml overlays/ prod/ kustomization.yaml # patches image tag to $GIT_SHA 16) አግኝተዋል: extra CI ደረጃዎች (ሙከራዎች, concurrency, smoke checks) (በ 1 መስፈርቶች ለ port-forward): A tiny smoke check after deploy - name: Port-forward and smoke test run: | kubectl -n prod port-forward svc/app 8080:80 & PF_PID=$! sleep 3 curl -fsS http://127.0.0.1:8080/healthz | grep -q "ok" kill $PF_PID Digest pinning (even stricter than tags): # Check the pushed image's digest docker buildx imagetools inspect ghcr.io/${OWNER}/${REPO}/app:${GITHUB_SHA} # Then set in values-prod.yaml: # image: # repository: ghcr.io/${OWNER}/${REPO}/app # tag: "" # leave empty when using a digest # digest: "sha256:..." እርስዎ የኮምፒውተር ፎቶዎን እና የኮምፒውተር ፎቶዎን ለመፍጠር ይፈልጋሉ.If you want to template digest use into Helm, adjust your image stanza and template: # values.yaml (allow either tag OR digest) image: repository: ghcr.io/your-org/your-repo/app tag: "CHANGE_ME" digest: "" # templates/deployment.yaml (image reference) image: "{{ .Values.image.repository }}{{- if .Values.image.digest -}}@{{ .Values.image.digest }}{{- else -}}:{{ .Values.image.tag }}{{- end }}" Kubernetes ያውቃል ከባድ ጓደኛ ነው, ይህ በጣም ቀላል መንገድ ነው. አንተ የተገነባው ነገር. ( ) @sha256: ትክክለኛ ጓደኛዎች አግኙን ፎቶ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ከባድ ) Multi-arch builds (if you need arm64): platforms: linux/amd64,linux/arm64 build-push-action የ Docker ማረጋገጫ 17) አስተያየቶች Kubernetes ልውውውጥ (የተቀላቀሉ update behavior & concepts). (Kubernetes) Rolling updates overview (tutorial). (Kubernetes) kubectl rollout status (command reference). (Kubernetes) Probes (የተቀላቀሉ update behavior & concepts). (Kubernetes) images: tags, digests, and imagePullSecrets. (Kubernetes) RBAC authorization (official). (Kubernetes) Install kubectl and version skew note. (Kubernetes) ኬብል ኬብል ኬብል ኬብል ኬብል ኬብል ኬብል ኬብል ኬብል ኬብል ኬብል ኬብል ኬብል ኬብል ኬብል ኬብል GitHub Actions & GHCR Publishing Docker images with Actions. (GitHub Docs) በ GITHUB_TOKEN ይጠቀማል. (GitHub Docs) በ container register (GHCR) እና OCI labels ጋር ይሰራል. (GitHub Docs) Docker የ GitHub Actions: setup-buildx, login, build-push. (GitHub) ለ GitHub Actions Docker's CI guide. (Docker Documentation) የ Docker Multi-stage builds (why/how), ምርጥ ሂደቶች, multi-platform (Docker Documentation) ግምገማዎች ይህ መንገድ አንድ ደንበኛ እንዲህ ይላል: እሱም አንድ አገልግሎቱ ከ ብዙዎች ላይ ይሸፍናል, እና እሱም እያንዳንዱ ክፍሎች ከፕሮፕላስቲክ ሰዎች ተስማሚ ነው: “እኛ በዚህ ሳምንት አስተማማኝ መተግበሪያዎችን ይፈልጋሉ, ምንም የፕላስቲክ መገንባት አይደለም.” አንድ ካርታ, አንድ workflow, አንድ መለያ. የ SHA መለያዎች (SHA መለያዎች ወይም digests), እውነተኛ መተግበሪያ ሕክምና ያካትታሉ የኮምፒውተርዎች, እና የመተግበሪያዎች ያካትታል. መተግበሪያዎን መተግበሪያዎን መተግበሪያዎን መተግበሪያዎን መተግበሪያዎን መተግበሪያዎን መተግበሪያዎን መተግበሪያዎን መተግበሪያዎን መተግበሪያዎን መተግበሪያዎን አይችልም. ያግኙን እርስዎ ይህን ጽሑፍ ይደሰቱ እና የድር ልማት ላይ ተጨማሪ ማወቅ የሚፈልጉ ከሆነ, የተለያዩ የፕላስቲክ ላይ እኔን ያነጋግሩ: አግኝቷል ጓደኛ.com በ Hashnode.com በ Twitter.com በ Instagram.com የ V1 ካርታ የእርስዎን ግምገማዎች እና ጥያቄዎች ሁልጊዜ ተስማሚ ናቸው. ያግኙ, coding, እና አስደናቂ የድር መተግበሪያዎችን ለመፍጠር.