Bita na Skaffold don ci gaban Kubernetes

Bita na Skaffold don ci gaban Kubernetes

Shekara daya da rabi da ta gabata, a ranar 5 ga Maris, 2018, Google ya fitar da sigar farko ta alpha na aikin Bude tushen aikin CI/CD da ake kira. Skaffold, wanda burinsa shine ƙirƙirar "ci gaban Kubernetes mai sauƙi da maimaituwa" don masu haɓakawa su iya mai da hankali kan ci gaba maimakon gudanarwa. Menene zai iya zama mai ban sha'awa game da Skaffold? Kamar yadda ya fito, yana da ƴan dabaru sama da hannun riga wanda zai iya sa ya zama kayan aiki mai ƙarfi ga mai haɓakawa, har ma da injiniyan ayyuka. Mu san aikin da kuma iyawar sa.

NB: Af, mun riga mun yi magana a taƙaice game da Skaffold a gaba ɗaya bita na kayan aikin haɓakawa, wanda rayuwarsu ke da alaƙa da Kubernetes.

Ka'idar Manufa da iyawa

Don haka, gabaɗaya magana, Skaffold yana magance matsalar sarrafa tsarin zagayowar CI/CD (a wurin gini, turawa, matakan turawa), yana ba da saurin amsawa ga mai haɓakawa, watau. da ikon da sauri sami sakamakon m code canje-canje - a cikin nau'i na wani updated aikace-aikace aiki a cikin Kubernetes cluster. Kuma yana iya aiki a cikin da'irori daban-daban (dev, mataki, samarwa ...), wanda Skaffold yana taimakawa wajen kwatanta bututun da suka dace don ƙaddamarwa.

An rubuta lambar tushe ta Skaffold a cikin Go, rarraba ta ƙarƙashin lasisin Apache 2.0 (GitHub).

Bari mu dubi manyan ayyuka da fasali. Na farko sun hada da:

  • Skaffold yana ba da kayan aiki don ƙirƙirar bututun CI/CD.
  • Yana ba ku damar saka idanu canje-canje a lambar tushe a bango kuma gudanar da tsari mai sarrafa kansa na haɗa lamba cikin hotunan ganga, buga waɗannan hotuna a cikin Registry Docker da tura su zuwa gungu na Kubernetes.
  • Yana aiki tare da fayiloli a cikin ma'ajiya tare da kundin aiki a cikin akwati.
  • Gwaji ta atomatik ta amfani da gwajin-tsarin ganga.
  • Tashar jiragen ruwa na gaba.
  • Yana karanta rajistan ayyukan aikace-aikacen da ke gudana a cikin akwati.
  • Yana taimakawa wajen gyara aikace-aikacen da aka rubuta cikin Java, Node.js, Python, Go.

Yanzu game da fasali:

  • Ita kanta Skaffold ba ta da abubuwan da ke gefen tari. Wato, babu buƙatar ƙara daidaita Kubernetes don amfani da wannan kayan aiki.
  • Bututu daban-daban don aikace-aikacen ku. Shin kuna buƙatar fitar da lambar zuwa Minikube na gida yayin da kuke haɓakawa, sannan don aiwatarwa ko samarwa? Don wannan dalili akwai bayanan martaba da saitunan masu amfani, masu canjin yanayi da tutoci, waɗanda ke ba ku damar bayyana bututun daban-daban don aikace-aikacen ɗaya.
  • CLI. Mai amfani da na'ura mai kwakwalwa kawai a cikin YAML. A Intanet zaka iya samun nassoshi na ƙoƙarin ƙirƙira GUI na gwaji, duk da haka, a halin yanzu wannan yana nufin kawai cewa wani yana buƙatar shi, amma ba da gaske ba.
  • Mai daidaituwa. Skaffold ba mai girbi ne kaɗai ba, amma yana ƙoƙarin yin amfani da nau'ikan nau'ikan ɗaiɗaikun ɗaiɗaiku ko mafita na yanzu don takamaiman ayyuka.

Misali na karshen:

  • A matakin taro zaka iya amfani da:
    • docker yana gina gida, a cikin gungu ta amfani da kaniko ko cikin Google Cloud Build;
    • Bazel a gida;
    • Jib Maven da Jib Gradle a gida ko a cikin Google Cloud Build;
    • rubutun ginawa na al'ada yana gudana a cikin gida. Idan kana buƙatar gudanar da wani (mafi sauƙi / saba / ...) gina bayani, an kwatanta shi a cikin rubutun don Skaffold ya ƙaddamar da shi (misali daga takardun). Wannan yana ba ka damar amfani da duk wani mai tarawa wanda za a iya kira ta amfani da rubutun;
  • A matakin gwaji, wanda aka riga aka ambata kwantena-tsarin-gwajin;
  • Ana ba da waɗannan abubuwan don turawa:
    • Kubectl;
    • Helm;
    • siffanta.

Godiya ga wannan, ana iya kiran Skaffold na musamman tsarin don gina CI/CD. Anan akwai misalin tafiyar aiki yayin amfani da shi (daga takaddun aikin):

Bita na Skaffold don ci gaban Kubernetes

Menene aikin Skaffold yayi kama da gaba ɗaya?

  1. Mai amfani yana lura da canje-canje a cikin kundin adireshin lambar tushe. Idan an yi gyare-gyare ga fayilolin, ana daidaita su tare da faifan aikace-aikacen a cikin gungu na Kubernetes. Idan zai yiwu, ba tare da sake haɗa hoton ba. In ba haka ba, an haɗa sabon hoto.
  2. Ana duba hoton da aka haɗa ta amfani da gwajin tsarin-kwangila, mai alama kuma a aika zuwa Docker Registry.
  3. Bayan wannan, an tura hoton - an tura shi cikin gungu na Kubernetes.
  4. Idan an fara ƙaddamarwa ta amfani da umarnin skaffold dev, sannan mu fara karɓar rajistan ayyukan daga aikace-aikacen, kuma Skaffold yana jiran canje-canje don sake maimaita duk ayyukan.

Bita na Skaffold don ci gaban Kubernetes
Misalin manyan matakan aikin Skaffold

Yi aiki. Gwada Skaffold

Don nuna amfani da Skaffold, zan ɗauki misali daga Ma'ajiyar aikin GitHub... AF, can Kuna iya samun wasu misalan da yawa waɗanda ke la'akari da takamaiman takamaiman abubuwa. Zan yi duk ayyuka a gida a Minikube. Shigarwa yana da sauƙi kuma yana ɗaukar mintuna kaɗan, kuma kuna buƙatar kubectl don farawa.

Shigar 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

Bari mu rufe ma'ajin Skaffold tare da misalan da suka dace:

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

Na zaɓi misali mai kwasfa biyu, kowanne yana ɗauke da ƙaramin aikace-aikacen Go guda ɗaya. Ɗaya daga cikin aikace-aikacen shine farkon (leeroy-web), wanda ke juya buƙatun zuwa aikace-aikace na biyu - backend (leeroy-app). Bari mu ga yadda yake kama:

~/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 da leeroy-web sun ƙunshi Go code da Dockerfiles masu sauƙi don gina wannan lambar a cikin gida:

~/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 .

Ba zan ba da lambar aikace-aikacen ba - ya isa ya san hakan leeroy-web yana karɓar buƙatun kuma yana ba da su zuwa ga leeroy-app. Don haka a cikin fayiloli Deployment.yaml akwai Sabis kawai don app (don zirga-zirgar cikin gida). Pod tashar jiragen ruwa web za mu tura shi zuwa ga kanmu don saurin shiga aikace-aikacen.

Yana son 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

Duk matakan da aka ambata a sama an bayyana su anan. Baya ga wannan tsarin, akwai kuma fayil tare da saitunan duniya - ~/.skaffold/config. Ana iya gyara shi da hannu ko ta hanyar CLI - alal misali, kamar haka:

skaffold config set --global local-cluster true

Wannan umarnin zai saita canjin duniya local-cluster cikin ma'ana true, Bayan haka Skaffold ba zai yi ƙoƙarin tura hotuna zuwa wurin yin rajista mai nisa ba. Idan kuna haɓaka cikin gida, zaku iya amfani da wannan umarni don gina hotuna a cikin gida.

Komawa skaffold.yaml:

  • A kan mataki build mun saka cewa kana buƙatar tattarawa da adana hoton a gida. Bayan ginin ya gudana a karon farko, za mu ga masu zuwa:
    // т.к. 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

    Kamar yadda kuke gani, Skaffold ya yi wa hotunan da kansa alama. Af, ana tallafawa manufofin sawa da yawa.

  • Gaba a cikin saitin an nuna shi context: ./leeroy-app/, i.e. an ƙayyade mahallin da aka tattara hoton.
  • A matakin ƙaddamarwa, an ƙaddara cewa za mu yi amfani da kubectl da abin rufe fuska don abubuwan da suka dace.
  • PortForward: kama da yadda muke yawan tura tashar jiragen ruwa ta amfani da su kubectl port-forward, Muna ba da umarni ga Skaffold don kiran wannan umarni. A wannan yanayin, ana tura tashar jiragen ruwa na gida 9000 zuwa 8080 a cikin ƙaddamarwa tare da sunan leeroy-web.

Lokaci ya yi da za a ƙaddamar skaffold dev: Ƙungiyar za ta ƙirƙiri "madaidaicin amsa" mai gudana, watau. ba wai kawai zai tattara komai ba kuma ya tura shi zuwa gungu, amma kuma zai gaya muku game da yanayin kwasfa a yanzu, saka idanu canje-canje da sabunta yanayin kwasfa.

Ga sakamakon ƙaddamarwa skaffold dev --port-forward lokacin sake haɗawa:

Bita na Skaffold don ci gaban Kubernetes

Da farko, za ku ga cewa ana amfani da cache. Bayan haka, ana haɗa aikace-aikacen, an tura shi, kuma ana tura tashar jiragen ruwa. Tun da aka ƙayyade --port-forward, Skaffold ya tura tashar zuwa web, kamar yadda aka tambaye shi, amma a nan app ya yi jifa da son ransa (ya zabi mafi kusa da 'yantacce). Bayan wannan, muna karɓar rajistan ayyukan farko daga aikace-aikacen.

Mu duba ko yana aiki?

~/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!!!

Gyara fayil ɗin leeroy-app/app.go - ƴan daƙiƙa kaɗan sun wuce... kuma:

~/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!!!

A lokaci guda, Skaffold da kansa ya nuna abu iri ɗaya a cikin na'ura wasan bidiyo kamar da, ban da maki ɗaya: kawai ya birgima. leeroy-app, kuma ba duka lokaci guda ba.

Ƙarin aiki

Hakanan yana da mahimmanci a faɗi cewa lokacin ƙirƙirar sabon aikin, ana iya saita saiti don Skaffold ta amfani da umarnin. init, wanda ya dace sosai. Bugu da kari, zaku iya rubuta saiti da yawa: aiwatar da ci gaba akan saitunan tsoho, sannan mirgine zuwa mataki tare da umarnin. run (tsari iri ɗaya kamar dev, kawai baya saka idanu canje-canje), ta amfani da saitin daban.

A kan katacoda akwai jagora Har ma ya fi sauƙi tare da misali. Amma yana ba da akwatin sandbox wanda aka shirya tare da Kubernetes, aikace-aikace da Skaffold. Kyakkyawan zaɓi idan kuna sha'awar gwada ainihin kayan yau da kullun da kanku.

Ɗaya daga cikin yiwuwar amfani da Skaffold shine don gudanar da ci gaba akan gungu mai nisa. Ba kowa yana jin daɗin tafiyar da Minikube akan kayan aikin kansa ba, sannan ya fitar da aikace-aikacen kuma yana tsammanin zai yi aiki yadda ya kamata… an riga an tattauna ya rubuta a cikin mu blog.

Kuma a cikin wannan littafin daga Weaveworks za ku iya samun misali na ƙirƙirar bututu don samarwa.

ƙarshe

Skaffold kayan aiki ne mai dacewa don gina bututun da ya haɗa da fitar da aikace-aikace zuwa Kubernetes kuma an fi mai da hankali kan buƙatun ci gaba. Yana ba da sauƙi don ƙirƙirar bututun "gajeren" wanda ke la'akari da ainihin bukatun mai haɓakawa, amma idan ana so, zaku iya tsara manyan matakai. A matsayin ɗaya daga cikin bayyanannun misalan amfani da Skaffold a cikin tsarin CI/CD ana ba shi irin wannan gwajin aikin na 10 microservices ta amfani da damar Kubernetes, gRPC, Istio da Buɗe Census Tracing.

Skaffold ya riga yana da tauraro kusan 8000+ akan GitHub, Google ne ya haɓaka kuma yana cikin GoogleContainerTools - gabaɗaya, a halin yanzu akwai kowane dalili na gaskata cewa aikin zai ci gaba da farin ciki har abada.

PS

Karanta kuma a kan shafinmu:

source: www.habr.com

Add a comment