Kubernetes / kubectl:无法连接到服务器来处理“豆荚”

我是Kubernetes新手,所以遇到以下问题。 这些是我的步骤:

1)我跑了etcd

 docker run --volume=/var/etcd:/var/etcd --net=host -d gcr.io/google_containers/etcd:2.0.12 /usr/local/bin/etcd --addr=127.0.0.1:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data 

2)我跑了主容器:

 docker run \ --volume=/:/rootfs:ro \ --volume=/sys:/sys:ro \ --volume=/dev:/dev \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \ --volume=/var/run:/var/run:rw \ --net=host \ --pid=host \ --privileged=true \ -d gcr.io/google_containers/hyperkube:v1.0.1 \ /hyperkube kubelet --containerized --hostname-override="127.0.0.1" --address="0.0.0.0" --api-servers=http://localhost:8080 --config=/etc/kubernetes/manifests 

3)我运行代理:

 docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v1.0.1 /hyperkube proxy --master=http://127.0.0.1:8080 --v=2 

4)我安装了kubectl

5)我创build了这个简单的pod-file.yml

 apiVersion: v1 kind: Pod metadata: name: two-containers spec: restartPolicy: Never volumes: - name: shared-data emptyDir: {} containers: - name: nginx-container image: nginx volumeMounts: - name: shared-data mountPath: /usr/share/nginx/html - name: debian-container image: debian volumeMounts: - name: shared-data mountPath: /pod-data command: ["/bin/sh"] args: ["-c", "echo Hello from the debian container > /pod-data/index.html"] 

并尝试通过运行创buildpod:

 kubectl create -f pod-file.yml 

我得到了:

 ubuntu@ubuntu:~$ kubectl create -f pod-file.yml error: could not read an encoded object from pod-file.yml: unable to connect to a server to handle "pods": couldn't read version from server: Get http://localhost:8080/api: dial tcp 127.0.0.1:8080: connection refused 

我发现它很奇怪,所以我检查了我之前运行的容器:

 ubuntu@ubuntu:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3ae7f094bb01 gcr.io/google_containers/hyperkube:v1.0.1 "/hyperkube proxy ..." 55 minutes ago Up 55 minutes suspicious_ramanujan ed841bc6ef26 gcr.io/google_containers/hyperkube:v1.0.1 "/hyperkube kubele..." 57 minutes ago Up 57 minutes competent_mclean 7408c640a2c8 gcr.io/google_containers/etcd:2.0.12 "/usr/local/bin/et..." About an hour ago Up About an hour elated_shaw 

所以看起来好像一切都好,因为所有的容器都在运行。 好的,我检查了系统中的开放端口( ubuntu 16.04 ):

 ubuntu@ubuntu:~$ sudo netstat -nautp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1315/sshd tcp 0 0 127.0.0.1:7001 0.0.0.0:* LISTEN 3209/etcd tcp 0 0 127.0.0.1:10248 0.0.0.0:* LISTEN 3324/hyperkube tcp 0 0 127.0.0.1:10249 0.0.0.0:* LISTEN 3399/hyperkube tcp 0 0 127.0.0.1:2380 0.0.0.0:* LISTEN 3209/etcd tcp 0 524 172.30.3.114:22 212.98.179.158:35900 ESTABLISHED 3087/sshd: ubuntu [ tcp6 0 0 :::10255 :::* LISTEN 3324/hyperkube tcp6 0 0 :::22 :::* LISTEN 1315/sshd tcp6 0 0 :::4001 :::* LISTEN 3209/etcd tcp6 0 0 :::10250 :::* LISTEN 3324/hyperkube udp 0 0 0.0.0.0:68 0.0.0.0:* 959/dhclient udp 0 0 0.0.0.0:68 0.0.0.0:* 796/dhclient 

而且我发现kubectl试图达到的没有8080开放的TCP端口。 所以这是我的问题的原因。

所以我的问题是什么容器/服务/守护进程我应该运行/启动打开此端口并分配Web服务,以便让kubectl使用它的GET请求http://localhost:8080/api

任何帮助,将不胜感激。

从零开始创build一个kubernetes集群有点复杂。 主kubelet运行一些豆荚 ,使一切。

如果您正在寻找一个完整的解决scheme,请使用minikube在虚拟机中运行。 否则,请使用kubeadm来设置您的主设备,如果您想查看每个设备的设置方式,请从这里继续。