Kubernetes/kubectl: 无法连接到服务器来处理 "pods"
Kubernetes/kubectl: unable to connect to a server to handle "pods"
我是 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) 我创建了这个简单的 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"]
并尝试通过 运行:
创建 pod
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
而且我发现没有 8080
开放的 TCP 端口 kubectl
试图到达。所以这就是我的问题的原因。
所以我的问题是 container/service/daemon 我应该 run/launch 打开这个端口并为其分配 Web 服务,以便让 kubectl 将它用于此 GET 请求 http://localhost:8080/api
?
如有任何帮助,我们将不胜感激。
创建一个 kubernetes cluster from scratch is a little more complicated. The master kubelet
runs a number of pods 让一切顺利进行。
如果您正在寻找一个一体化的解决方案,请使用 minikube to run in a VM. Otherwise use kubeadm
设置您的母版,如果您想查看每个组件的设置方式,则从那里开始工作。
我是 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) 我创建了这个简单的 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"]
并尝试通过 运行:
创建 podkubectl 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
而且我发现没有 8080
开放的 TCP 端口 kubectl
试图到达。所以这就是我的问题的原因。
所以我的问题是 container/service/daemon 我应该 run/launch 打开这个端口并为其分配 Web 服务,以便让 kubectl 将它用于此 GET 请求 http://localhost:8080/api
?
如有任何帮助,我们将不胜感激。
创建一个 kubernetes cluster from scratch is a little more complicated. The master kubelet
runs a number of pods 让一切顺利进行。
如果您正在寻找一个一体化的解决方案,请使用 minikube to run in a VM. Otherwise use kubeadm
设置您的母版,如果您想查看每个组件的设置方式,则从那里开始工作。