【发布时间】:2018-09-21 15:57:02
【问题描述】:
我正在尝试通过 golang 连接到我的 memcached 实例。我的应用和 Memcached 都将在 Kubernetes 中。
我找不到关于如何动态发现 memcached 并确保它会在 pod 扩展时更新的好方法(或示例)。
我可以使用 IP 手动创建客户端,但不确定使用 Golang 在 K8s 中动态创建客户端的最佳方式。任何帮助将不胜感激,以下是我正在使用的测试功能(如果有帮助)。
func TestMemcached(t *testing.T) {
mc := memcache.New("10.40.1.18:11211", "10.40.2.16:11211")
mc.Set(&memcache.Item{Key: "foo", Value: []byte("my value"), Expiration: 1})
it, err := mc.Get("foo")
if err != nil {
t.Error("Error pulling from cache:" + err.Error())
}
fmt.Println("Key: " + string(it.Key) + "Value: " + string(it.Value))
//Sleep for a second and a half to let the key expire
time.Sleep(1500 * time.Millisecond)
it, err = mc.Get("foo")
if err == nil {
t.Error("Got a hit when I didn't expect it:" + err.Error())
}
}
kubectl 描述 svc memcached:
Name: memcached
Namespace: redfalcon
Labels: app=memcached
chart=memcached-2.3.1
heritage=Tiller
release=memcached
Annotations: <none>
Selector: app=memcached
Type: ClusterIP
IP: None
Port: memcache 11211/TCP
TargetPort: memcache/TCP
Endpoints: 10.40.1.23:11211,10.40.2.24:11211
Session Affinity: None
Events: <none>
【问题讨论】:
标签: go kubernetes memcached kube-dns