代码之家  ›  专栏  ›  技术社区  ›  mornindew

Memcached Kubernetes客户端Golang

  •  0
  • mornindew  · 技术社区  · 6 年前

    我找不到一个好方法(或示例)来动态发现memcached并确保它在pods扩展时更新。

    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>
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Rico    6 年前

    您可以将memcache实例作为[服务]公开( https://kubernetes.io/docs/concepts/services-networking/service/ 在库伯内特斯。

    这样,在客户机中,您只需为您的服务指定内部DNS条目,如下所示 <service-name>.<k8s-namespace>.svc.cluster.local

    在代码中,您需要这样的内容:

    mc := memcache.New("memcached.redfalcon.svc.cluster.local:11211")
    

    你也可以使用 ConfigMaps 为应用程序指定此配置。

        2
  •  1
  •   mornindew    6 年前

    好吧,我想出来了!这和临场感有关( https://www.telepresence.io/ )我用它来发展地方。它使我能够访问developmentnet环境中的所有K8s资源。不幸的是,Linux中存在一个缺陷,无法使用K8s-FQDN进行查找。

    https://github.com/telepresenceio/telepresence/issues/161

    修复是一种黑客,我端口转发了我的K8s pod,当在本地开发模式下运行时,我把我的URL改为“localhost:port”。这是有效的,但它不是真正的测试Memcached,因为K8s将使用它。

    当我部署到K8s时,它工作得很好。