በኩበርኔትስ ውስጥ ማሰማራትን ለመገንባት እና በራስ-ሰር ለመስራት አዳዲስ መሳሪያዎችን መሞከር

በኩበርኔትስ ውስጥ ማሰማራትን ለመገንባት እና በራስ-ሰር ለመስራት አዳዲስ መሳሪያዎችን መሞከር

ሀሎ! Docker ምስሎችን ለመገንባት እና ወደ ኩበርኔትስ ለማሰማራት ብዙ አሪፍ አውቶሜሽን መሳሪያዎች በቅርቡ ተለቀዋል። በዚህ ረገድ, ከ Gitlab ጋር ለመጫወት ወሰንኩኝ, አቅሙን እንዴት እንደሚያጠና እና, በእርግጥ, የቧንቧ መስመር ማዘጋጀት.

ይህ ጣቢያ ተመስጦ ነበር። kubernetes.ioከ የሚመነጨው የምንጭ ኮዶች በራስ-ሰር፣ እና ለእያንዳንዱ የተላከ የመጎተት ጥያቄ፣ ሮቦቱ በራስ-ሰር የጣቢያውን ቅድመ እይታ ከለውጦቹ ጋር ያመነጫል እና የእይታ ማገናኛን ይሰጣል።

ተመሳሳይ ሂደትን ከባዶ ለመገንባት ሞከርኩ ፣ ግን ሙሉ በሙሉ በ Gitlab CI እና መተግበሪያዎችን ወደ ኩበርኔትስ ለማሰማራት በተጠቀምኩባቸው ነፃ መሳሪያዎች ላይ ተገንብቷል። ዛሬ በመጨረሻ ስለእነሱ የበለጠ እነግርዎታለሁ።

ጽሑፉ እንደነዚህ ያሉትን መሳሪያዎች ይሸፍናል-
ሁጎ, qbec, ካኒኮ, git-crypt и GitLab CI ተለዋዋጭ አካባቢዎችን ከመፍጠር ጋር.

ይዘት

  1. ከሁጎ ጋር መተዋወቅ
  2. Dockerfile በማዘጋጀት ላይ
  3. ካኒኮ መተዋወቅ
  4. የqbec መግቢያ
  5. Gitlab-ሯጭን ከ Kubernetes-executor ጋር በመሞከር ላይ
  6. የ Helm ገበታዎችን ከqbec ጋር ያሰማሩ
  7. የጂት-ክሪፕት መግቢያ
  8. የመሳሪያ ሳጥን ምስል ይፍጠሩ
  9. የእኛ የመጀመሪያ ቧንቧ መስመር እና ምስሎችን በመለያዎች መሰብሰብ
  10. አውቶማቲክ ማሰማራት
  11. ወደ ጌታ በሚገፋበት ጊዜ ቅርሶች እና ስብሰባዎች
  12. ተለዋዋጭ አካባቢዎች
  13. መተግበሪያዎችን ይገምግሙ

1. ከሁጎ ጋር መተዋወቅ

እንደ ፕሮጀክታችን ምሳሌ፣ በሁጎ ላይ የተገነባ የሰነድ ማተሚያ ጣቢያ ለመፍጠር እንሞክራለን። ሁጎ የማይንቀሳቀስ ይዘት አመንጪ ነው።

የማይንቀሳቀሱ ጀነሬተሮችን ለማያውቁ ሰዎች ስለእነሱ ትንሽ ተጨማሪ እነግራችኋለሁ። ከመደበኛ ጣቢያ ሞተሮች በተለየ የውሂብ ጎታ እና አንዳንድ ዓይነት ፒኤችፒዎች ፣ በተጠቃሚው ሲጠየቁ ፣ በራሪ ላይ ገጾችን ያመነጫሉ ፣ የማይለዋወጡ ጄነሬተሮች ትንሽ በተለየ ሁኔታ ይደረደራሉ። የምንጭ ኮዱን፣ ብዙውን ጊዜ በማርክዳው ማርክ ማፕ እና ጭብጥ አብነቶች ውስጥ ያሉ የፋይሎች ስብስብ እንዲወስዱ ያስችሉዎታል፣ ከዚያም ሙሉ በሙሉ ወደተጠናቀቀ ጣቢያ ያጠናቅሯቸው።

ማለትም በውጤቱ ላይ የማውጫ መዋቅር እና የመነጩ የኤችቲኤምኤል ፋይሎች ስብስብ በቀላሉ ወደ ማንኛውም ርካሽ ማስተናገጃ መስቀል እና የስራ ቦታ ያገኛሉ።

ሁጎን በሃገር ውስጥ መጫን እና መሞከር ትችላለህ፡-

አዲሱን ጣቢያ በማስጀመር ላይ፡-

hugo new site docs.example.org

እና በተመሳሳይ ጊዜ የ git ማከማቻ:

cd docs.example.org
git init

እስካሁን ድረስ የእኛ ጣቢያ ንጹህ ነው እና አንድ ነገር በላዩ ላይ እንዲታይ በመጀመሪያ አንድ ጭብጥ ማገናኘት አለብን ፣ ጭብጥ የአብነት ስብስብ ብቻ ነው እና ጣቢያችን የሚፈጠርባቸውን ህጎች ያዘጋጃሉ።

እንደ ጭብጥ እንጠቀማለን ይወቁ, በእኔ አስተያየት, ሰነድ ላለው ጣቢያ በጣም ተስማሚ ነው.

ልዩ ትኩረት መስጠት እፈልጋለሁ በፕሮጀክታችን ማከማቻ ውስጥ የገጽታ ፋይሎችን ማስቀመጥ አያስፈልገንም ይልቁንም በቀላሉ በመጠቀም ማገናኘት እንችላለን. git ንዑስ ሞዱል:

git submodule add https://github.com/matcornic/hugo-theme-learn themes/learn

ስለዚህ ከፕሮጀክታችን ጋር በቀጥታ የሚዛመዱ ፋይሎች ብቻ በእኛ ማከማቻ ውስጥ ይሆናሉ ፣ እና የተገናኘው ጭብጥ ለአንድ የተወሰነ ማከማቻ ማገናኛ እና በእሱ ውስጥ ቃል መግባቱ ይቀራል ፣ ማለትም ፣ ሁልጊዜ ከዋናው ምንጭ መሳብ እና መፍራት የለበትም። የማይጣጣሙ ለውጦች.

አወቃቀሩን እናስተካክለው config.toml:

baseURL = "http://docs.example.org/"
languageCode = "en-us"
title = "My Docs Site"
theme = "learn"

ቀድሞውኑ በዚህ ደረጃ, መሮጥ ይችላሉ:

hugo server

እና በአድራሻው http://localhost:1313/ አዲስ የተፈጠረውን ጣቢያችንን ያረጋግጡ ፣ በማውጫው ውስጥ የተደረጉ ለውጦች ሁሉ በአሳሹ ውስጥ ያለውን ክፍት ገጽ በራስ-ሰር ያሻሽላሉ ፣ በጣም ምቹ!

የርዕስ ገጽ ለመፍጠር እንሞክር ይዘት/_index.md:

# My docs site

## Welcome to the docs!

You will be very smart :-)

አዲስ የተፈጠረ ገጽ ቅጽበታዊ ገጽ እይታ

በኩበርኔትስ ውስጥ ማሰማራትን ለመገንባት እና በራስ-ሰር ለመስራት አዳዲስ መሳሪያዎችን መሞከር

ጣቢያ ለመፍጠር፣ በቀላሉ ያሂዱ፡-

hugo

የማውጫ ይዘት የህዝብ/ እና የእርስዎ ጣቢያ ይሆናል.
አዎን, በነገራችን ላይ, ወዲያውኑ እናስገባዋለን .gitignore:

echo /public > .gitignore

ለውጦቻችንን ማድረጉን አይርሱ-

git add .
git commit -m "New site created"

2. Dockerfile በማዘጋጀት ላይ

የማጠራቀሚያችንን አወቃቀር የምንገልጽበት ጊዜ ነው። እኔ ብዙውን ጊዜ እንደዚህ ያለ ነገር እጠቀማለሁ-

.
├── deploy
│   ├── app1
│   └── app2
└── dockerfiles
    ├── image1
    └── image2

  • ዶከርፋይሎች/ - ከDockerfiles ጋር ማውጫዎችን እና የእኛን መክተቻ ምስሎችን ለመገንባት የሚያስፈልጉትን ነገሮች ሁሉ ይዟል።
  • ማሰማራት/ - መተግበሪያዎቻችንን በኩበርኔትስ ውስጥ ለማሰማራት ማውጫዎችን ይዟል

ስለዚህ, በመንገድ ላይ የመጀመሪያውን Dockerfile እንፈጥራለን dockerfiles / ድር ጣቢያ / Dockerfile

FROM alpine:3.11 as builder
ARG HUGO_VERSION=0.62.0
RUN wget -O- https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_linux-64bit.tar.gz | tar -xz -C /usr/local/bin
ADD . /src
RUN hugo -s /src

FROM alpine:3.11
RUN apk add --no-cache darkhttpd
COPY --from=builder /src/public /var/www
ENTRYPOINT [ "/usr/bin/darkhttpd" ]
CMD [ "/var/www" ]

እንደሚመለከቱት, Dockerfile ሁለት ይዟል ከ, ይህ ዕድል ይባላል ባለብዙ ደረጃ ግንባታ እና ከመጨረሻው የዶክተር ምስል አላስፈላጊ የሆኑትን ሁሉንም ነገሮች እንዲያስወግዱ ይፈቅድልዎታል.
ስለዚህ, የመጨረሻው ምስል ብቻ ይይዛል ጨለማhttpd (ቀላል ክብደት HTTP አገልጋይ) እና የህዝብ/ - በስታቲስቲክስ የመነጨው ጣቢያችን ይዘት።

ለውጦቻችንን ማድረጉን አይርሱ-

git add dockerfiles/website
git commit -m "Add Dockerfile for website"

3. ካኒኮ መተዋወቅ

እንደ ዶከር ምስሎች ገንቢ፣ ለመጠቀም ወሰንኩ። ካኒኮ, ለመስራት ዶከር ዴሞን ስለማይፈልግ እና ስብሰባው ራሱ በማንኛውም ማሽን ላይ ሊከናወን እና መሸጎጫውን በቀጥታ በመመዝገቢያ መዝገብ ውስጥ ማከማቸት ስለሚችል የተሟላ ቋሚ ማከማቻ አስፈላጊነትን ያስወግዳል።

ምስሉን ለመገንባት, መያዣውን ብቻ ያሂዱ kaniko አስፈፃሚ እና የአሁኑን የግንባታ አውድ ያስተላልፉት፣ በአገር ውስጥ፣ በዶክተር በኩል ማድረግ ይችላሉ፡-

docker run -ti --rm 
  -v $PWD:/workspace 
  -v ~/.docker/config.json:/kaniko/.docker/config.json:ro 
  gcr.io/kaniko-project/executor:v0.15.0 
  --cache 
  --dockerfile=dockerfiles/website/Dockerfile 
  --destination=registry.gitlab.com/kvaps/docs.example.org/website:v0.0.1

የት registry.gitlab.com/kvaps/docs.example.org/website - የዶክተር ምስልዎ ስም ፣ ከተገነባ በኋላ በራስ-ሰር በዶክተር መዝገብ ውስጥ ይጀምራል።

መለኪያ --መሸጎጫ በዶክተር መዝገብ ቤት ውስጥ ንብርብሮችን ለመሸጎጥ ይፈቅድልዎታል, ለተጠቀሰው ምሳሌ ይቀመጣሉ registry.gitlab.com/kvaps/docs.example.org/website/cache, ነገር ግን በመለኪያው ሌላ መንገድ መግለጽ ይችላሉ --cache-repo.

የዶክተር-መዝገብ ቤት ቅጽበታዊ ገጽ እይታ

በኩበርኔትስ ውስጥ ማሰማራትን ለመገንባት እና በራስ-ሰር ለመስራት አዳዲስ መሳሪያዎችን መሞከር

4. የqbec መግቢያ

Qbec የማመልከቻዎን መግለጫዎች በግልፅ እንዲገልጹ እና ወደ Kubernetes ለማሰማራት የሚያስችል የማሰማሪያ መሳሪያ ነው። Jsonnetን እንደ ዋና አገባብ መጠቀም የበርካታ አካባቢዎችን ልዩነቶች ለመግለጽ በጣም ቀላል ያደርገዋል፣ እና እንዲሁም የኮድ ድግግሞሽን ሙሉ በሙሉ ያስወግዳል።

ይህ በተለይ የተለያዩ መለኪያዎች አፕሊኬሽኑን ወደ ብዙ ዘለላዎች ማሰማራት በሚፈልጉበት እና በጊት ውስጥ ገላጭ በሆነ መልኩ መግለጽ በሚፈልጉበት ጊዜ ይህ እውነት ሊሆን ይችላል።

Qbec በተጨማሪም አስፈላጊውን መለኪያዎች በማለፍ የ Helm ቻርቶችን እንዲያቀርቡ ይፈቅድልዎታል እና እንደ መደበኛ መገለጫዎች በተመሳሳይ መንገድ እንዲሠሩ ይፈቅድልዎታል ፣ ይህም የተለያዩ ለውጦችን ለእነሱ የመተግበር ችሎታን ጨምሮ ፣ እና ይህ ደግሞ ChartMuseum የመጠቀምን አስፈላጊነት ያስወግዳል። ማለትም፣ ገበታዎችን ከጂት በቀጥታ ማከማቸት እና መስራት ትችላለህ።

አስቀድሜ እንደተናገርኩት ሁሉንም ማሰማራቶች በማውጫው ውስጥ እናከማቻለን ማሰማራት/:

mkdir deploy
cd deploy

የመጀመሪያውን መተግበሪያችንን እናስጀምር፡-

qbec init website
cd website

አሁን የመተግበሪያችን መዋቅር ይህንን ይመስላል።

.
├── components
├── environments
│   ├── base.libsonnet
│   └── default.libsonnet
├── params.libsonnet
└── qbec.yaml

ፋይሉን ተመልከት qbec.yaml:

apiVersion: qbec.io/v1alpha1
kind: App
metadata:
  name: website
spec:
  environments:
    default:
      defaultNamespace: docs
      server: https://kubernetes.example.org:8443
  vars: {}

እዚህ በዋነኝነት ፍላጎት አለን spec.አካባቢዎች, qbec አስቀድሞ ነባሪ አካባቢን ፈጥሯል እና የአገልጋዩን አድራሻ እና የስም ቦታ አሁን ካለን kubeconfig ወስዷል።
አሁን ሲሰራጭ ነባሪ አካባቢ፣ qbec ሁልጊዜ ወደተገለጸው የኩበርኔትስ ክላስተር እና ወደተገለጸው የስም ቦታ ብቻ ነው የሚዘረጋው፣ ማለትም፡ ለማሰማራት ከአሁን በኋላ በአውዶች እና በስም ቦታዎች መካከል መቀያየር አይኖርብዎትም።
አስፈላጊ ከሆነ ሁልጊዜ በዚህ ፋይል ውስጥ ያሉትን ቅንብሮች ማዘመን ይችላሉ።

ሁሉም አካባቢዎችዎ የተገለጹት በ qbec.yaml, እና በፋይሉ ውስጥ params.libsonnetለእነሱ መለኪያዎችን የት መውሰድ እንዳለቦት የሚናገረው.

በመቀጠል ሁለት ማውጫዎችን እናያለን፡-

  • አካላት/ ለመተግበሪያችን ሁሉም መግለጫዎች እዚህ ይቀመጣሉ ፣ እነሱ በሁለቱም በ jsonnet እና በመደበኛ የ yaml ፋይሎች ውስጥ ሊገለጹ ይችላሉ።
  • አከባቢዎች/ - እዚህ የአካባቢያችንን ሁሉንም ተለዋዋጮች (መለኪያዎች) እንገልፃለን.

በነባሪ ሁለት ፋይሎች አሉን:

  • አከባቢዎች/base.libsonnet - ለሁሉም አካባቢዎች የጋራ መለኪያዎችን ይይዛል
  • አካባቢ/default.libsonnet - ለአካባቢው እንደገና የተገለጹ መለኪያዎች ይዟል ነባሪ

እንከፍት አከባቢዎች/base.libsonnet እና ለመጀመሪያው ክፍላችን ግቤቶችን እዚያ ያክሉ።

{
  components: {
    website: {
      name: 'example-docs',
      image: 'registry.gitlab.com/kvaps/docs.example.org/website:v0.0.1',
      replicas: 1,
      containerPort: 80,
      servicePort: 80,
      nodeSelector: {},
      tolerations: [],
      ingressClass: 'nginx',
      domain: 'docs.example.org',
    },
  },
}

የመጀመሪያ ክፍላችንንም እንፍጠር ክፍሎች / ድር ጣቢያ.jsonnet:

local env = {
  name: std.extVar('qbec.io/env'),
  namespace: std.extVar('qbec.io/defaultNs'),
};
local p = import '../params.libsonnet';
local params = p.components.website;

[
  {
    apiVersion: 'apps/v1',
    kind: 'Deployment',
    metadata: {
      labels: { app: params.name },
      name: params.name,
    },
    spec: {
      replicas: params.replicas,
      selector: {
        matchLabels: {
          app: params.name,
        },
      },
      template: {
        metadata: {
          labels: { app: params.name },
        },
        spec: {
          containers: [
            {
              name: 'darkhttpd',
              image: params.image,
              ports: [
                {
                  containerPort: params.containerPort,
                },
              ],
            },
          ],
          nodeSelector: params.nodeSelector,
          tolerations: params.tolerations,
          imagePullSecrets: [{ name: 'regsecret' }],
        },
      },
    },
  },
  {
    apiVersion: 'v1',
    kind: 'Service',
    metadata: {
      labels: { app: params.name },
      name: params.name,
    },
    spec: {
      selector: {
        app: params.name,
      },
      ports: [
        {
          port: params.servicePort,
          targetPort: params.containerPort,
        },
      ],
    },
  },
  {
    apiVersion: 'extensions/v1beta1',
    kind: 'Ingress',
    metadata: {
      annotations: {
        'kubernetes.io/ingress.class': params.ingressClass,
      },
      labels: { app: params.name },
      name: params.name,
    },
    spec: {
      rules: [
        {
          host: params.domain,
          http: {
            paths: [
              {
                backend: {
                  serviceName: params.name,
                  servicePort: params.servicePort,
                },
              },
            ],
          },
        },
      ],
    },
  },
]

በዚህ ፋይል ውስጥ፣ ሶስት የኩበርኔትስ አካላትን በአንድ ጊዜ ገለፅን፣ እነዚህም፦ ማሰማራት, አገልግሎት и Ingress. ከተፈለገ ወደ ተለያዩ ክፍሎች ልንዘዋውራቸው እንችላለን, ነገር ግን በዚህ ደረጃ, አንድ ይበቃናል.

አገባብ jsonnet ከመደበኛ json ጋር በጣም ተመሳሳይ ነው፣በመርህ ደረጃ፣መደበኛ json ቀድሞውኑ የሚሰራ jsonnet ነው፣ስለዚህ በመጀመሪያ የመስመር ላይ አገልግሎቶችን ለመጠቀም ቀላል ይሆንልዎታል። yaml2json የእርስዎን የተለመደ yaml ወደ json ለመቀየር ወይም የእርስዎ ክፍሎች ምንም አይነት ተለዋዋጮች ከሌሉ በመደበኛው yaml መልክ ሊገለጹ ይችላሉ።

ጋር ሲሰሩ jsonnet ለአርታዒዎ ፕለጊን እንዲጭኑ አጥብቄ እመክራችኋለሁ

ለምሳሌ, ለቪም ፕለጊን አለ vim-jsonnetአገባብ ማድመቅን ያበራ እና በራስ-ሰር የሚሰራ jsonnet fmt በእያንዳንዱ ማስቀመጫ (jsonnet መጫን ያስፈልገዋል)።

ሁሉም ነገር ዝግጁ ነው, አሁን ማሰማራቱን መጀመር እንችላለን:

ያገኘነውን ለማየት እንሩጥ፡-

qbec show default

በውጤቱ ላይ፣ በነባሪ ክላስተር ላይ የሚተገበረውን የ yaml መግለጫዎችን ታያለህ።

በጣም ጥሩ፣ አሁን ያመልክቱ፦

qbec apply default

በውጤቱ ላይ ሁልጊዜ በክላስተርዎ ውስጥ ምን እንደሚደረግ ያያሉ፣ qbec በመተየብ ለውጦቹን እንዲቀበሉ ይጠይቅዎታል። y አላማህን ማረጋገጥ ትችላለህ።

አሁን የእኛ መተግበሪያ ተሰራጭቷል!

ለውጦች ከተደረጉ ሁል ጊዜ ማሄድ ይችላሉ፦

qbec diff default

እነዚህ ለውጦች አሁን ባለው ስምሪት ላይ እንዴት እንደሚነኩ ለማየት

ለውጦቻችንን ማድረጉን አይርሱ-

cd ../..
git add deploy/website
git commit -m "Add deploy for website"

5. Gitlab-ሯጭን በ Kubernetes-executor ይሞክሩ

እስከ ቅርብ ጊዜ ድረስ መደበኛውን ብቻ ነው የተጠቀምኩት gitlab-ሯጭ አስቀድሞ በተዘጋጀ ማሽን (LXC ኮንቴይነር) ላይ ከሼል ወይም ከዶከር-አስፈፃሚ ጋር. መጀመሪያ ላይ፣ በእኛ gitlab ውስጥ በአለምአቀፍ ደረጃ የተገለጹ ከእነዚህ ሯጮች መካከል በርካቶች ነበሩን። ለሁሉም ፕሮጀክቶች የመርከብ ምስሎችን ገንብተዋል።

ነገር ግን እንደ ልምምድ እንደሚያሳየው ይህ አማራጭ በተግባራዊነት እና በደኅንነት ረገድ በጣም ተስማሚ አይደለም. ለእያንዳንዱ ፕሮጀክት፣ እና ለእያንዳንዱ አካባቢ እንኳን የተለያዩ ሯጮች እንዲሰማሩ ማድረጉ በጣም የተሻለ እና በርዕዮተ ዓለም ትክክል ነው።

እንደ እድል ሆኖ, ይህ በጭራሽ ችግር አይደለም, ምክንያቱም አሁን እናሰማራለን gitlab-ሯጭ በቀጥታ በኩበርኔትስ የፕሮጀክታችን አካል ነው።

Gitlab gitlab-ሯጭን ወደ ኩበርኔትስ ለማሰማራት የተዘጋጀ የሄልም ቻርት ይሰጣል። ስለዚህ ማወቅ ያለብዎት ነገር ቢኖር ነው። የምዝገባ ማስመሰያ ለፕሮጀክታችን በ ቅንብሮች -> CI / ሲዲ -> ሯጮች እና ወደ መሪው ያስተላልፉ:

helm repo add gitlab https://charts.gitlab.io

helm install gitlab-runner 
  --set gitlabUrl=https://gitlab.com 
  --set runnerRegistrationToken=yga8y-jdCusVDn_t4Wxc 
  --set rbac.create=true 
  gitlab/gitlab-runner

የት

  • https://gitlab.com የ Gitlab አገልጋይህ አድራሻ ነው።
  • yga8y-jdCusVDn_t4Wxc - ለፕሮጀክትዎ የምዝገባ ማስመሰያ።
  • rbac.create=እውነት - kubernetes-executorን በመጠቀም ተግባሮቻችንን ለማከናወን ፖዶችን መፍጠር እንዲችል ሯጩ አስፈላጊውን ልዩ ልዩ መብቶችን ይሰጣል።

ሁሉም ነገር በትክክል ከተሰራ, በክፍሉ ውስጥ የተመዘገበውን ሯጭ ማየት አለብዎት ሯጮች, በፕሮጀክትዎ ቅንብሮች ውስጥ.

የታከለው ሯጭ ቅጽበታዊ ገጽ እይታ

በኩበርኔትስ ውስጥ ማሰማራትን ለመገንባት እና በራስ-ሰር ለመስራት አዳዲስ መሳሪያዎችን መሞከር

ይህን ያህል ቀላል ነው? - አዎ, በጣም ቀላል ነው! ሯጮችን በእጅ በመመዝገብ ምንም ችግር የለም ከአሁን በኋላ ሯጮች ይፈጠራሉ እና ይደመሰሳሉ።

6. የ Helm ገበታዎችን ከQBEC ጋር ያሰማሩ

ለማገናዘብ ስለወሰንን gitlab-ሯጭ የፕሮጀክታችን አካል፣ በእኛ Git ማከማቻ ውስጥ የምንገለጽበት ጊዜ አሁን ነው።

እንደ የተለየ አካል ልንገልጸው እንችላለን ድህረገፅወደፊት ግን የተለያዩ ቅጂዎችን ለማሰማራት አቅደናል። ድህረገፅ በጣም በተደጋጋሚ, በተለየ gitlab-ሯጭ, እሱም በኩበርኔትስ ክላስተር አንድ ጊዜ ብቻ የሚሰማራ. ስለዚህ ለእሱ የተለየ መተግበሪያ እናስጀምር፡-

cd deploy
qbec init gitlab-runner
cd gitlab-runner

በዚህ ጊዜ የኩበርኔትስ አካላትን በእጅ አንገልጽም ፣ ግን ዝግጁ የሆነ የ Helm ገበታ ይውሰዱ። የqbec አንዱ ጥቅሞች የ Helm ገበታዎችን በቀጥታ ከ Git ማከማቻ የመስራት ችሎታ ነው።

git submoduleን በመጠቀም እናስችለው፡-

git submodule add https://gitlab.com/gitlab-org/charts/gitlab-runner vendor/gitlab-runner

አሁን ማውጫው ሻጭ/ጂትላብ-ሯጭ የእኛን ማከማቻ ለgitlab-ሯጭ ገበታ ይዟል።

ሌሎች ማከማቻዎች በተመሳሳይ መንገድ ሊገናኙ ይችላሉ, ለምሳሌ, ሙሉውን ማከማቻ ከኦፊሴላዊ ገበታዎች ጋር https://github.com/helm/charts

ክፍሉን እንግለጽ ክፍሎች/gitlab-runner.jsonnet:

local env = {
  name: std.extVar('qbec.io/env'),
  namespace: std.extVar('qbec.io/defaultNs'),
};
local p = import '../params.libsonnet';
local params = p.components.gitlabRunner;

std.native('expandHelmTemplate')(
  '../vendor/gitlab-runner',
  params.values,
  {
    nameTemplate: params.name,
    namespace: env.namespace,
    thisFile: std.thisFile,
    verbose: true,
  }
)

የመጀመሪያው ክርክር ወደ expandHelmTemplate ወደ ገበታው መንገዱን እናልፋለን, ከዚያ params.እሴቶች, ከአካባቢው መለኪያዎች የምንወስደው, ከዚያም እቃው ይመጣል

  • ስም አብነት - የመልቀቂያ ስም
  • የስም ቦታ - የስም ቦታ ወደ ሄልም ተላልፏል
  • ይህ ፋይል - ወደ የአሁኑ ፋይል የሚወስደውን መንገድ የሚያልፍ አስፈላጊ መለኪያ
  • ግስ - ትዕዛዝ ያሳያል helm አብነት ገበታ በሚሰጡበት ጊዜ ከሁሉም ነጋሪ እሴቶች ጋር

አሁን የእኛን ክፍል በ ውስጥ ያሉትን መለኪያዎች እንግለጽ አከባቢዎች/base.libsonnet:

local secrets = import '../secrets/base.libsonnet';

{
  components: {
    gitlabRunner: {
      name: 'gitlab-runner',
      values: {
        gitlabUrl: 'https://gitlab.com/',
        rbac: {
          create: true,
        },
        runnerRegistrationToken: secrets.runnerRegistrationToken,
      },
    },
  },
}

ትኩረት ይስጡ runnerRegistrationToken ከውጫዊ ፋይል እናመጣለን ሚስጥሮች/base.libsonnet፣ እንፈጥረው፡-

{
  runnerRegistrationToken: 'yga8y-jdCusVDn_t4Wxc',
}

ሁሉም ነገር እንደሚሰራ እንፈትሽ፡-

qbec show default

ሁሉም ነገር በሥርዓት ከሆነ፣ ከዚህ ቀደም የተሰማራውን በሄልም ልቀት ልናስወግደው እንችላለን፡-

helm uninstall gitlab-runner

እና ያሰማሩት፣ ግን በqbec በኩል፡

qbec apply default

7. የ git-crypt መግቢያ

git-crypt ለማከማቻዎ ግልጽ ምስጠራን እንዲያዘጋጁ የሚያስችልዎ መሳሪያ ነው።

በአሁኑ ጊዜ የጊትላብ ሯጭ የኛ ማውጫ መዋቅር ይህን ይመስላል።

.
├── components
│   ├── gitlab-runner.jsonnet
├── environments
│   ├── base.libsonnet
│   └── default.libsonnet
├── params.libsonnet
├── qbec.yaml
├── secrets
│   └── base.libsonnet
└── vendor
    └── gitlab-runner (submodule)

ግን በጊት ውስጥ ሚስጥሮችን ማከማቸት ደህንነቱ የተጠበቀ አይደለም ፣ አይደል? ስለዚህ እነሱን በትክክል ማመስጠር አለብን።

አብዛኛውን ጊዜ ለአንድ ተለዋዋጭ ሲባል ሁልጊዜ ትርጉም አይሰጥም. ሚስጥሮችን ማስተላለፍ ይችላሉ። qbec እና በእርስዎ CI ስርዓት የአካባቢ ተለዋዋጮች በኩል።
ነገር ግን ብዙ ሚስጥሮችን ሊይዙ የሚችሉ በጣም ውስብስብ ፕሮጀክቶች መኖራቸውን ልብ ሊባል የሚገባው ነው, ሁሉንም በአካባቢያዊ ተለዋዋጮች ውስጥ ማለፍ በጣም አስቸጋሪ ይሆናል.

በተጨማሪም, በዚህ ጉዳይ ላይ, ስለ እንደዚህ አይነት ድንቅ መሳሪያ ልነግርዎ አልችልም git-crypt.

git-crypt እንዲሁም ሙሉውን የምስጢር ታሪክ እንድታስቀምጡ፣ እንዲሁም ግጭቶችን በማነፃፀር፣ በማዋሃድ እና በጂት ጉዳይ ላይ ስናደርግ እንደነበረው በተመሳሳይ መንገድ ለመፍታት የሚያስችል በመሆኑ ምቹ ነው።

ከተጫነ በኋላ የመጀመሪያው ነገር git-crypt ለማከማቻችን ቁልፎችን መፍጠር አለብን፡-

git crypt init

የፒጂፒ ቁልፍ ካልዎት፣ ወዲያውኑ ለዚህ ፕሮጀክት ተባባሪ በመሆን እራስዎን ማከል ይችላሉ።

git-crypt add-gpg-user [email protected]

በዚህ መንገድ ሁል ጊዜ የግል ቁልፍዎን ተጠቅመው ይህንን ማከማቻ መፍታት ይችላሉ።

የፒጂፒ ቁልፍ ከሌለህ እና ካልጠበቅክ በሌላ መንገድ ሄዶ የፕሮጀክት ቁልፉን ወደ ውጭ መላክ ትችላለህ፡-

git crypt export-key /path/to/keyfile

ስለዚህ ወደ ውጭ የተላከ ማንኛውም ሰው ቁልፍ ፋይል የእርስዎን ማከማቻ ዲክሪፕት ማድረግ ይችላል።

የመጀመሪያ ምስጢራችንን የምናዘጋጅበት ጊዜ ነው።
አሁንም በማውጫው ውስጥ እንዳለን ላስታውስህ አሰማር/ጂትላብ-ሯጭ/ማውጫ ያለንበት ሚስጥሮች/, በውስጡ ያሉትን ሁሉንም ፋይሎች ኢንክሪፕት እናድርግ, ለዚህም ፋይል እንፈጥራለን ሚስጥሮች / .gitattributes እንደዚህ አይነት ይዘት ያለው፡-

* filter=git-crypt diff=git-crypt
.gitattributes !filter !diff

ከይዘቱ እንደሚታየው, ሁሉም ፋይሎች ጭምብል * ያልፋል git-crypt, በስተቀር ጋር .ጊታታቶች

ይህንን በመሮጥ ማረጋገጥ እንችላለን-

git crypt status -e

በውጤቱ ላይ, ምስጠራ የነቃባቸው ሁሉም ፋይሎች በማከማቻው ውስጥ ዝርዝር እናገኛለን

ያ ነው፣ አሁን ለውጦቻችንን በደህና መፈጸም እንችላለን፡-

cd ../..
git add .
git commit -m "Add deploy for gitlab-runner"

ማከማቻውን ለማገድ የሚከተሉትን መፈጸም በቂ ነው-

git crypt lock

እና ወዲያውኑ ሁሉም የተመሰጠሩ ፋይሎች ወደ ሁለትዮሽ ነገር ይለወጣሉ, እነሱን ለማንበብ የማይቻል ይሆናል.
የማጠራቀሚያውን ምስጠራ ለመፍታት፣ ያሂዱ፡-

git crypt unlock

8. የመሳሪያ ሳጥን ምስል ይፍጠሩ

የመሳሪያ ሳጥን ምስል ፕሮጀክታችንን ለማሰማራት የምንጠቀምባቸው ሁሉም መሳሪያዎች ያሉት ምስል ነው። የተለመዱ የማሰማራት ተግባራትን ለማከናወን በgitlab ሯጭ ጥቅም ላይ ይውላል።

እዚህ ሁሉም ነገር ቀላል ነው, አዲስ እንፈጥራለን dockerfiles/የመሳሪያ ሳጥን/Dockerfile እንደዚህ አይነት ይዘት ያለው፡-

FROM alpine:3.11

RUN apk add --no-cache git git-crypt

RUN QBEC_VER=0.10.3 
 && wget -O- https://github.com/splunk/qbec/releases/download/v${QBEC_VER}/qbec-linux-amd64.tar.gz 
     | tar -C /tmp -xzf - 
 && mv /tmp/qbec /tmp/jsonnet-qbec /usr/local/bin/

RUN KUBECTL_VER=1.17.0 
 && wget -O /usr/local/bin/kubectl 
      https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/linux/amd64/kubectl 
 && chmod +x /usr/local/bin/kubectl

RUN HELM_VER=3.0.2 
 && wget -O- https://get.helm.sh/helm-v${HELM_VER}-linux-amd64.tar.gz 
     | tar -C /tmp -zxf - 
 && mv /tmp/linux-amd64/helm /usr/local/bin/helm

እንደሚመለከቱት, በዚህ ምስል ላይ የእኛን መተግበሪያ ለማሰማራት የተጠቀምንባቸውን ሁሉንም መገልገያዎችን እንጭነዋለን. ካልሆነ በስተቀር እዚህ አንፈልግም። kubectlነገር ግን የቧንቧ መስመርን በሚያዘጋጁበት ጊዜ ከእሱ ጋር መጫወት ይፈልጉ ይሆናል.

እንዲሁም ከኩበርኔትስ ጋር ለመገናኘት እና ወደ እሱ ለማሰማራት በ gitlab-runner ለተፈጠሩት ፖድዎች ሚና ማዘጋጀት አለብን።

ይህንን ለማድረግ ከgitlab-runner'om ጋር ወደ ማውጫው ይሂዱ፡

cd deploy/gitlab-runner

እና አዲስ አካል ይጨምሩ ክፍሎች / rbac.jsonnet:

local env = {
  name: std.extVar('qbec.io/env'),
  namespace: std.extVar('qbec.io/defaultNs'),
};
local p = import '../params.libsonnet';
local params = p.components.rbac;

[
  {
    apiVersion: 'v1',
    kind: 'ServiceAccount',
    metadata: {
      labels: {
        app: params.name,
      },
      name: params.name,
    },
  },
  {
    apiVersion: 'rbac.authorization.k8s.io/v1',
    kind: 'Role',
    metadata: {
      labels: {
        app: params.name,
      },
      name: params.name,
    },
    rules: [
      {
        apiGroups: [
          '*',
        ],
        resources: [
          '*',
        ],
        verbs: [
          '*',
        ],
      },
    ],
  },
  {
    apiVersion: 'rbac.authorization.k8s.io/v1',
    kind: 'RoleBinding',
    metadata: {
      labels: {
        app: params.name,
      },
      name: params.name,
    },
    roleRef: {
      apiGroup: 'rbac.authorization.k8s.io',
      kind: 'Role',
      name: params.name,
    },
    subjects: [
      {
        kind: 'ServiceAccount',
        name: params.name,
        namespace: env.namespace,
      },
    ],
  },
]

እንዲሁም አዲሶቹን መለኪያዎች በ ውስጥ እንገልፃለን አከባቢዎች/base.libsonnetአሁን ይህን ይመስላል፡-

local secrets = import '../secrets/base.libsonnet';

{
  components: {
    gitlabRunner: {
      name: 'gitlab-runner',
      values: {
        gitlabUrl: 'https://gitlab.com/',
        rbac: {
          create: true,
        },
        runnerRegistrationToken: secrets.runnerRegistrationToken,
        runners: {
          serviceAccountName: $.components.rbac.name,
          image: 'registry.gitlab.com/kvaps/docs.example.org/toolbox:v0.0.1',
        },
      },
    },
    rbac: {
      name: 'gitlab-runner-deploy',
    },
  },
}

ትኩረት ይስጡ $.components.rbac.ስም ማመሳከር ስም ለክፍለ አካል rbac

ምን እንደተለወጠ እንፈትሽ፡-

qbec diff default

እና ለውጦቻችንን በ Kubernetes ላይ ይተግብሩ፡

qbec apply default

እንዲሁም ለውጦቻችንን በ git ላይ ማድረግዎን አይርሱ፡-

cd ../..
git add dockerfiles/toolbox
git commit -m "Add Dockerfile for toolbox"
git add deploy/gitlab-runner
git commit -m "Configure gitlab-runner to use toolbox"

9. የመጀመሪያ ቧንቧችን እና ምስሎችን በመለያዎች መሰብሰብ

በፕሮጀክቱ መሰረት እንፈጥራለን .gitlab-ci.yml እንደዚህ አይነት ይዘት ያለው፡-

.build_docker_image:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:debug-v0.15.0
    entrypoint: [""]
  before_script:
    - echo "{"auths":{"$CI_REGISTRY":{"username":"$CI_REGISTRY_USER","password":"$CI_REGISTRY_PASSWORD"}}}" > /kaniko/.docker/config.json

build_toolbox:
  extends: .build_docker_image
  script:
    - /kaniko/executor --cache --context $CI_PROJECT_DIR/dockerfiles/toolbox --dockerfile $CI_PROJECT_DIR/dockerfiles/toolbox/Dockerfile --destination $CI_REGISTRY_IMAGE/toolbox:$CI_COMMIT_TAG
  only:
    refs:
      - tags

build_website:
  extends: .build_docker_image
  variables:
    GIT_SUBMODULE_STRATEGY: normal
  script:
    - /kaniko/executor --cache --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/dockerfiles/website/Dockerfile --destination $CI_REGISTRY_IMAGE/website:$CI_COMMIT_TAG
  only:
    refs:
      - tags

እየተጠቀምን መሆኑን እባክዎ ልብ ይበሉ GIT_SUBMODULE_STRATEGY፡ የተለመደ ከመፈጸሙ በፊት ንዑስ ሞጁሎችን በግልፅ ማስጀመር ለሚፈልጉባቸው ሥራዎች።

ለውጦቻችንን ማድረጉን አይርሱ-

git add .gitlab-ci.yml
git commit -m "Automate docker build"

ስሪት በደህና ልትሉት ትችላላችሁ ብዬ አስባለሁ። v0.0.1 እና መለያ ጨምር፡-

git tag v0.0.1

አዲስ ስሪት ለመልቀቅ በሚያስፈልገን ጊዜ ሁሉ መለያዎችን እንሰቅላለን። በ Docker ምስሎች ውስጥ ያሉ መለያዎች ወደ Git መለያዎች ይቀረጻሉ። እያንዳንዱ አዲስ መለያ ያለው ግፊት በዚያ መለያ የምስል ግንባታ ይጀምራል።

እንስራው git push --መለያዎችእና የመጀመሪያውን የቧንቧ መስመሮቻችንን ይመልከቱ-

የመጀመሪያው የቧንቧ መስመር ቅጽበታዊ ገጽ እይታ

በኩበርኔትስ ውስጥ ማሰማራትን ለመገንባት እና በራስ-ሰር ለመስራት አዳዲስ መሳሪያዎችን መሞከር

መለያን መሰረት ያደረጉ ግንባታዎች ዶከር ምስሎችን ለመገንባት ጥሩ ናቸው ነገር ግን መተግበሪያን ወደ ኩበርኔትስ ለማሰማራት እንዳልሆነ መጠቆም ተገቢ ነው። አዲስ መለያዎችም ለአሮጌ ቁርሾዎች ሊመደቡ ስለሚችሉ, በዚህ ሁኔታ, የቧንቧ መስመር ለእነሱ ማስጀመር ወደ አሮጌው ስሪት መዘርጋት ይመራዋል.

ይህንን ችግር ለመፍታት የዶክተር ምስሎችን መገንባት ብዙውን ጊዜ ከመለያዎች ጋር የተቆራኘ ነው, እና አፕሊኬሽኑን ወደ ቅርንጫፍ መዘርጋት. ባለቤት, የተሰበሰቡ ምስሎች ስሪቶች በሃርድ ኮድ የተቀመጡበት. በቀላል መመለሻ መመለስን ማስጀመር የሚችሉት በዚህ አጋጣሚ ነው። ባለቤት- ቅርንጫፎች.

10. አውቶማቲክ ማሰማራት

Gitlab-ሯጭ ምስጢራችንን እንዲፈታ፣ የማጠራቀሚያ ቁልፉን ወደ ውጭ መላክ እና ወደ CI አካባቢ ተለዋዋጮች ማከል አለብን።

git crypt export-key /tmp/docs-repo.key
base64 -w0 /tmp/docs-repo.key; echo

የተገኘውን ሕብረቁምፊ በ Gitlab ውስጥ እናስቀምጣለን ፣ ለዚህም ወደ ፕሮጄክታችን ቅንብሮች እንሄዳለን-
ቅንብሮች -> CI / ሲዲ -> ተለዋዋጮች

እና አዲስ ተለዋዋጭ ይፍጠሩ:

ዓይነት
ቁልፍ
ዋጋ
ጥበቃ የሚደረግለት
ጭምብል
አድማስ

File
GITCRYPT_KEY
<your string>
true (በስልጠናው ጊዜ, ይችላሉ false)
true
All environments

የተጨመረው ተለዋዋጭ ቅጽበታዊ ገጽ እይታ

በኩበርኔትስ ውስጥ ማሰማራትን ለመገንባት እና በራስ-ሰር ለመስራት አዳዲስ መሳሪያዎችን መሞከር

አሁን የእኛን እናዘምን .gitlab-ci.yml በእሱ ላይ መጨመር:

.deploy_qbec_app:
  stage: deploy
  only:
    refs:
      - master

deploy_gitlab_runner:
  extends: .deploy_qbec_app
  variables:
    GIT_SUBMODULE_STRATEGY: normal
  before_script:
    - base64 -d "$GITCRYPT_KEY" | git-crypt unlock -
  script:
    - qbec apply default --root deploy/gitlab-runner --force:k8s-context __incluster__ --wait --yes

deploy_website:
  extends: .deploy_qbec_app
  script:
    - qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes

እዚህ ለqbec አንዳንድ አዳዲስ አማራጮችን አንቅተናል፡-

  • አንዳንድ/መተግበሪያን ሩት - የአንድ የተወሰነ መተግበሪያ ማውጫን እንዲገልጹ ያስችልዎታል
  • --አስገድድ፡k8s-አውድ __incluster__ - ይህ ማሰማራት gtilab-ሯጭ በሚሠራበት ተመሳሳይ ክላስተር ውስጥ እንደሚከሰት የሚናገር አስማታዊ ተለዋዋጭ ነው። ይህ አስፈላጊ ነው፣ አለበለዚያ qbec በእርስዎ kubeconfig ውስጥ ተስማሚ የኩበርኔትስ አገልጋይ ለማግኘት ይሞክራል።
  • -ጠብቅ - qbec የሚፈጥራቸው ሀብቶች ወደ ዝግጅቱ ሁኔታ እስኪገቡ ድረስ እንዲጠብቅ ያስገድደዋል እና ከዚያ በኋላ በተሳካ የመውጫ ኮድ እስኪጠናቀቅ ድረስ።
  • -አዎ - በይነተገናኝ ቅርፊቱን ብቻ ያሰናክላል እርግጠኛ ነህ? በማሰማራት ጊዜ.

ለውጦቻችንን ማድረጉን አይርሱ-

git add .gitlab-ci.yml
git commit -m "Automate deploy"

እና በኋላ git push ማመልከቻዎቻችን እንዴት እንደተሰማሩ እንመለከታለን፡-

የሁለተኛው የቧንቧ መስመር ቅጽበታዊ ገጽ እይታ

በኩበርኔትስ ውስጥ ማሰማራትን ለመገንባት እና በራስ-ሰር ለመስራት አዳዲስ መሳሪያዎችን መሞከር

11. ወደ ጌታው በሚገፋበት ጊዜ ቅርሶች እና ስብሰባዎች

አብዛኛውን ጊዜ፣ ከላይ ያሉት እርምጃዎች ማንኛውንም ማይክሮ አገልግሎት ለመገንባት እና ለማድረስ በቂ ናቸው፣ ግን ጣቢያውን ለማዘመን በፈለግን ቁጥር መለያ ማከል አንፈልግም። ስለዚህ, የበለጠ ተለዋዋጭ በሆነ መንገድ እንሄዳለን እና በዋናው ቅርንጫፍ ውስጥ የምግብ መፍጫ ማሰማራትን እናዘጋጃለን.

ሃሳቡ ቀላል ነው: አሁን የእኛ ምስል ድህረገፅ በገፋህ ቁጥር እንደገና ይገነባል። ባለቤት, እና ከዚያ በራስ-ሰር ወደ Kubernetes ያሰራጩ።

እነዚህን ሁለት ስራዎች በእኛ ውስጥ እናዘምን .gitlab-ci.yml:

build_website:
  extends: .build_docker_image
  variables:
    GIT_SUBMODULE_STRATEGY: normal
  script:
    - mkdir -p $CI_PROJECT_DIR/artifacts
    - /kaniko/executor --cache --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/dockerfiles/website/Dockerfile --destination $CI_REGISTRY_IMAGE/website:$CI_COMMIT_REF_NAME --digest-file $CI_PROJECT_DIR/artifacts/website.digest
  artifacts:
    paths:
      - artifacts/
  only:
    refs:
      - master
      - tags

deploy_website:
  extends: .deploy_qbec_app
  script:
    - DIGEST="$(cat artifacts/website.digest)"
    - qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST"

እባክዎን ቅርንጫፍ እንደጨመርን ያስተውሉ ባለቤት к ማጣቀሻ ለሥራ የግንባታ_ድረ-ገጽ እና አሁን እንጠቀማለን $CI_COMMIT_REF_NAME በ $CI_COMMIT_TAG, ማለትም, በ Git ውስጥ ያሉትን መለያዎች እናስወግዳለን እና አሁን ምስሉን የቧንቧ መስመርዎን ያስጀመረውን የኮሚሽኑ ቅርንጫፍ ስም እንገፋዋለን. ይህ ደግሞ ከመለያዎች ጋር እንደሚሰራ ልብ ሊባል የሚገባው ነው, ይህም የጣቢያው ቅጽበተ-ፎቶዎችን በዶክ-መዝገብ ቤት ውስጥ ካለው የተወሰነ ስሪት ለማስቀመጥ ያስችለናል.

ለአዲሱ የጣቢያው ስሪት የዶከር መለያ ስም ሊቀየር በሚችልበት ጊዜ አሁንም ለ Kubernetes ለውጦችን መግለጽ አለብን ፣ አለበለዚያ መተግበሪያውን ከአዲሱ ምስል ላይ እንደገና አይዘረጋም ፣ ምክንያቱም ምንም ለውጦችን አያስተውልም ። የማሰማራት መግለጫ.

አማራጭ --vm:ext-str digest="$DIGEST" ለ qbec - ውጫዊ ተለዋዋጭ ወደ jsonnet እንዲያሳልፉ ይፈቅድልዎታል. ማመልከቻችን ከእያንዳንዱ መለቀቅ ጋር በክላስተር ውስጥ እንደገና እንዲሰራጭ እንፈልጋለን። ከተወሰነ የምስሉ እትም ጋር ማገናኘት እና ሲቀየር ማሰማራቱን መቀስቀስ ስለሚያስፈልገን አሁን ሊቀየር የሚችለውን የመለያ ስም መጠቀም አንችልም።

እዚህ፣ ካኒኮ የምስሉን መፍጨት ወደ ፋይል የማዳን ችሎታው ይረዳናል (አማራጭ --መፍጨት-ፋይል)
ከዚያ ይህንን ፋይል እናስተላልፋለን እና በሚሰማሩበት ጊዜ እናነባለን።

የእኛን መለኪያዎች እናዘምን ማሰማራት/ድረ-ገጽ/አካባቢ/base.libsonnet አሁን እንደዚህ ይመስላል

{
  components: {
    website: {
      name: 'example-docs',
      image: 'registry.gitlab.com/kvaps/docs.example.org/website@' + std.extVar('digest'),
      replicas: 1,
      containerPort: 80,
      servicePort: 80,
      nodeSelector: {},
      tolerations: [],
      ingressClass: 'nginx',
      domain: 'docs.example.org',
    },
  },
}

ተከናውኗል፣ አሁን ማንኛውም ቃል መግባት ባለቤት የዶክተር ምስል ግንባታን ይጀምራል ለ ድህረገፅ, እና ከዚያ ወደ Kubernetes ያሰማሩት.

ለውጦቻችንን ማድረጉን አይርሱ-

git add .
git commit -m "Configure dynamic build"

በኋላ ይመልከቱት። git push እንደዚህ ያለ ነገር ማየት አለብን

የቧንቧ መስመር ቅጽበታዊ ገጽ እይታ ለማስተር

በኩበርኔትስ ውስጥ ማሰማራትን ለመገንባት እና በራስ-ሰር ለመስራት አዳዲስ መሳሪያዎችን መሞከር

በመርህ ደረጃ gitlab-runnerን በእያንዳንዱ ግፊት እንደገና ማሰማራት አያስፈልገንም, በእርግጥ, ምንም ነገር በአወቃቀሩ ውስጥ ካልተቀየረ በስተቀር, ይህንን በ ውስጥ እናስተካክለው. .gitlab-ci.yml:

deploy_gitlab_runner:
  extends: .deploy_qbec_app
  variables:
    GIT_SUBMODULE_STRATEGY: normal
  before_script:
    - base64 -d "$GITCRYPT_KEY" | git-crypt unlock -
  script:
    - qbec apply default --root deploy/gitlab-runner --force:k8s-context __incluster__ --wait --yes
  only:
    changes:
      - deploy/gitlab-runner/**/*

ለውጦች ውስጥ ለውጦችን ይከታተላል አሰማር/ጂትላብ-ሯጭ/ እና ስራችንን የሚቀሰቅሰው ካሉ ብቻ ነው።

ለውጦቻችንን ማድረጉን አይርሱ-

git add .gitlab-ci.yml
git commit -m "Reduce gitlab-runner deploy"

git push, ይህ የተሻለ ነው:

የዘመነው የቧንቧ መስመር ቅጽበታዊ ገጽ እይታ

በኩበርኔትስ ውስጥ ማሰማራትን ለመገንባት እና በራስ-ሰር ለመስራት አዳዲስ መሳሪያዎችን መሞከር

12. ተለዋዋጭ አካባቢዎች

የቧንቧ መስመሮቻችንን በተለዋዋጭ አከባቢዎች ለማባዛት ጊዜው አሁን ነው።

መጀመሪያ ስራውን እናዘምነው የግንባታ_ድረ-ገጽ በእኛ .gitlab-ci.yml, እገዳውን ከእሱ ማስወገድ ብቻ, ይህም Gitlab በማንኛውም ቅርንጫፍ ላይ በማንኛውም ቃል እንዲቀሰቀስ ያስገድደዋል፡

build_website:
  extends: .build_docker_image
  variables:
    GIT_SUBMODULE_STRATEGY: normal
  script:
    - mkdir -p $CI_PROJECT_DIR/artifacts
    - /kaniko/executor --cache --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/dockerfiles/website/Dockerfile --destination $CI_REGISTRY_IMAGE/website:$CI_COMMIT_REF_NAME --digest-file $CI_PROJECT_DIR/artifacts/website.digest
  artifacts:
    paths:
      - artifacts/

ከዚያ ስራውን ያዘምኑ ድህረ ገጽ አሰማር፣ እዚያ ብሎክ ያክሉ አካባቢ:

deploy_website:
  extends: .deploy_qbec_app
  environment:
    name: prod
    url: https://docs.example.org
  script:
    - DIGEST="$(cat artifacts/website.digest)"
    - qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST"

ይህ Gitlab ስራውን ከ ጋር እንዲያዛምድ ያስችለዋል። ምርት አካባቢ እና ከእሱ ጋር ትክክለኛውን አገናኝ ያሳዩ.

አሁን ሁለት ተጨማሪ ስራዎችን እንጨምር፡-

deploy_website:
  extends: .deploy_qbec_app
  environment:
    name: prod
    url: https://docs.example.org
  script:
    - DIGEST="$(cat artifacts/website.digest)"
    - qbec apply default --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST"

deploy_review:
  extends: .deploy_qbec_app
  environment:
    name: review/$CI_COMMIT_REF_NAME
    url: http://$CI_ENVIRONMENT_SLUG.docs.example.org
    on_stop: stop_review
  script:
    - DIGEST="$(cat artifacts/website.digest)"
    - qbec apply review --root deploy/website --force:k8s-context __incluster__ --wait --yes --vm:ext-str digest="$DIGEST" --vm:ext-str subdomain="$CI_ENVIRONMENT_SLUG" --app-tag "$CI_ENVIRONMENT_SLUG"
  only:
    refs:
    - branches
  except:
    refs:
      - master

stop_review:
  extends: .deploy_qbec_app
  environment:
    name: review/$CI_COMMIT_REF_NAME
    action: stop
  stage: deploy
  before_script:
    - git clone "$CI_REPOSITORY_URL" master
    - cd master
  script:
    - qbec delete review --root deploy/website --force:k8s-context __incluster__ --yes --vm:ext-str digest="$DIGEST" --vm:ext-str subdomain="$CI_ENVIRONMENT_SLUG" --app-tag "$CI_ENVIRONMENT_SLUG"
  variables:
    GIT_STRATEGY: none
  only:
    refs:
    - branches
  except:
    refs:
      - master
  when: manual

ከማስተር በስተቀር ወደ ማንኛውም ቅርንጫፎች በመግፋት ይነሳሉ እና የጣቢያው ቅድመ እይታ ስሪት ያሰማራሉ።

ለqbec አዲስ አማራጭ እናያለን፡- --መተግበሪያ-መለያ - የተዘረጉትን የመተግበሪያ ስሪቶች መለያ እንዲሰጡ እና በዚህ መለያ ውስጥ ብቻ እንዲሰሩ ይፈቅድልዎታል ፣ በ Kubernetes ውስጥ ሀብቶችን ሲፈጥሩ እና ሲያጠፉ qbec በእነሱ ላይ ብቻ ይሰራል።
ስለዚህ, ለእያንዳንዱ ግምገማ የተለየ አካባቢ መፍጠር አንችልም, ነገር ግን በቀላሉ ተመሳሳይውን እንደገና መጠቀም.

እዚህም እንጠቀማለን qbec ግምገማ ተግብር, ከሱ ይልቅ qbec ነባሪ ይተግብሩ የአካባቢያችንን ልዩነቶች ለመግለጽ የምንሞክርበት ጊዜ ይህ ነው (ግምገማ እና ነባሪ)

ያክሉ ግምገማ አካባቢ በ ማሰማራት/ድረ-ገጽ/qbec.yaml

spec:
  environments:
    review:
      defaultNamespace: docs
      server: https://kubernetes.example.org:8443

ከዚያም ወደ ውስጥ እናውጃለን ማሰማራት/ድረ-ገጽ/params.libsonnet:

local env = std.extVar('qbec.io/env');
local paramsMap = {
  _: import './environments/base.libsonnet',
  default: import './environments/default.libsonnet',
  review: import './environments/review.libsonnet',
};

if std.objectHas(paramsMap, env) then paramsMap[env] else error 'environment ' + env + ' not defined in ' + std.thisFile

እና ለእሱ ብጁ መለኪያዎችን ይፃፉ ማሰማራት/ድረ-ገጽ/አካባቢ/ክለሳ.libsonnet:

// this file has the param overrides for the default environment
local base = import './base.libsonnet';
local slug = std.extVar('qbec.io/tag');
local subdomain = std.extVar('subdomain');

base {
  components+: {
    website+: {
      name: 'example-docs-' + slug,
      domain: subdomain + '.docs.example.org',
    },
  },
}

ሥራንም ጠለቅ ብለን እንመርምር አቁም_ግምገማቅርንጫፉ ሲወገድ የሚቀሰቅሰው እና gitlab እንዳይፈተሽበት ጥቅም ላይ ይውላል። GIT_STRATEGY፡ የለም, በኋላ እኛ ክሎናል ባለቤት- ቅርንጫፍ እና በእሱ በኩል ግምገማን ሰርዝ።
ትንሽ ግራ የሚያጋባ ነገር ግን የበለጠ ቆንጆ መንገድ አላገኘሁም።
አማራጭ አማራጭ እያንዳንዱን ግምገማ በሆቴል ስም ቦታ ላይ ማሰማራት ነው, ይህም ሁልጊዜ ሙሉ በሙሉ ሊፈርስ ይችላል.

ለውጦቻችንን ማድረጉን አይርሱ-

git add .
git commit -m "Enable automatic review"

git push, git Checkout -b ፈተና, የጂት ግፊት መነሻ ሙከራ, አረጋግጥ:

በጊትላብ ውስጥ የተፈጠሩ አካባቢዎች ቅጽበታዊ ገጽ እይታ

በኩበርኔትስ ውስጥ ማሰማራትን ለመገንባት እና በራስ-ሰር ለመስራት አዳዲስ መሳሪያዎችን መሞከር

ሁሉም ነገር እየሰራ ነው? - በጣም ጥሩ፣ የሙከራ ቅርጫፋችንን ሰርዝ፡- git Checkout ጌታ, git push አመጣጥ: ሙከራአካባቢን ለመሰረዝ የሚሰሩት ስራዎች ያለምንም ስህተት መስራታቸውን እናረጋግጣለን።

እዚህ በፕሮጀክቱ ውስጥ ያለ ማንኛውም ገንቢ ቅርንጫፎችን መፍጠር እንደሚችል ወዲያውኑ ግልጽ ማድረግ እፈልጋለሁ, እሱ መለወጥም ይችላል .gitlab-ci.yml ሚስጥራዊ ተለዋዋጮችን ፋይል ያድርጉ እና ይድረሱ።
ስለዚህ የእነሱ ጥቅም ለተጠበቁ ቅርንጫፎች ብቻ እንዲፈቀድ በጥብቅ ይመከራል, ለምሳሌ በ ባለቤት, ወይም ለእያንዳንዱ አካባቢ የተለየ የተለዋዋጮች ስብስብ ይፍጠሩ.

13 መተግበሪያዎችን ይገምግሙ

መተግበሪያዎችን ይገምግሙ ይህ በተዘረጋው አካባቢ በፍጥነት ለማየት በማጠራቀሚያው ውስጥ ላለው ለእያንዳንዱ ፋይል አንድ ቁልፍ እንዲያክሉ የሚያስችልዎ የgitlab ባህሪ ነው።

እነዚህ አዝራሮች እንዲታዩ, ፋይል መፍጠር ያስፈልግዎታል .gitlab/route-map.yml እና በውስጡ ያሉትን ሁሉንም የመንገዶች ለውጦች ይግለጹ ፣ በእኛ ሁኔታ በጣም ቀላል ይሆናል-

# Indices
- source: /content/(.+?)_index.(md|html)/ 
  public: '1'

# Pages
- source: /content/(.+?).(md|html)/ 
  public: '1/'

ለውጦቻችንን ማድረጉን አይርሱ-

git add .gitlab/
git commit -m "Enable review apps"

git push, እና ያረጋግጡ:

የግምገማ መተግበሪያ አዝራር ቅጽበታዊ ገጽ እይታ

በኩበርኔትስ ውስጥ ማሰማራትን ለመገንባት እና በራስ-ሰር ለመስራት አዳዲስ መሳሪያዎችን መሞከር

ሥራ ተጠናቀቀ!

የፕሮጀክት ምንጮች፡-

ስለ ትኩረትዎ እናመሰግናለን, እንደወደዱት ተስፋ አደርጋለሁ በኩበርኔትስ ውስጥ ማሰማራትን ለመገንባት እና በራስ-ሰር ለመስራት አዳዲስ መሳሪያዎችን መሞከር

ምንጭ: hab.com

አስተያየት ያክሉ