වසර එකහමාරකට පෙර, 5 මාර්තු 2018 වන දින, Google විසින් CI/CD සඳහා වන එහි විවෘත මූලාශ්ර ව්යාපෘතියේ පළමු ඇල්ෆා අනුවාදය නිකුත් කරන ලදී.
NB: මාර්ගය වන විට, අපි දැනටමත් අපගේ පොදුවේ Skaffold ගැන කෙටියෙන් කතා කර ඇත
න්යාය. අරමුණ සහ හැකියාවන්
එබැවින්, සාමාන්යයෙන් කථා කරන විට, Skaffold විසින් CI/CD චක්රය ස්වයංක්රීය කිරීමේ ගැටලුව විසඳයි (ගොඩනැගීමේ, තල්ලු කිරීමේ, යෙදවීමේ අදියරේදී), සංවර්ධක කඩිනම් ප්රතිපෝෂණ ඉදිරිපත් කිරීම, i.e. පසුකාලීන කේත වෙනස්වීම්වල ප්රති result ලය ඉක්මනින් ලබා ගැනීමේ හැකියාව - කුබර්නෙටස් පොකුරේ ක්රියාත්මක වන යාවත්කාලීන යෙදුමක ස්වරූපයෙන්. තවද එය විවිධ පරිපථවල (dev, stage, production...) ක්රියා කළ හැකිය, ඒ සඳහා Skaffold පෙරළීම සඳහා අනුරූප නල මාර්ග විස්තර කිරීමට උපකාරී වේ.
Skaffold හි මූල කේතය Go හි ලියා ඇත,
ප්රධාන කාර්යයන් සහ විශේෂාංග දෙස බලමු. පළමු ඒවාට පහත සඳහන් දෑ ඇතුළත් වේ:
- 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 ගොඩනැගීම සඳහා රාමුව. එය භාවිතා කරන විට වැඩ ප්රවාහයක් මෙන්න (ව්යාපෘති ලේඛනයෙන්):
Skaffold ගේ කාර්යය සාමාන්ය වශයෙන් පෙනෙන්නේ කෙසේද?
- උපයෝගිතා මූල කේත නාමාවලියෙහි වෙනස්කම් නිරීක්ෂණය කරයි. ගොනු වලට වෙනස් කිරීම් සිදු කරන්නේ නම්, ඒවා Kubernetes පොකුරේ යෙදුම් පොඩ් සමඟ සමමුහුර්ත වේ. හැකි නම්, රූපය නැවත එකතු නොකර. එසේ නොමැති නම්, නව රූපයක් එකලස් කර ඇත.
- එකලස් කරන ලද රූපය බහාලුම්-ව්යුහය-පරීක්ෂණය භාවිතයෙන් පරීක්ෂා කර, ටැග් කර ඩොකර් රෙජිස්ට්රිය වෙත යවනු ලැබේ.
- මෙයින් පසු, රූපය යොදවා ඇත - Kubernetes පොකුරේ යොදවා ඇත.
- විධානය භාවිතයෙන් දියත් කිරීම ආරම්භ කළේ නම්
skaffold dev
, පසුව අපි යෙදුමෙන් ලඝු-සටහන් ලැබීමට පටන් ගනිමු, සහ Skaffold නැවත සියලු ක්රියාවන් පුනරුච්චාරණය කිරීම සඳහා වෙනස්කම් බලා සිටියි.
Skaffold මෙහෙයුමේ ප්රධාන අදියරවල නිදර්ශනය
පුරුදු කරන්න. Skaffold උත්සාහ කරනවා
Skaffold භාවිතය නිරූපණය කිරීම සඳහා, මම උදාහරණයක් ගන්නෙමි
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
නැවත එකලස් කිරීමේදී:
පළමුව, හැඹිලිය භාවිතා කරන බව ඔබට පෙනෙනු ඇත. ඊළඟට, යෙදුම එකලස් කර, යොදවා, වරායන් යවනු ලැබේ. නිශ්චිතව දක්වා ඇත --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
වෙනස් වින්යාසයක් භාවිතා කරමින් වෙනස්කම් නිරීක්ෂණය නොකරයි.
කැටකෝඩා එකේ තියෙනවා
Skaffold සඳහා භාවිතා කළ හැකි එක් අවස්ථාවක් වන්නේ දුරස්ථ පොකුරක් මත සංවර්ධනය සිදු කිරීමයි. සෑම කෙනෙකුටම තමන්ගේම දෘඩාංග මත Minikube ධාවනය කිරීමට පහසු නැත, පසුව යෙදුම පෙරළමින් එය ප්රමාණවත් ලෙස ක්රියාත්මක වේ යැයි අපේක්ෂා කරයි ... මෙම අවස්ථාවෙහිදී, Skaffold ගැටලුව පරිපූර්ණ ලෙස විසඳයි, එය තහවුරු කළ හැකිය, උදාහරණයක් ලෙස, Reddit ඉංජිනේරුවන් විසින්, අප සතුව ඇති පරිදි. දැනටමත් සාකච්ඡා කර ඇත
සහ ඇතුළත
නිගමනය
Skaffold යනු Kubernetes වෙත යෙදුම් පෙරළීම සම්බන්ධ වන සහ මූලික වශයෙන් සංවර්ධන අවශ්යතා කෙරෙහි අවධානය යොමු කරන නල මාර්ග තැනීම සඳහා පහසු මෙවලමකි. සංවර්ධකයාගේ මූලික අවශ්යතා සැලකිල්ලට ගන්නා “කෙටි” නල මාර්ගයක් නිර්මාණය කිරීම තරමක් පහසු කරයි, නමුත් අවශ්ය නම්, ඔබට විශාල ක්රියාවලීන් සංවිධානය කළ හැකිය. CI/CD ක්රියාවලි වල Skaffold භාවිතා කිරීමේ පැහැදිලි උදාහරණ වලින් එකක් ලෙස
Skaffold දැනටමත් GitHub හි තරු 8000+ කට ආසන්න ප්රමාණයක් ඇත, එය Google විසින් සංවර්ධනය කරන ලද අතර එය එහි කොටසකි
ප්රාදේශීය සභා
අපගේ බ්ලොග් අඩවියේ ද කියවන්න:
- «
Kubernetes මත ධාවනය වන යෙදුම් සංවර්ධකයින් සඳහා මෙවලම් »; - «
werf - Kubernetes හි CI / CD සඳහා අපගේ මෙවලම (දළ විශ්ලේෂණය සහ වීඩියෝ වාර්තාව) »; - «
උද්යානය v0.10.0: ඔබේ ලැප්ටොප් එකට Kubernetes අවශ්ය නොවේ »; - «
Kubernetes ඉඟි සහ උපක්රම: දේශීය සංවර්ධනය සහ Telepresence ගැන ".
මූලාශ්රය: www.habr.com