centos7.2搭建kubernetes集群以及遇到的问题
环境准备:
- centos7.2
- etcd
- flannel
- kubenetes1.3
说明:一台pc用于搭建kubernetes master节点,n台kuernetes节点,组成一个kubernetes集群,master节点需要运行etcd kube-apiserver kube-controller-manager
node | ip |
---|---|
kube-master | 192.168…. |
kube-node-1 | 192.168… |
….. | ….. |
kube-node-i | 192.168… |
安装所需软件
安装etcd
etcd安装在kubernetest master节点上
本教程只安装单机的etcd,如果需要用etcd集群,请自行网上找etcd集群搭建教程
sudo wget http://code.yunfancdn.cn/huangjia/document/raw/master/kubernete/etcd-v2.2.0-linux-amd64.tar.gz
sudo tar -zxf etcd-v2.2.0-linux-amd64.tar.gz
sudo cd etcd-v2.2.0-linux-amd64
sudo cp etcd etcdctl /usr/bin
安装flannel
sudo wget http://code.yunfancdn.cn/huangjia/document/raw/master/kubernete/flannel-0.5.4-linux-amd64.tar.gz
sudo cd flannel-0.5.4
sudo flanneld /usr/bin
安装kubenetes
sudo wget http://code.yunfancdn.cn/huangjia/document/raw/master/kubernete/kubernetes.tar.gz
sudo tar -zxf kubernetes.tar.gz
sudo cd kubernetes
sudo cp kube* /usr/bin
部署各组件
etcd启动:
etcd -name etcd \
-data-dir /var/lib/etcd \
-listen-client-urls http://0.0.0.0:2378,http://0.0.0.0:4001 \
-advertise-client-urls http://0.0.0.0:2378,http://0.0.0.0:4001 \
>> /var/log/etcd.log 2>&1 &
kubernetes api server启动:
sudo kube-apiserver \
--logtostderr=true --v=0 \
--etcd_servers=http://172.17.11.254:4001 \
--insecure-bind-address=0.0.0.0 --insecure-port=8080 \
--service-cluster-ip-range=10.254.1.0/16 \
>> /home/huangjia/log/kube-apiserver.log 2>&1 &
kube-controller-manager:
sudo kube-controller-manager \
--logtostderr=true --v=0 \
--master=http://0.0.0.0:8080 \
>> /home/huangjia/log/kube-controller-manager.log 2>&1 &
kube-scheduler:
sudo kube-scheduler \
--logtostderr=true --v=0 \
--master=http://0.0.0.0:8080 \
>> /home/huangjia/log/kube-scheduler.log 2>&1 &
kube-proxy:
sudo kube-proxy \
--logtostderr=true --v=0 \
--master=http://0.0.0.0:8080 \
>> /home/huangjia/log/kube-proxy.log 2>&1 &
node启动组件
docker:
sudo docker -d \
-H unix:///var/run/docker.sock -H 0.0.0.0:2375 \
>> /home/huangjia/log/docker.log 2>&1 &
kubelet:
sudo kubelet \
--address=0.0.0.0 \
--port=10250 \
--logtostderr=true --v=0 \
--api-servers=http://0.0.0.0:8080 \
>> /home/huangjia/log/kubelet.log 2>&1 &
kube-proxy:
sudo kube-proxy \
--logtostderr=true --v=0 \
--master=http://192.168.3.27:8080 \
>> /home/huangjia/log/kube-proxy.log 2>&1 &
flanneld:
etcdctl -C http://192.168.3.206:4001 \
set /coreos.com/network/config '{"Network":"10.0.0.0/16"}'
flanneld -etcd-endpoints=http://192.168.3.206:4001 \
>> /home/huangjia/log/flanneld.go 2>&1 &
source /run/flannel/subnet.env
ifconfig docker0 ${FLANNEL_SUBNET} 此命令行将docker0的网罗更改为flannel的网络
docker
docker -d \
-H unix:///var/run/docker.sock -H 0.0.0.0:2375 \
--bip=${FLANNEL_SUBNRT} --mtu=${FLANNEL_MTU} \
>> /home/huangjia/log/docker.log 2>&1 &
F && Q
- 在环境搭建完成之后再master节点执行如下命令:
sudo kubectl get nodes 或其他任何kubectl get create delete等操作,都会报如下错误
error: provided data does not appear to be a protobuf message, expected prefix [107 56 115 0]
- 1
- 2
- 3
原因:
结合本教程所搭建的环境,kubectl默认的是采用master节点的ip:8080的方式去连接apiserver发送请求,但是我在部署的过程中,由于master节点的8080端口已经被其他的应用所占用,所以我更改了apiserver的端口为9080,所以当直接用:kubectl get 等操作的时候会报以上错误。
解决方式有两种:
一:通过kubectl -s http://matserIp:apiserverPort get
二:通过kubectl config set-cluster name –server=http://matserIp:apiserverPort 然后通过
kubectl –cluster=name get 就能正常的操作了