deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Spinifex, AWS ECS workloadlarını bare metal üzerinde AWS bağlantısı gerektirmeden çalıştırıyor

Spinifex, ECS EC2 launch type'ını yeniden uygulayarak cluster'ların, task definition'ların ve service'lerin bare metal üzerinde ve ağdan izole ortamlarda çalışmasını sağlıyor; ancak Fargate, autoscaling, service discovery ve secret injection henüz yok.

Spinifex, AWS ECS workloadlarını bare metal üzerinde AWS bağlantısı gerektirmeden çalıştırıyor

dev.to'da yayımlanan bir rehbere göre, Amazon'un Elastic Container Service'ini AWS dışında yeniden uygulayan bir proje olan Spinifex, ekiplerin standart ECS cluster, task definition ve service modelini kendi donanımlarında — AWS'ye hiç bağlantısı olmayan ortamlar dahil — çalıştırmasını sağlıyor.

Nasıl çalışıyor

ECS, birçok ekibin Kubernetes'in karmaşıklığı olmadan container scheduling istediğinde seçtiği seçenek; ancak dev.to yazısının da belirttiği gibi, normalde AWS'ye kayıtlıdır: scheduler bir managed service'tir, kapasite EC2 instance'ları demektir ve sistemin tamamı amazonaws.com'a erişilebilir olduğunu varsayar. Spinifex bunun yerine EC2 launch type'ını yeniden üretir; yani işlem gücünü siz getirirsiniz. Cluster mantıksal bir gruplama olarak kalırken, kapasite spinifex-ecs-node imajından boot edilen ve her biri Spinifex ECS agent'ını çalıştıran sıradan instance'lardan gelir. Agent, boot sırasında node'u bir cluster'a kaydeder, boş CPU ve belleğini bildirir ve scheduler'ın kendisine atadığı container'ları başlatır.

Fargate karşılığı yok. FARGATE uyumluluğu bildiren task definition'lar kabul edilir ama uygulanmaz; bu yüzden Fargate kullanıcıları için pratik değişiklik, instance sayısının talep üzerine sağlanmak yerine elle yönetilmesidir. Task definition ve service yapılandırması aksi halde değişmeden taşınır.

Tanıdık API yüzeyi

Standart aws ecs CLI çağrıları beklendiği gibi çalışıyor: create-cluster, register-task-definition, run-task ve create-service yazının hepsinde gösteriliyor. awsvpc network mode'u AWS davranışıyla eşleşiyor — her task kendi subnet'inizde kendi ENI'sini ve private IP'sini alıyor — ve ALB entegrasyonu IP tipi target group'lar gerektiriyor. Service'ler istenen sayıda task'ı canlı tutar, başarısız olanları değiştirir ve task IP'lerini target group'a kaydeder.

Instance'ların bir ecsInstanceRole instance profile'ına ihtiyacı vardır; bunu Spinifex konsolunun provision-capacity aksiyonu ilk kullanımda oluşturur ve ECS Quickstart Terraform workbook'u, vazgeçmediğiniz sürece otomatik olarak kurar.

Kimlik bilgileri, logging ve deployment'lar

Task IAM role'leri AWS'nin kullandığı mekanizma üzerinden çalışır: agent her container'a AWS_CONTAINER_CREDENTIALS_RELATIVE_URI değişkenini enjekte eder ve kısa ömürlü role kimlik bilgilerini 169.254.170.2 adresinden sunar; böylece herhangi bir AWS SDK, statik anahtar olmadan kimlik doğrulaması yapabilir. Yapılandırıldığında, execution role'u instance role'üne geri düşmek yerine ECR imaj pull'larını yetkilendirmek için kullanılır.

Eşlik (parity) logging'de sona eriyor. Yalnızca containerd'nin varsayılanı olan -file driver'ı destekleniyor; çıktı container instance'ında kalır ve CloudWatch Logs yolu olmadan oradan containerd veya host journal üzerinden okunmalıdır. awslogs veya başka driver'lar isteyen definition'lar yine kabul edilir ve kayıt sırasında container'ı adıyla veren bir uyarı loglanır, böylece geri dönüş görünür kalır.

UpdateService üzerinden yapılan rolling update'ler minimumHealthyPercent ve maximumPercent değerlerine uyar ve deployment circuit breaker'ı, task'leri sürekli başlatılamayan bir rollout'u başarısız kılarak, isteğe bağlı olarak son iyi task definition sürümüne otomatik geri dönebilir.

Bilinen eksikler

dev.to yazısı, Spinifex'teki ECS v1'in kasıtlı olarak minimal olduğu konusunda açık: Service discovery yok — serviceRegistries de Cloud Map de — bu yüzden service'lere bir DNS adı üzerinden değil, load balancer'ları üzerinden erişiliyor. Capacity provider veya yönetilen scaling yok: kapasite kayıtlı instance'ların statik toplamıdır ve autoscaling group bağlantısı yoktur; yani instance sayısını kendiniz yönetirsiniz. Ayrıca container secrets[] bildiren bir task definition, beklediği değerler olmadan çalışmak yerine InvalidParameterException ile kayıttan geçemez; bu da kullanıcıları environment variable'lara veya secret'ları runtime'da fetch etmeye yönlendirir.

Neden önemli

ECS'nin değer önerisi her zaman basitlik olmuştur; ama bu basitlik AWS içinde çalışma zorunluluğuyla birlikte gelirdi. Spinifex, ECS zihinsel modelini — task definition'lar, service'ler, task role'leri, target group'lar — kendi donanımınıza ve ağdan izole ağlara taşınabilir kılıyor; bu, regüle edilmiş ortamlar, bağlantısız sahalar ve AWS lock-in olmadan ECS ergonomisi isteyen her ekip için önemli. Eksik parçalar (elle kapasite yönetimi, service discovery olmaması, secret injection olmaması, host-yerel loglar) onu erken aşama olarak işaretliyor; ancak task definition formatı ve service yapılandırması değişmediği için mevcut definition'lar ve araçlar büyük ölçüde olduğu gibi aktarılıyor.

  • #aws-ecs
  • #containers
  • #bare-metal
  • #orchestration
  • #spinifex