转载

从头搭建kubernets

Kubernetes搭建

自己参照网上文档,把kubernets搭了一遍,做个笔记。有几个坑,自己踩了,记录下,避免其他人接着踩。文章最末尾有记录自己碰到的错误以及解决办法。

用的软件版本:

centos 7.1

docker 1.8.2

etcd 0.4.6

kubernets v1.0.0

使用两台机器VM1(192.168.132.129)和VM2(192.168.132.130)

VM1作为master,VM2作为minion

注:kubernets不提供网络解决方案,要确保master和所有minion的容器能互相通信,需要提供网络解决方案。比较常用的是etcd+flannel,这里我没有使用etcd+flannel的方案,而是通过将master和mimion主机间添加路由来解决的。具体的解决办法参见

http://dockone.io/article/466 , 感谢吴健@Georce

整个安装步骤有参考帖子的 http://my.oschina.net/xue777hu ... ZKgLT 这个好像是林帆写的,感谢这个作者。

具体步骤:

1.在master和minion上安装docker

yum -y install docker-1.8.2
systemctl restart docker.service

注:请确认docker正确运行了,如docker search centos有结果,即OK

2. 在master和mimion上添加yum源

vi /etc/yum.repo.d/virt7.repo
[virt7-testing]
name=virt7-testing
baseurl=http://cbs.centos.org/repos/virt7-common-release/x86_64/os/
gpgcheck=0

3.在master+minion两个机器上运行

yum -y install --enablerepo=virt7-testing kubernetes

4.检查etcd的版本是否为 0.4.6, 如果不是,则删除etcd并且从rpm安装:

yum erase etcd
yum install http://cbs.centos.org/kojifiles/packages/etcd/0.4.6/7.el7.centos/x86_64/etcd-0.4.6-7.el7.centos.x86_64.rpm

5.配置master和minion两服务器的config文件内容如下

vim /etc/kubernetes/config
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow_privileged=false"
KUBE_MASTER="--master=http://192.168.132.129:8080"
KUBE_ETCD_SERVERS="--etcd_servers=http://192.168.132.129:4001"

注:

1)由于kubernets的版本问题,在1.0版本以后,KUBE_ETCD_SERVERS里面监听的端口默认是2379,这里改回4001,因为etcd默认是监听这个。

2)由于版本问题,KUBE_MASTER这个值也可能出现在/etc/kubernetes/apiserver文件里面。

6.修改master+minion的apiserver文件

vim /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBE_ETCD_SERVERS="--etcd_servers=http://192.168.132.129:4001"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""

7.设置minion端的kubelet文件

vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname_override=192.168.132.130"
KUBELET_API_SERVER="--api_servers=http://192.168.132.129:8080"
KUBELET_ARGS=""

8.重启master端的相关服务

for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler kube-proxy; do 
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done

9.重启minion端的相关服务

for SERVICES in kube-proxy kubelet docker; do 
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done

10.验证

在master服务器上执行kubectl get no,如果有结果,那么表示成功

[root@wydataguard2 kubernetes]# kubectl get no

NAME LABELS STATUS

192.168.132.130 kubernetes.io/hostname=192.168.132.130 Ready

11.参考文档

http://my.oschina.net/xue777hu ... ZKgLT ###林帆的安装说明,有使用flannel

http://www.fangyunlin.com/ ###方云麟老师的博客,非常详细

http://kubernetes.io/

12碰到的问题

问题一:Unable to generate self signed cert: mkdir /var/run/kubernetes: permission denied

解决办法:

vim /usr/lib/systemd/system/kube-apiserver.service

[Service]

PermissionsStartOnly=true

ExecStartPre=-/usr/bin/mkdir /var/run/kubernetes

ExecStartPre=/usr/bin/chown -R kube:kube /var/run/kubernetes/

# systemctl daemon-reload

# systemctl restart kube-apiserver

问题二:/api/v1/namespaces: dial tcp 192.168.132.129:8080: connection refused

解决办法:

这个是kubernets不能确定真正的master,需要确认master跟minion两个机器上的/etc/kubernetes/config和/etc/kubernetes/apiserver两个文件里的KUBE_MASTER="--master= http://192.168.132.129:8080" 这条是唯一的,不要默认的KUBE_MASTER="--master= http://127.0.0.1:8080" 这个值。由于kubernets的版本问题,KUBER_MASTER这个值可能出现在config文件,也可能出现在apiserver这个文件,所以两个文件都要看。

正文到此结束
Loading...