Kubernetes සංවර්ධනය සඳහා Skaffold සමාලෝචනය

Kubernetes සංවර්ධනය සඳහා Skaffold සමාලෝචනය

වසර එකහමාරකට පෙර, 5 මාර්තු 2018 වන දින, Google විසින් CI/CD සඳහා වන එහි විවෘත මූලාශ්‍ර ව්‍යාපෘතියේ පළමු ඇල්ෆා අනුවාදය නිකුත් කරන ලදී. Skaffold, එහි ඉලක්කය වූයේ සංවර්ධකයින්ට පරිපාලනයට වඩා සංවර්ධනය කෙරෙහි අවධානය යොමු කළ හැකි වන පරිදි "සරල සහ පුනරාවර්තනය කළ හැකි Kubernetes සංවර්ධනය" නිර්මාණය කිරීමයි. Skaffold ගැන රසවත් විය හැක්කේ කුමක් ද? පෙනෙන පරිදි, එය සංවර්ධකයාට සහ සමහර විට මෙහෙයුම් ඉංජිනේරුවරයාට පවා ප්‍රබල මෙවලමක් බවට පත් කළ හැකි උපක්‍රම කිහිපයක් එහි ඇත. ව්යාපෘතිය සහ එහි හැකියාවන් පිළිබඳව දැන හඳුනා ගනිමු.

NB: මාර්ගය වන විට, අපි දැනටමත් අපගේ පොදුවේ Skaffold ගැන කෙටියෙන් කතා කර ඇත සංවර්ධක මෙවලම් සමාලෝචනය, ඔවුන්ගේ ජීවිත Kubernetes සමඟ සම්බන්ධ වී ඇත.

න්යාය. අරමුණ සහ හැකියාවන්

එබැවින්, සාමාන්‍යයෙන් කථා කරන විට, Skaffold විසින් CI/CD චක්‍රය ස්වයංක්‍රීය කිරීමේ ගැටලුව විසඳයි (ගොඩනැගීමේ, තල්ලු කිරීමේ, යෙදවීමේ අදියරේදී), සංවර්ධක කඩිනම් ප්‍රතිපෝෂණ ඉදිරිපත් කිරීම, i.e. පසුකාලීන කේත වෙනස්වීම්වල ප්‍රති result ලය ඉක්මනින් ලබා ගැනීමේ හැකියාව - කුබර්නෙටස් පොකුරේ ක්‍රියාත්මක වන යාවත්කාලීන යෙදුමක ස්වරූපයෙන්. තවද එය විවිධ පරිපථවල (dev, stage, production...) ක්‍රියා කළ හැකිය, ඒ සඳහා Skaffold පෙරළීම සඳහා අනුරූප නල මාර්ග විස්තර කිරීමට උපකාරී වේ.

Skaffold හි මූල කේතය Go හි ලියා ඇත, විසින් බෙදා හරිනු ලැබේ නොමිලේ Apache බලපත්‍රය 2.0 (GitHub) යටතේ.

ප්රධාන කාර්යයන් සහ විශේෂාංග දෙස බලමු. පළමු ඒවාට පහත සඳහන් දෑ ඇතුළත් වේ:

  • CI/CD නල මාර්ග නිර්මාණය කිරීම සඳහා Skaffold මෙවලම් සපයයි.
  • පසුබිමේ ඇති ප්‍රභව කේතයේ වෙනස්කම් නිරීක්ෂණය කිරීමට සහ බහාලුම් රූපවලට කේත එකලස් කිරීමේ ස්වයංක්‍රීය ක්‍රියාවලියක් ක්‍රියාත්මක කිරීමට ඔබට ඉඩ සලසයි, මෙම පින්තූර ඩොකර් රෙජිස්ට්‍රියේ ප්‍රකාශනය කර ඒවා කුබර්නෙටස් පොකුරට යෙදවීම.
  • බහාලුම්වල වැඩ කරන නාමාවලිය සමඟ ගබඩාවේ ගොනු සමමුහුර්ත කරයි.
  • බහාලුම්-ව්‍යුහ-පරීක්‍ෂණය භාවිතයෙන් ස්වයංක්‍රීයව පරීක්ෂා කරයි.
  • වරායන් ඉදිරියට.
  • කන්ටේනරයක ධාවනය වන යෙදුමක ලඝු-සටහන් කියවයි.
  • Java, Node.js, Python, Go හි ලියා ඇති යෙදුම් දෝෂහරණය කිරීමට උපකාරී වේ.

දැන් විශේෂාංග ගැන:

  • Skaffold හි පොකුරු පැති සංරචක නොමැත. එනම්, මෙම උපයෝගීතාව භාවිතා කිරීමට Kubernetes තවදුරටත් වින්‍යාස කිරීම අවශ්‍ය නොවේ.
  • ඔබගේ යෙදුම සඳහා විවිධ නල මාර්ග. ඔබ සංවර්ධනය වෙමින් පවතින අතරතුර දේශීය Minikube වෙත කේතය ලබා දීමටත්, පසුව වේදිකාවට හෝ නිෂ්පාදනය කිරීමටත් ඔබට අවශ්‍යද? මෙම අරමුණ සඳහා ඇත පැතිකඩ සහ පරිශීලක වින්‍යාසයන්, පරිසර විචල්‍යයන් සහ කොඩි, එක් යෙදුමක් සඳහා විවිධ නල මාර්ග විස්තර කිරීමට ඔබට ඉඩ සලසයි.
  • CLI. YAML හි කොන්සෝල උපයෝගිතා සහ වින්‍යාස කිරීම් පමණි. අන්තර්ජාලයේ ඔබට නිර්මාණය කිරීමට උත්සාහයන් සඳහා යොමු සොයාගත හැකිය පර්යේෂණාත්මක GUIකෙසේ වෙතත්, මේ මොහොතේ මෙය බොහෝ විට අදහස් කරන්නේ යමෙකුට ඔහුව අවශ්‍ය බවයි, නමුත් ඇත්ත වශයෙන්ම නොවේ.
  • මොඩියුලරිටි. ස්කැෆෝල්ඩ් යනු හුදකලා අස්වනු නෙළන්නෙකු නොවේ, නමුත් විශේෂිත කාර්යයන් සඳහා තනි මොඩියුල හෝ පවතින විසඳුම් භාවිතා කිරීමට උත්සාහ කරයි.

දෙවැන්න පිළිබඳ නිදර්ශනය:

  • එකලස් කිරීමේ අදියරේදී ඔබට භාවිතා කළ හැකිය:
    • ඩොකර් තැනීම දේශීයව, කැනිකෝ භාවිතයෙන් පොකුරක් තුළ හෝ ගූගල් ක්ලවුඩ් බිල්ඩ් තුළ;
    • දේශීයව Bazel;
    • Jib Maven සහ Jib Gradle දේශීයව හෝ Google Cloud Build තුළ;
    • අභිරුචි ගොඩනැගීමේ ස්ක්‍රිප්ට් දේශීයව ක්‍රියාත්මක වේ. ඔබට වෙනත් (වඩා නම්‍යශීලී/සුපුරුදු/...) ගොඩනැගීමේ විසඳුමක් ක්‍රියාත්මක කිරීමට අවශ්‍ය නම්, එය ස්ක්‍රිප්ට් එකේ විස්තර කර ඇති නිසා ස්කැෆෝල්ඩ් එය දියත් කරයි (ලේඛන වලින් උදාහරණයක්) මෙය ඔබට ස්ක්‍රිප්ට් භාවිතයෙන් හැඳින්විය හැකි ඕනෑම එකතුකරන්නෙකු භාවිතා කිරීමට ඉඩ සලසයි;
  • පරීක්ෂණ අදියරේදී, දැනටමත් සඳහන් කර ඇත බහාලුම්-ව්යුහ-පරීක්ෂණය;
  • යෙදවීම සඳහා පහත සඳහන් දෑ සපයනු ලැබේ:
    • Kubectl;
    • හෙල්ම්;
    • අභිරුචිකරණය.

මේ සඳහා ස්තූතියි, Skaffold අද්විතීය ලෙස හැඳින්විය හැක CI/CD ගොඩනැගීම සඳහා රාමුව. එය භාවිතා කරන විට වැඩ ප්‍රවාහයක් මෙන්න (ව්‍යාපෘති ලේඛනයෙන්):

Kubernetes සංවර්ධනය සඳහා Skaffold සමාලෝචනය

Skaffold ගේ කාර්යය සාමාන්‍ය වශයෙන් පෙනෙන්නේ කෙසේද?

  1. උපයෝගිතා මූල කේත නාමාවලියෙහි වෙනස්කම් නිරීක්ෂණය කරයි. ගොනු වලට වෙනස් කිරීම් සිදු කරන්නේ නම්, ඒවා Kubernetes පොකුරේ යෙදුම් පොඩ් සමඟ සමමුහුර්ත වේ. හැකි නම්, රූපය නැවත එකතු නොකර. එසේ නොමැති නම්, නව රූපයක් එකලස් කර ඇත.
  2. එකලස් කරන ලද රූපය බහාලුම්-ව්‍යුහය-පරීක්‍ෂණය භාවිතයෙන් පරීක්ෂා කර, ටැග් කර ඩොකර් රෙජිස්ට්‍රිය වෙත යවනු ලැබේ.
  3. මෙයින් පසු, රූපය යොදවා ඇත - Kubernetes පොකුරේ යොදවා ඇත.
  4. විධානය භාවිතයෙන් දියත් කිරීම ආරම්භ කළේ නම් skaffold dev, පසුව අපි යෙදුමෙන් ලඝු-සටහන් ලැබීමට පටන් ගනිමු, සහ Skaffold නැවත සියලු ක්‍රියාවන් පුනරුච්චාරණය කිරීම සඳහා වෙනස්කම් බලා සිටියි.

Kubernetes සංවර්ධනය සඳහා Skaffold සමාලෝචනය
Skaffold මෙහෙයුමේ ප්රධාන අදියරවල නිදර්ශනය

පුරුදු කරන්න. Skaffold උත්සාහ කරනවා

Skaffold භාවිතය නිරූපණය කිරීම සඳහා, මම උදාහරණයක් ගන්නෙමි GitHub ව්‍යාපෘති ගබඩාව. ඒ කෙසේ වුවත්, එතන විවිධ විශේෂතා සැලකිල්ලට ගන්නා තවත් බොහෝ උදාහරණ ඔබට සොයාගත හැකිය. මම Minikube හි සියලුම ක්‍රියා දේශීයව සිදු කරමි. ස්ථාපනය සරල වන අතර මිනිත්තු කිහිපයක් ගත වන අතර, ආරම්භ කිරීමට ඔබට kubectl අවශ්‍ය වේ.

Skaffold ස්ථාපනය කරන්න:

curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64
chmod +x skaffold
sudo mv skaffold /usr/local/bin
skaffold version
v0.37.1

අවශ්‍ය උදාහරණ සමඟ ස්කැෆෝල්ඩ්ගේ ගබඩාව ක්ලෝන කරමු:

git clone https://github.com/GoogleContainerTools/skaffold
cd skaffold/examples/microservices

මම පොඩි Go යෙදුමක් අඩංගු කරල් දෙකක් සහිත උදාහරණයක් තෝරා ගත්තෙමි. එක් යෙදුමක් යනු ඉදිරිපස (leeroy-web) වන අතර එය ඉල්ලීම දෙවන යෙදුම වෙත හරවා යවයි - පසුබිම (leeroy-app). එය පෙනෙන්නේ කෙසේදැයි බලමු:

~/skaffold/examples/microservices # tree
.
├── leeroy-app
│   ├── app.go
│   ├── Dockerfile
│   └── kubernetes
│       └── deployment.yaml
├── leeroy-web
│   ├── Dockerfile
│   ├── kubernetes
│   │   └── deployment.yaml
│   └── web.go
├── README.adoc
└── skaffold.yaml
 
4 directories, 8 files

leeroy-app සහ leeroy-web මෙම කේතය දේශීයව ගොඩනැගීම සඳහා Go කේතය සහ සරල Dockerfiles අඩංගු වේ:

~/skaffold/examples/microservices # cat leeroy-app/Dockerfile
FROM golang:1.12.9-alpine3.10 as builder
COPY app.go .
RUN go build -o /app .
 
FROM alpine:3.10
CMD ["./app"]
COPY --from=builder /app .

මම යෙදුම් කේතය ලබා නොදේ - එය දැන ගැනීමට එය ප්රමාණවත් වේ leeroy-web ඉල්ලීම් පිළිගෙන ඒවා ප්‍රොක්සි කරයි leeroy-app. එබැවින් ලිපිගොනු වල Deployment.yaml සඳහා පමණක් සේවාවක් ඇත app (අභ්‍යන්තර මාර්ගගත කිරීම සඳහා). Pod port web යෙදුමට ඉක්මන් ප්‍රවේශය සඳහා අපි එය අප වෙත ඉදිරිපත් කරන්නෙමු.

පේන විදියට skaffold.yaml:

~/skaffold/examples/microservices # cat skaffold.yaml
apiVersion: skaffold/v1beta13
kind: Config
build:
  artifacts:
    - image: leeroy-web
      context: ./leeroy-web/
    - image: leeroy-app
      context: ./leeroy-app/
deploy:
  kubectl:
    manifests:
      - ./leeroy-web/kubernetes/*
      - ./leeroy-app/kubernetes/*
portForward:
  - resourceType: deployment
    resourceName: leeroy-web
    port: 8080
    localPort: 9000

ඉහත සඳහන් කළ සියලුම අදියර මෙහි විස්තර කර ඇත. මෙම වින්‍යාසයට අමතරව, ගෝලීය සැකසුම් සහිත ගොනුවක් ද ඇත - ~/.skaffold/config. එය අතින් හෝ CLI හරහා සංස්කරණය කළ හැක - උදාහරණයක් ලෙස, මේ වගේ:

skaffold config set --global local-cluster true

මෙම විධානය ගෝලීය විචල්‍යය සකසනු ඇත local-cluster අර්ථයට true, ඉන් පසුව Skaffold දුරස්ථ රෙජිස්ට්රි වෙත පින්තූර තල්ලු කිරීමට උත්සාහ නොකරනු ඇත. ඔබ දේශීයව සංවර්ධනය කරන්නේ නම්, ඔබට දේශීයව පින්තූර තැනීමට මෙම විධානය භාවිතා කළ හැකිය.

නැවතත් skaffold.yaml:

  • වේදිකාව මත build ඔබ රූපය දේශීයව එකතු කර සුරැකිය යුතු බව අපි සඳහන් කරමු. පළමු වරට ගොඩනැගීම ක්‍රියාත්මක වූ පසු, අපට පහත දේ පෙනෙනු ඇත:
    // т.к. Minikube создает кластер в отдельной виртуальной машине,
    // придется проникнуть внутрь, чтобы найти образы
    # minikube ssh
    $ docker images
    REPOSITORY                                TAG                                                                IMAGE ID            CREATED             SIZE 
    leeroy-app                                7d55a50803590b2ff62e47e6f240723451f3ef6f8c89aeb83b34e661aa287d2e   7d55a5080359        4 hours ago         13MB 
    leeroy-app                                v0.37.1-171-g0270a0c-dirty                                         7d55a5080359        4 hours ago         13MB
    leeroy-web                                5063bfb29d984db1ff70661f17d6efcc5537f2bbe6aa6907004ad1ab38879681   5063bfb29d98        5 hours ago         13.1MB
    leeroy-web                                v0.37.1-171-g0270a0c-dirty                                         5063bfb29d98        5 hours ago         13.1MB

    ඔබට පෙනෙන පරිදි, Skaffold විසින්ම පින්තූර ටැග් කර ඇත. මාර්ගය වන විට, ටැග් කිරීමේ ප්‍රතිපත්ති කිහිපයක් සඳහා සහය දක්වයි.

  • තවදුරටත් වින්‍යාසය තුළ එය දක්වා ඇත context: ./leeroy-app/, i.e. රූපය එකතු කරන සන්දර්භය නියම කර ඇත.
  • යෙදවීමේ අදියරේදී, අවශ්‍ය ප්‍රකාශන සඳහා අපි kubectl සහ වෙස් මුහුණක් භාවිතා කරන බව තීරණය වේ.
  • PortForward: අපි සාමාන්‍යයෙන් වරායන් භාවිතා කරන ආකාරය හා සමානයි kubectl port-forward, අපි මෙම විධානය ඇමතීමට Skaffold වෙත උපදෙස් ලබා දෙන්නෙමු. මෙම අවස්ථාවේදී, ප්‍රාදේශීය වරාය 9000 නම සමඟ යෙදවීමේදී 8080 වෙත යොමු කෙරේ. leeroy-web.

එය දියත් කිරීමට කාලයයි skaffold dev: කණ්ඩායම දැනට පවතින "ප්‍රතිපෝෂණ පුඩුවක්" නිර්මාණය කරනු ඇත, i.e. එය සෑම දෙයක්ම එකතු කර පොකුරට යොදවනවා පමණක් නොව, මේ මොහොතේ කරල්වල තත්වය, වෙනස්කම් නිරීක්ෂණය කිරීම සහ කරල්වල තත්වය යාවත්කාලීන කිරීම ද ඔබට කියනු ඇත.

මෙන්න දියත් කිරීමේ ප්රතිඵලය skaffold dev --port-forward නැවත එකලස් කිරීමේදී:

Kubernetes සංවර්ධනය සඳහා Skaffold සමාලෝචනය

පළමුව, හැඹිලිය භාවිතා කරන බව ඔබට පෙනෙනු ඇත. ඊළඟට, යෙදුම එකලස් කර, යොදවා, වරායන් යවනු ලැබේ. නිශ්චිතව දක්වා ඇත --port-forward, ස්කැෆෝල්ඩ් වරාය වෙත යොමු කරන ලදී web, ඔහුගෙන් අසන ලද පරිදි, නමුත් මෙහි app ඔහු තමාගේම අභිමතය පරිදි විසි කළේය (ළඟම ඇති නිදහස් එක තෝරා ගත්තේය). මෙයින් පසු, අපි අයදුම්පත් වලින් පළමු ලඝු-සටහන් ලබා ගනිමු.

එය ක්‍රියාත්මක වේද යන්න පරීක්ෂා කර බලමු?

~/skaffold/examples/microservices # kubectl get po
NAME                          READY   STATUS    RESTARTS   AGE
leeroy-app-6998dfcc95-2nxvf   1/1     Running   0          103s
leeroy-web-69f7d47c9d-5ff77   1/1     Running   0          103s
~/skaffold/examples/microservices # curl localhost:9000
leeroooooy app!!!

ගොනුව වෙනස් කිරීම leeroy-app/app.go - තත්පර කිහිපයක් ගත වේ ... සහ:

~/skaffold/examples/microservices # kubectl get po
NAME                          READY   STATUS    RESTARTS   AGE
leeroy-app-ffd79d986-l6nwp    1/1     Running   0          11s
leeroy-web-69f7d47c9d-5ff77   1/1     Running   0          4m59s
~/skaffold/examples/microservices # curl localhost:9000
leeroooooy Habr!!!

ඒ අතරම, Skaffold විසින්ම කොන්සෝලය තුළ එකම දේ ප්‍රදර්ශනය කරන ලදී, එක් කරුණක් හැර: එය පෙරළුණා පමණි. leeroy-app, සහ එකවර නොවේ.

වැඩි පුරුදු

නව ව්‍යාපෘතියක් නිර්මාණය කිරීමේදී, Skaffold සඳහා configs විධානය භාවිතා කර බූට්ස්ට්‍රැප් කළ හැකි බව සඳහන් කිරීම වටී. init, ඉතා පහසු වන. ඊට අමතරව, ඔබට වින්‍යාස කිහිපයක් ලිවිය හැකිය: පෙරනිමි වින්‍යාසය මත සංවර්ධනය සිදු කරන්න, ඉන්පසු විධානය සමඟ වේදිකාවට යන්න run (එකම ක්රියාවලිය devවෙනස් වින්‍යාසයක් භාවිතා කරමින් වෙනස්කම් නිරීක්ෂණය නොකරයි.

කැටකෝඩා එකේ තියෙනවා නායකත්වය උදාහරණයක් සමඟ එය වඩාත් පහසු වේ. නමුත් එය Kubernetes සමඟ සූදානම් කළ වැලිපිල්ලක්, යෙදුමක් සහ Skaffold ඉදිරිපත් කරයි. ඔබ මූලික කරුණු ඔබම අත්හදා බැලීමට කැමති නම් හොඳ විකල්පයක්.

Skaffold සඳහා භාවිතා කළ හැකි එක් අවස්ථාවක් වන්නේ දුරස්ථ පොකුරක් මත සංවර්ධනය සිදු කිරීමයි. සෑම කෙනෙකුටම තමන්ගේම දෘඩාංග මත Minikube ධාවනය කිරීමට පහසු නැත, පසුව යෙදුම පෙරළමින් එය ප්‍රමාණවත් ලෙස ක්‍රියාත්මක වේ යැයි අපේක්ෂා කරයි ... මෙම අවස්ථාවෙහිදී, Skaffold ගැටලුව පරිපූර්ණ ලෙස විසඳයි, එය තහවුරු කළ හැකිය, උදාහරණයක් ලෙස, Reddit ඉංජිනේරුවන් විසින්, අප සතුව ඇති පරිදි. දැනටමත් සාකච්ඡා කර ඇත ලියා අපේ බ්ලොග් එකේ.

සහ ඇතුළත මෙම ප්රකාශනය Weaveworks වෙතින් ඔබට නිෂ්පාදනය සඳහා නල මාර්ගයක් නිර්මාණය කිරීමේ උදාහරණයක් සොයාගත හැකිය.

නිගමනය

Skaffold යනු Kubernetes වෙත යෙදුම් පෙරළීම සම්බන්ධ වන සහ මූලික වශයෙන් සංවර්ධන අවශ්‍යතා කෙරෙහි අවධානය යොමු කරන නල මාර්ග තැනීම සඳහා පහසු මෙවලමකි. සංවර්ධකයාගේ මූලික අවශ්‍යතා සැලකිල්ලට ගන්නා “කෙටි” නල මාර්ගයක් නිර්මාණය කිරීම තරමක් පහසු කරයි, නමුත් අවශ්‍ය නම්, ඔබට විශාල ක්‍රියාවලීන් සංවිධානය කළ හැකිය. CI/CD ක්‍රියාවලි වල Skaffold භාවිතා කිරීමේ පැහැදිලි උදාහරණ වලින් එකක් ලෙස දෙනු ලැබේ එවැනි පරීක්ෂණ ව්යාපෘතිය Kubernetes, gRPC, Istio සහ OpenCensus Tracing හි හැකියාවන් භාවිතා කරන microservices 10 කින්.

Skaffold දැනටමත් GitHub හි තරු 8000+ කට ආසන්න ප්‍රමාණයක් ඇත, එය Google විසින් සංවර්ධනය කරන ලද අතර එය එහි කොටසකි GoogleContainerTools - පොදුවේ ගත් කල, මේ මොහොතේ ව්‍යාපෘතිය සතුටින් සංවර්ධනය වනු ඇතැයි විශ්වාස කිරීමට සෑම හේතුවක්ම තිබේ.

ප්රාදේශීය සභා

අපගේ බ්ලොග් අඩවියේ ද කියවන්න:

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න