ubuntu下部署kubernetes

          在国内的网络环境下,按照官方文档,在Ubuntu上安装kubernetes,打通ssh、设置环境变量、下载源码或者二进制包,部署,是根本就安装不成功的,最基本的连git上的源码都下不下来,就算下来了,后续安装依赖的flannel、etcd的时候还是下载不下来;于是干脆自己动手下载依赖包,修改kubernetes安装脚本。

        1、前提条件看官方文档,Ubuntu必须是14.0x,16.x版本是安装不了的;docker镜像加速,就用阿里云的

        2、下载kubernetes release包,下载的是v1.3.5,大小1.xG

        3、下载flannel,下载v0.5.5,太新版本没敢下

        4、下载ectd,v3.0.4

        5、解压kubernets、flannel、etcd后,软连接到kubernetes/cluster/ubuntu 目录下,是解压后的目录名,不能乱改目录名,否则后边用到了时候找不到

        6、编辑kubernetes/cluster/ubuntu目录下download-release.sh文件,把用来下载和解压flannel、etcd、kubernetes的三个curl和tar注释掉,由于上边我们已经下载并且软连接了相应的包目录,所以只用这个文件拷二进制文件就好了;实际上download-release.sh一大部分功能就是将kubernetes、flannel、etcd相关的二进制文件,拷到kubernetes/cluster/ubuntu/binaries目录下,后边会把这些文件以及一些配置文件拷到各个minion节点

        7、安装过程中会遇到

saltbase/salt/generate-cert/make-ca-cert.sh: No such file or directory
         /kubernetes/server/kubernetes下已经有salt包,解压后saltbase整个目录cp到kubernetes/cluster/下

        8、kubernetes/cluster/ubuntu/util.sh 这个文件在运行的时候会storage.googleapis.com下载easy-rsa.tar.gz文件,但是国内经常被墙,如果被墙卡在这一步,会拷贝binaries后长时间没反应,这个可以回复评论提供一个下载。

        9、kubernetes/cluster/ubuntu/util.sh 同时会向kubernetes的集群中其他机器上拷贝etcd、flannel、kubernetes二进制文件和配置,但是如果运行多次kube-up.sh,并且拷贝过相关文件到了个集群中其他文件,会出现不能覆盖的问题:

password to copy files and start node: 
cp: cannot create regular file ‘/opt/bin/etcd’: Text file busy 
cp: cannot create regular file ‘/opt/bin/kube-apiserver’: Text file busy cp: cannot create regular file ‘/opt/bin/kube-controller-manager’: Text file busy 
cp: cannot create regular file ‘/opt/bin/kube-scheduler’: Text file busy start: Job is already running: etcd

解决办法,修改util文件,把所有cp改为cp -f,强行覆盖:

cp ~/kube/default/* /etc/default/
改为
cp -f ~/kube/default/* /etc/default/

        10、kubernetes/cluster/ubuntu/util.sh 同时会启动集群其他机器的etcd、flannel、kubernetes组件,但是这里启动脚本用的是service xxx start,而不是restart,这个重复启动会报错退出

start: Job is already running: etcd

解决办法把util.sh中所有service xxx start改为service xxx restart

        做完以上步骤,按照这篇文档,找几台机器(如果没有,并且你电脑配置不错,可以装个虚拟机,然后拷贝几个出来启动),在master上打通ssh,注意自己的ip也要ssh-copy-id一下,否则后边部署会失败

$ ssh-keygen
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]

        下载kubernetes源码或release包(release包见下边第2条),开始安装前先设置一些环境变量,前三个是三个依赖包的版本,自己按照实际版本设置,最后一个是运行kubernetes的操作系统:

export KUBE_VERSION=1.3.5
export FLANNEL_VERSION=0.5.5
export ETCD_VERSION=3.0.4
export KUBERNETES_PROVIDER=ubuntu

        然后配置cluster/ubuntu/config-default.sh,设置master和minion,SERVICE_CLUSTER_IP_RANGE表示集群内部service所对应的ip范围,flannel_net表示pod所分配的IP范围。这里我发现跟集群中节点ip在一个段中才能部署成功。

export nodes=${nodes:-"[email protected] [email protected] [email protected]"}
roles=${roles:-"ai i i"}
export roles_array=($roles)
export NUM_NODES=${NUM_NODES:-3}
export SERVICE_CLUSTER_IP_RANGE=${SERVICE_CLUSTER_IP_RANGE:-172.16.30.0/24}  # formerly PORTAL_NET
export FLANNEL_NET=${FLANNEL_NET:-172.16.0.0/16} 

        最后在kubernetes/cluster下运行kube-up.sh,就会调到以上修改的相关脚本,如果成功,会看到这个提示:

Cluster validation succeeded

        验证运行结果:

$kubectl get nodes
NAME            STATUS    AGE
172.16.30.136   Ready     14d
172.16.30.137   Ready     14d
172.16.30.138   Ready     14d