diff --git a/hack/hypernetes/hyper.sh b/hack/hypernetes/hyper.sh index 75752dde22b0..62de5335c4a3 100755 --- a/hack/hypernetes/hyper.sh +++ b/hack/hypernetes/hyper.sh @@ -36,6 +36,7 @@ Initrd=/var/lib/hyper/hyper-initrd.img DisableIptables=true StorageDriver=devicemapper Hypervisor=libvirt +gRPCHost=127.0.0.1:22318 EOF # Start libvirtd and hyperd services diff --git a/pkg/kubelet/hyper/hyper.go b/pkg/kubelet/hyper/hyper.go index e127be9a7c21..8d8ea662345f 100644 --- a/pkg/kubelet/hyper/hyper.go +++ b/pkg/kubelet/hyper/hyper.go @@ -101,6 +101,11 @@ func New(runtimeHelper kubecontainer.RuntimeHelper, containerLogsDir string, os kubecontainer.OSInterface, ) (kubecontainer.Runtime, error) { + hyperClient, err := NewHyperClient() + if err != nil { + return nil, err + } + hyper := &runtime{ dockerKeyring: credentialprovider.NewDockerKeyring(), containerLogsDir: containerLogsDir, @@ -110,7 +115,7 @@ func New(runtimeHelper kubecontainer.RuntimeHelper, os: os, recorder: recorder, networkPlugin: networkPlugin, - hyperClient: NewHyperClient(), + hyperClient: hyperClient, kubeClient: kubeClient, disableHyperInternalService: disableHyperInternalService, } diff --git a/pkg/kubelet/hyper/hyperclient.go b/pkg/kubelet/hyper/hyperclient.go index b40e784d062a..26ea1959be93 100644 --- a/pkg/kubelet/hyper/hyperclient.go +++ b/pkg/kubelet/hyper/hyperclient.go @@ -35,12 +35,16 @@ import ( "github.com/docker/docker/pkg/parsers" "github.com/docker/docker/pkg/term" "github.com/golang/glog" + "golang.org/x/net/context" + "google.golang.org/grpc" + grpctypes "k8s.io/kubernetes/pkg/kubelet/hyper/types" ) const ( HYPER_PROTO = "unix" HYPER_ADDR = "/var/run/hyper.sock" HYPER_SCHEME = "http" + HYPER_SERVER = "127.0.0.1:22318" DEFAULT_IMAGE_TAG = "latest" KEY_COMMAND = "command" @@ -89,6 +93,7 @@ type HyperClient struct { proto string addr string scheme string + client grpctypes.PublicAPIClient } type AttachToContainerOptions struct { @@ -136,18 +141,23 @@ type podRemoveResult struct { ID string `json:"ID"` } -func NewHyperClient() *HyperClient { +func NewHyperClient() (*HyperClient, error) { var ( scheme = HYPER_SCHEME proto = HYPER_PROTO addr = HYPER_ADDR ) + conn, err := grpc.Dial(HYPER_SERVER, grpc.WithInsecure()) + if err != nil { + return nil, err + } return &HyperClient{ proto: proto, addr: addr, scheme: scheme, - } + client: grpctypes.NewPublicAPIClient(conn), + }, nil } var ( @@ -483,23 +493,12 @@ func (client *HyperClient) RemoveImage(imageID string) error { } func (client *HyperClient) RemovePod(podID string) error { - v := url.Values{} - v.Set(KEY_POD_ID, podID) - body, _, err := client.call("DELETE", "/pod?"+v.Encode(), "", nil) - if err != nil && !strings.Contains(err.Error(), "Can not find") { - return err + request := grpctypes.PodRemoveRequest{ + PodID: podID, } - - var result podRemoveResult - err = json.Unmarshal(body, &result) + _, err := client.client.PodRemove(context.Background(), &request) if err != nil { - glog.Warningf("Can not unmarshal pod delete result: %s, assume removed", string(body)) - return nil - } - // !(errCode == types.E_OK || errCode == types.E_VM_SHUTDOWN) - if result.Code != 0 && result.Code != 2 { - glog.Errorf("Delete pod %s failed: %s", podID, result.Cause) - return errors.New(result.Cause) + return err } return nil diff --git a/pkg/proxy/haproxy/proxier.go b/pkg/proxy/haproxy/proxier.go index 6fd1dc14ff4b..8b84d2ce5100 100644 --- a/pkg/proxy/haproxy/proxier.go +++ b/pkg/proxy/haproxy/proxier.go @@ -93,8 +93,11 @@ var _ proxy.ProxyProvider = &Proxier{} // NewProxier returns a new Proxier given an pod-buildin-haproxy Interface instance. func NewProxier(syncPeriod time.Duration, kubeClient *kubeclient.Client, disableHyperInternalService bool) (*Proxier, error) { - client := hyper.NewHyperClient() - _, err := client.Version() + client, err := hyper.NewHyperClient() + if err != nil { + return nil, err + } + _, err = client.Version() if err != nil { glog.Errorf("Can not get hyper version: %v", err) return nil, err