2016-05-17 20 views
11

Projemde glog flag log_dir kullanıyorum. Son zamanlarda Kubernetes kütüphane ithal veglog flag error

panik bu çalışma zamanı panik başlarken: ./aaa.test bayrağı yeniden tanımlandı: log_dir Bu K8S tarafından vendored edilir Glôg kütüphaneyi andıran

May 16 23:51:35 ecmdev03-core01 docker[26867]: goroutine 1 [running]: 
May 16 23:51:35 ecmdev03-core01 docker[26867]: panic(0x15ebc60, 0xc8201aae90) 
May 16 23:51:35 ecmdev03-core01 docker[26867]:   /usr/local/go/src/runtime/panic.go:464 +0x3e6 
May 16 23:51:35 ecmdev03-core01 docker[26867]: flag.(*FlagSet).Var(0xc8200160c0, 0x7f561118c1c0, 0xc8201aae40, 0x1bddd70, 0x7, 0x1d75860, 0x2f) 
May 16 23:51:35 ecmdev03-core01 docker[26867]:   /usr/local/go/src/flag/flag.go:776 +0x454 
May 16 23:51:35 ecmdev03-core01 docker[26867]: flag.(*FlagSet).StringVar(0xc8200160c0, 0xc8201aae40, 0x1bddd70, 0x7, 0x0, 0x0, 0x1d75860, 0x2f) 
May 16 23:51:35 ecmdev03-core01 docker[26867]:   /usr/local/go/src/flag/flag.go:679 +0xc7 
May 16 23:51:35 ecmdev03-core01 docker[26867]: flag.(*FlagSet).String(0xc8200160c0, 0x1bddd70, 0x7, 0x0, 0x0, 0x1d75860, 0x2f, 0xc8201aae30) 
May 16 23:51:35 ecmdev03-core01 docker[26867]:   /usr/local/go/src/flag/flag.go:692 +0x83 
May 16 23:51:35 ecmdev03-core01 docker[26867]: flag.String(0x1bddd70, 0x7, 0x0, 0x0, 0x1d75860, 0x2f, 0xba3950) 
May 16 23:51:35 ecmdev03-core01 docker[26867]:   /usr/local/go/src/flag/flag.go:699 +0x5f 
May 16 23:51:35 ecmdev03-core01 docker[26867]: k8s.io/kubernetes/vendor/github.com/golang/glog.init() 
May 16 23:51:35 ecmdev03-core01 docker[26867]:   /src/ecm_infra/go/src/k8s.io/kubernetes/vendor/github.com/golang/glog/glog_file.go:41 +0x13e 
May 16 23:51:35 ecmdev03-core01 docker[26867]: k8s.io/kubernetes/pkg/labels.init() 
May 16 23:51:35 ecmdev03-core01 docker[26867]:   /src/ecm_infra/go/src/k8s.io/kubernetes/pkg/labels/selector.go:810 +0x6b 
May 16 23:51:35 ecmdev03-core01 docker[26867]: k8s.io/kubernetes/pkg/api/unversioned.init() 
May 16 23:51:35 ecmdev03-core01 docker[26867]:   /src/ecm_infra/go/src/k8s.io/kubernetes/pkg/api/unversioned/well_known_labels.go:30 +0x6f 
May 16 23:51:35 ecmdev03-core01 docker[26867]: k8s.io/kubernetes/pkg/api.init() 
May 16 23:51:35 ecmdev03-core01 docker[26867]:   /src/ecm_infra/go/src/k8s.io/kubernetes/pkg/api/types.go:2731 +0x64 

biriyle çelişkili olduğunu ben kullanıyorum. Satıcı dizini bu sorun için bir çözüm getiriyor mu? Glide, govendor, gb vb. Gibi satıcı kütüphaneleri kullanmalı mıyım? Varsa hangisi tercih edilir?

cevap

2

Bu hata, çakışan kitaplıklar ile ilgisi yoktur, çakışan bir bayraktır (log_dir). Bir "--log_dir" bayrağı eklediğiniz anlamına gelir ve kubernetes tarafından kullanılan glog kütüphanesi de log_dir bayrağına sahiptir. Bu, paket init sırasında kitaplıklara bayrak eklenmesiyle ilgili bir sorundur. Malesef satıcılık hiçbir şeyi değiştirmeyecek. Günlük kitaplığınızı veya kubernet'lerinizi içe aktardığınızda, flag.CommandLine genel değişkenini farklı bir flag.FlagSet işaret edecek şekilde değiştirerek çalışabilirsiniz, ancak içe aktarma sırasına bağlı olduğundan bu zor olacaktır.

1

Glide kullanarak bağımlılıklarımı satıcılarken benzer bir sorunla karşılaştım.

https://github.com/kubernetes/kubernetes/issues/25572'a göre kubernetes bir glide.lock/glide.yml'a sahip değildir, bağımlılık düzleştirmesi gerçekleşmez ve sonunda satıcı/k8s.io/kubernetes/vendor da dahil olduğundan iki kez tanımlanır.

glide install --strip-vendor --strip-vcs

1

Ben K8S kütüphane kullanımı ve çok flag redefined: log_dir problemle karşılaştı:

aformentioned bağlantıdan geçici çözüm

bana iyi çalıştı. Kubernet'lerin birkaç satıcısını satıcımda görmedim. Daha sonra govendor add onları tamir ettim.

Sanırım bu paketler satıcımın klasöründe bulunamadığı zaman glog'un iki kopyası (satıcı klasöründe bir tane, $ GOPATH'ımda k8s.io/kubernetes/vendor'da bir tane) oluşturuldu.

Eksik paketler nasıl bulunur? Ben aptal bir şekilde kullanıyorum, başka bir şeye $ GOPATH/src/k8s.io adını verdim ve projemi oluşturdum, ne görmediğimi görün.O zaman ekle ~