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