Kubernetes için yerel bir geliştirme ortamı nasıl oluşturulur?


115

Kubernetes, kapsayıcıları bir küme bulutuna dağıtmakla ilgili görünüyor. Dokunmadığı görünen şey, geliştirme ve evreleme ortamları (veya benzeri).

Geliştirme sırasında bazı önemli değişikliklerle üretim ortamına olabildiğince yakın olmak istersiniz:

  • Yerel olarak konuşlandırılmış (veya en azından sizin ve yalnızca sizin erişebileceğiniz bir yerde )
  • Sayfa yenilemede en son kaynak kodunu kullanın (bir web sitesi olduğunu varsayarak; ideal olarak, yerel dosya kaydında sayfa otomatik yenileme, kaynak kodu bağlarsanız ve Yeoman gibi bazı şeyler kullanırsanız yapılabilir ).

Benzer şekilde, kamuya açık olmayan bir ortamın sürekli entegrasyon yapmasını isteyebilir .

Kubernetes bu tür bir geliştirme ortamını destekliyor mu yoksa üretim sırasında yine de çalışacağını umarak inşa edilmesi gereken bir şey mi?


Openshift Origin'e bir göz atın. Openshift'in bir sonraki sürümüdür ve Kubernetes üzerine inşa edilmiştir. Docker kapsayıcısında bağımsız olarak çalışır.
Mark O'Connor

@ MarkO'Connor Daha çok Google Cloud'da da dağıtmayı düşünüyordum, ancak bunlar daha fazla dağıtım çözümleri. OpenShift Origin ile yerel gelişime izin veren bir çözümünüz varsa (çoğunlukla en son yerel dosyayı yeniden yükleyin), lütfen bir yanıt olarak paylaşın, ilgilenirim.
Wernight

Buna bir çözüm buldunuz mu? Yerel geliştirme kümemde mezoların üzerinde çalışan kubernet'lerim var. Kubernetes üzerindeki container'larda konuşlandırılacak mikro hizmetler oluşturmayı planlıyorum. Değişikliklerimi kaydetmeyi ve ikili dosyayı otomatik olarak oluşturup bölmeleri yeniden başlatmayı çok isterim. Bunu test etmek için gerçekten bir değişiklik olmadı, ancak vms'de ikili dosyada oluşturma ve ardından bölmeyi yeniden başlatma biraz yavaş olabilir.
F21

2
@ F21 Bu yayınlandıktan bu yana bir yıldan fazla zaman geçti. Kubernetes ile iyi bir yerel geliştirme iş akışı var mı?
Jatin

Sen bakabilir microk8s, bu yerel makine için hafif K8S yüklemesidir. Aynısı için bir cevap gönderdim, nasıl kurulur. Kurulum sadece bir dakika sürer.
Prafull Ladha

Yanıtlar:


67

Güncelleme (2016-07-15)

Kubernetes 1.3 sürümüyle birlikte Minikube şimdi gelişmesi için yerel makinenizde Kubernetes çalıştırmak için tavsiye edilen bir yoldur.


Kubernetes'i Docker aracılığıyla yerel olarak çalıştırabilirsiniz . Çalışan bir düğümünüz olduğunda, basit bir web sunucusu olan ve ana makinenizden bir birim bağlayan bir bölmeyi başlatabilirsiniz. Web sunucusuna bastığınızda, birimden okuyacaktır ve yerel diskinizdeki dosyayı değiştirdiyseniz, en son sürümü sunabilir.


3
Dokümanlar, bunun artık önerilen yöntem yöntemi olmadığını ve "Minikube'nin yerel makinenizde Kubernetes çalıştırmanın önerilen yöntemi olduğunu" söylüyor.
Jatin

Minikube'nin k8'lerin kendisini geliştirmek için uygun olduğunu düşünmüyorum, değil mi?
harryz

Ne geliştirdiğine bağlı. K8'lerin geliştirme için minikube kullanmanın makul olduğu birçok parçası vardır. Pod ağ güvenliği politikaları veya CNI eklentileri üzerinde çalışıyorsanız, bu pek bir anlam ifade etmeyecektir.
Robert Bailey

1
"Docker aracılığıyla yerel olarak Kubernetes" bağlantısı koptu. Güncellemesi olan var mı?
Pwnosaurus

1
Minikube, bir süre önce yerel docker kurulumunu değiştirdi ve daha sonra yerel docker sürümünün belgeleri kaldırıldı. Minikube ihtiyaçlarınız için çalışıyor mu? Yerel bir tek düğüm kümesi örneği oluşturmak için bir sanal makinenin içindeki kubeadm'i de kullanabilirsiniz.
Robert Bailey

9

Bunu yapmak için bir araç üzerinde çalışıyoruz. Temel fikir, uzak Kubernetes kümesine, etkili bir hazırlık ortamına sahip olmanız ve ardından kodu yerel olarak çalıştırmanız ve uzak kümeye proxy ile bağlanmasıdır. Şeffaf ağ erişimi, kopyalanan ortam değişkenleri, birimlere erişim ... uzak ortama mümkün olduğu kadar yakın, ancak kodunuz yerel olarak ve tam kontrolünüz altında çalışırken elde edersiniz.

Diyelim ki canlı geliştirme yapabilirsiniz. En Dokümanlar http://telepresence.io


5

"Sıcak yeniden yükleme", eklemeyi planladığımız bir şey, ancak bugün olduğu kadar kolay değil. Ancak, maceraperest hissediyorsanız rsync'i docker exec, kubectl exec veya osc exec (hepsi kabaca aynı şeyi yapar) ile her değiştiğinde yerel bir dizini bir kapsayıcıya senkronize etmek için kullanabilirsiniz. Rsync'i kubectl veya osc exec ile şu şekilde kullanabilirsiniz:

# rsync using osc as netcat
$ rsync -av -e 'osc exec -ip test -- /bin/bash' mylocalfolder/ /tmp/remote/folder

Tek başına hot yeniden yükleme, kullandığınız web çerçevesi tarafından ele alınmalıdır ve burada yeoman genellikle bunu ayarlar. Eksik olan, nasıl etkinleştirileceğidir. Yerel bir birimin monte edilmesini gerektirir. @ Robert'ın yanıtı çalışıyorsa, geçerli bir çözüm olmalıdır.
Wernight

4

Bir başka harika başlangıç ​​noktası da bu Vagrant kurulumu , özellikle. ana işletim sisteminiz Windows ise. Bariz avantajlar

  • hızlı ve ağrısız kurulum
  • makineyi yok etmek / yeniden oluşturmak kolay
  • kaynaklar üzerinde örtük sınır
  • birden çok düğüm oluşturarak yatay ölçeklemeyi test etme yeteneği

Dezavantajları - çok fazla RAM'e ihtiyacınız var ve VirtualBox VirtualBox'tır ... daha iyi veya daha kötüsü.

Karışık bir avantaj / dezavantaj, dosyaları NFS aracılığıyla eşlemektir. Kurulumumuzda, iki set RC tanımı oluşturduk - biri uygulama sunucularımızın docker görüntüsünü indiren; diğeri HostOS -> Vagrant -> VirtualBox -> CoreOS -> Kubernetes bölmesinden dosya eşlemeyi ayarlayan 7 ekstra satıra sahip; Docker görüntüsünden kaynak kodun üzerine yazma.

Bunun dezavantajı NFS dosya önbelleğidir - bununla birlikte, sorunludur, onsuz, sorunlu bir şekilde yavaş. Ayarlama bile mount_options: 'nolock,vers=3,udp,noac'önbelleğe alma sorunlarından tamamen kurtulmaz, ancak çoğu zaman işe yarar. Bir kapta çalıştırılan bazı Gulp görevleri, ana işletim sisteminde 8 saniye sürdüğünde 5 dakika sürebilir. İyi bir uzlaşma gibi görünüyor mount_options: 'nolock,vers=3,udp,ac,hard,noatime,nodiratime,acregmin=2,acdirmin=5,acregmax=15,acdirmax=15'.

Otomatik kod yeniden yüklemeye gelince, bu dile özgüdür, ancak Django'nun Python için geliştirici sunucusundan ve Node.js için Nodemon'dan memnunuz. Ön uç projeleri için, elbette gulp + browserSync + watch gibi bir şeyle çok şey yapabilirsiniz, ancak birçok geliştirici için Apache'den hizmet vermek ve sadece geleneksel olarak sert yenileme yapmak zor değildir.

Kubernetes için 4 set yaml dosyası tutuyoruz. Dev, "devstable", sahne, prod. Bunlar arasındaki farklar

  • env değişkenleri açıkça ortamı ayarlıyor (dev / stage / prod)
  • kopya sayısı
  • devstable, stage, prod docker görüntülerini kullanır
  • dev docker görüntülerini kullanır ve NFS klasörünü üzerlerinde kaynak koduyla eşler.

Çok sayıda bash takma adı ve otomatik tamamlama oluşturmak çok kullanışlıdır - sadece yazabilirim rec usersve işe yarar kubectl delete -f ... ; kubectl create -f .... Tüm kurulumun başlamasını istiyorsam, yazıyorum recfove bir düzine hizmeti yeniden oluşturuyor, en son docker görüntülerini çekiyor, Staging env'den en son db dökümünü içe aktarıyor ve yerden tasarruf etmek için eski Docker dosyalarını temizliyor.


4

Skaffold ile yeni başladım

Koddaki değişiklikleri otomatik olarak yerel bir kümeye uygulamak gerçekten yararlıdır.

Yerel bir kümeyi dağıtmanın en iyi yolu Minikube veya Mac ve Windows için Docker'dır, her ikisi de bir Kubernetes arayüzü içerir.



2

Güzel bir yerel geliştirme geri bildirim döngüsüne sahip olmak, Kubernetes ekosisteminde hızlı bir gelişim konusudur.

Bu soruyu çözecek olursak, bu hedefi iyi desteklediğine inandığım birkaç araç var.

Mac Kubernetes için Docker

Mac için Docker Kubernetes ( Docker Desktop , genel çapraz platform adıdır) yerel geliştirme için mükemmel bir seçenek sunar. Sanallaştırma için HyperKit kullanır VirtualBox yerine yerel Hypervisor çerçevesi üzerine kurulu .

Kubernetes özelliği ilk olarak Ocak 2018'de uç kanalda beta olarak yayınlandı ve o zamandan bu yana uzun bir yol kat etti, Nisan 2018'de sertifikalı Kubernetes oldu ve Temmuz 2018'de kararlı kanala mezun oldu .

Deneyimlerime göre, özellikle macOS'ta ve özellikle RBAC, Helm, hipervizör, özel kayıt vb. Konular söz konusu olduğunda Minikube'den çok daha kolay çalışıyor.

dümen

Kodunuzu dağıtmak ve güncellemeleri yerel olarak almak konusunda Helm en popüler seçeneklerden biridir. Uygulamalarınızı CI / CD aracılığıyla Helm grafikleri (ve ayrıca referans verdikleri temel Docker görüntüleri) olarak yayınlayabilirsiniz. Daha sonra bu grafikleri Helm grafiği kayıt defterinizden yerel olarak çekebilir ve yerel kümenizde yükseltebilirsiniz.

Azure Taslağı

Basit yerel dağıtımlar yapmak için Azure Draft gibi bir araç da kullanabilirsiniz ve bulmacanın bu parçasını otomatikleştirmek için ortak dil şablonlarından (yapı paketleri gibi) temel Helm grafikleri oluşturabilirsiniz.

Skaffold

Skaffold , Azure Draft'a benzer, ancak daha olgun, çok daha geniş kapsamlıdır ve Google tarafından yapılmıştır. Çok takılabilir bir mimariye sahiptir. Gelecekte daha fazla insanın Kubernetes için yerel uygulama geliştirme amacıyla kullanacağını düşünüyorum.

React kullandıysanız, Skaffold'u "Kubernetes için React Uygulaması Oluşturun " olarak düşünüyorum .

Kubernetes'te Kompozisyon veya Oluşturma

Docker Compose , Kubernetes ile ilgisiz olsa da, bazı şirketlerin üretimde çalıştırdıkları Kubernetes ortamına benzer basit, kolay ve taşınabilir bir yerel geliştirme ortamı sağlamak için kullandıkları bir alternatiftir. Ancak, bu rotaya gitmek, üretim ve yerel geliştirme kurulumlarınızı birbirinden ayırmak anlamına gelir.

Kompose , Docker Compose'dan Kubernetes'e dönüştürücüdür. Bu, uygulamalarını yerel olarak kapsayıcı koleksiyonları olarak çalıştıran biri için yararlı bir yol olabilir.

Compose on Kubernetes , Docker Compose dosyalarının özel bir denetleyici aracılığıyla doğrudan bir Kubernetes kümesine dağıtılmasına olanak tanıyan , yakın zamanda açık kaynaklı (Aralık 2018) bir Docker teklifidir.



1

Kullanmanın dezavantajı, minkubemakinenizin üzerinde başka bir sanal makine oluşturmasıdır. Ayrıca, en son minikubesürümle, sisteminizden minimum 2 CPU ve 2 GB RAM olması gerekir, bu da onu oldukça ağır hale getirir. Yeterli kaynağa sahip sisteminiz yoksa.

Bu, microk8skubernetes'i geliştirmek için geçmemin nedeni ve onu seviyorum. microk8sDNS, yerel depolama, kontrol paneli, istio, giriş ve çok daha fazlasını, mikro hizmetlerinizi test etmek için ihtiyacınız olan her şeyi destekler.

Yerel ortamınızdan izole edilmiş hızlı ve hafif bir yukarı akış Kubernetes kurulumu olacak şekilde tasarlanmıştır. Bu izolasyon, Kubernetes, Docker.io, iptables ve CNI için tüm ikili dosyaların tek bir çırpıda paketlenmesiyle elde edilir.

Tek düğümlü bir kubernetes kümesi, tek bir komutla bir dakika içinde kurulabilir:

snap install microk8s --classic

Sisteminizde herhangi bir docker veya kubelet hizmetinin çalışmadığından emin olun. Microk8sgerekli tüm hizmetleri otomatik olarak yükleyecektir.

Diğer eklentileri etkinleştirmek için lütfen aşağıdaki bağlantıya bir göz atın microk8s.

https://github.com/ubuntu/microk8s

Aşağıdakileri kullanarak durumu kontrol edebilirsiniz:

velotio@velotio-ThinkPad-E470:~/PycharmProjects/k8sClient$ microk8s.status
microk8s is running
addons:
ingress: disabled
dns: disabled
metrics-server: disabled
istio: disabled
gpu: disabled
storage: disabled
dashboard: disabled
registry: disabled

> Sisteminizde herhangi bir docker veya kubelet hizmetinin çalışmadığından emin olun. Ancak Docker'ı zaten yerel olarak kurdum ve Kubernetes dışında konteynerler çalıştırıyorum. Bu, microk8'leri yerel olarak kuramayacağım anlamına mı geliyor?
Attila Szeremi

1

Https://github.com/okteto/okteto ve Okteto Cloud'a bir göz atın . Değer önerisi, sıcak yeniden yüklemelere, artımlı derlemelere, hata ayıklayıcılara sahip olabileceğiniz docker'dan önce yerel olarak çalışmak yerine klasik geliştirme deneyimine sahip olmaktır ... ancak tüm yerel değişiklikleriniz hemen uzak bir kapsayıcıya senkronize edilir. Uzak konteynerler, bulut hızına erişmenizi sağlar, yeni bir işbirliği düzeyine izin verir ve geliştirmeyi üretim benzeri bir ortamda entegre eder. Ayrıca yerel kurulumların yükünü de ortadan kaldırır.


0

Robert'in daha önce belirttiği gibi, minikube gidilecek yoldur.

İşte minikube ile başlamak için hızlı bir kılavuz. Genel adımlar şunlardır:

  • Minikube yükleyin

  • Minikube kümesi oluşturun (VirtualBox veya Mac için Docker veya Windows durumunda HyperV olabilen bir Sanal Makinede)

  • Uygulama dosyanızın Docker görüntüsünü oluşturun (Dockerfile kullanarak)

  • Bir Dağıtım oluşturarak görüntüyü çalıştırın

  • Erişebilmeniz için uygulamanızı ortaya çıkaran bir hizmet oluşturun.


0

Windows 10'da Kubernetes için yerel bir kurulum yaptığım yol: -

  • Docker Desktop'ı kullanın

  • Docker Desktop'ın ayarlar seçeneğinde Kubernetes'i etkinleştirin

  • Docker Desktop'ta Bellek için ayrılan varsayılan kaynak 2GB olduğundan Docker Desktop ile Kubernetes kullanmak belleği artırın.

  • Kubernetes kümesiyle konuşmak için kubectl'i istemci olarak yükleyin

  • Kullanılabilir kümeyi almak için kubectl config get-contexts komutunu çalıştırın

  • Docker masaüstünü kullanmak için kubectl config use-context docker-desktop komutunu çalıştırın

  • Uygulamanızın docker görüntüsünü oluşturun

  • Yukarıdaki adım kümesinde oluşturulan görüntüye işaret eden bir YAML dosyası (Kubernetes'te dağıtımınızı oluşturmak için açıklayıcı yöntem) yazın

  • Dış dünyanın kullanımına sunmak için dağıtımınızın her biri için düğüm bağlantı noktası türü bir hizmet sunun

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.