这篇文章告诉你,如何从零开始在阿里云使用Rancher 2.0搭建k8s集群,内容涵盖:
- 阿里云环境准备
- 安装Rancher2.0(包括在阿里云上可能遇到的坑)
- 使用阿里云NAS做StorageClass
- 安装OpenVPN,以在本地直连POD网络
- 部署MongoDB、MySQL、Redis集群
- 部署Jenkins,实现NodeJS+Docker持续集成环境
环境准备
阿里云基础设施准备
- ECS 2台
- 至少2核4GB
- 使用UBuntu16.04系统
- 注意:主机名不能包含大写字母
- NAS 1个 (用于
PersistenceVolume
和StorageClass
) - SLB 1个
- 弹性IP(EIP) 1个
网络设置
- ECS使用阿里云VPC网络
- IP网段为 10.0.0.0/24
- 主机名统一为 vpc01/vpc02/… (vpc01即为10.0.0.1,依次顺延)
安装 Docker
安装 Docker 17.03
curl https://releases.rancher.com/install-docker/17.03.sh | sh
设置阿里云镜像加速器
- 去 http://dev.aliyun.com 获取专属加速器地址
- 执行下面的命令(记得替换加速器地址)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["你的专属加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
创建自定义系统镜像(可选)
至此,已经创建好了一个纯净的 UBuntu 16.04 + Docker 17.03 的系统。
如果你想为了以后增加机器方便,那么可以将现在的系统盘创建为一个自定义镜像。
准备其它机器
如果你创建了自定义镜像,那么直接用创建好的镜像初始化其它机器。
否则,按上面的步骤,在其它机器上各执行一次。
安装 Rancher
我们计划 Rancher Server 安装在vpc01
上,计划2台机器都作为k8s集群的Node节点和Ingress入口。
安装 Rancher Server
在vpc01
运行以下脚本来安装RancherServer。
sudo docker run -d --restart=unless-stopped \
-p 9999:443 \
-v /var/lib/rancher:/var/lib/rancher \
--name rancher-server \
rancher/rancher
此处有坑注意:
- Rancher Server 不能使用默认的80/443端口(因为Ingress默认使用这些端口)
- Rancher Server 不能使用18080端口(nginx会占用)
阿里云安全组设置
由于我们映射了9999端口,所以需要在阿里云的安全组设置中,开放vpc01机器的9999端口。
初始化 Rancher 设置
至此,我们已经完成Rancher Server的安装。
现在可以通过https://IP:9999
进入管理后台,进行初始化的设置。
证书错误问题
由于我们没有使用第三方的权威SSL证书,所以打开时会报证书错误的问题。
点开高级
,选择继续前往……
即可。
设置登录密码
跟着指示设置即可。
设置 Rancher Server URL
由于我的集群都部署在内网,后续为安全起见,所以此处填写内网IP。
开启Catalog
此处有坑请注意
有可能出现诸如“WebSocket连接失败”之类的问题,其实都是因为证书错误导致的。
按下F12
打开Chrome控制台,如果看到红色的报错(ERR_CERT_ERROR之类的),那么就新建一个TAB打开加载失败的文件,重复上面“证书错误问题”的解决方式。
再回到Rancher页面刷新就可以正常访问了。
新建集群
- 进入Rancher管理界面,点击右上角的
Add Cluster
。 - 新建一个
Custom
的集群,下面的etcd
、Controller
、Worker
都勾选。 - 接着将上面的代码复制到每台机器都执行一次
- 等待集群初始化完毕(全都绿了就完了)。
设置基于NAS的StorageClass
我们打算使用阿里云的NAS做容器的持久化数据存储。
由于Rancher并没有自带基于NFS的StorageClass Provisoner,所以我们要自行安装一个。
安装 nfs-client-provisioner
按照nfs-client-provisioner的说明配置即可,步骤如下:
从左上角进入Project,点击右侧的Import YAML
,按以下顺序依次导入即可。
创建RBAC
记得要修改clusterrolebinding.yaml
第8行的namespace
。
部署Provisioner
记得要修改其中的:PROVISIONER_NAME
、NFS_SERVER
、NFS_PATH
,以及volumes
里的NFS配置信息。
配置StorageClass
- 进入
Rancher
->Cluster
->Storage
->Storage Classes
。 - 点击右侧
Add Class
- name随便填
- Provisioner填写为刚才
deploy/deployment.yaml
中配置的PROVISIONER_NAME
- 点击
Save
- 最后,点开右边的三个点,
Set as Default
。
部署OpenVPN
- 进入
Catalog
- 安装
openvpn
- 设置Answer
service.type=NodePort
service.nodePort=31888
- Execute Shell,初始化Client证书
/etc/openvpn/setup/newClientCert.sh 用户名
- Upgrade
openvpn
,打开priviledge
权限
- 进入新的Pod的Shell,执行以下命令
echo 1 > /proc/sys/net/ipv4/ip_forward && \
sysctl -p
部署MongoDB集群
- 进入Catalog
- 安装Mongodb-Replicaset
- 配置Answer
auth.enabled=true
auth.adminUser=root
auth.adminPassword=password
auth.key=key
installImage.repository=registry-vpc.cn-beijing.aliyuncs.com/honghegame/k8s.gcr.io-mongodb-install
installImage.tag=latest
由于国内gcr.io
无法访问,所以需要通过以上Answer修改为阿里云镜像。
安装完成后,mongodb-replicaset-test
这个Pod会报错,原因不明。
但由于不影响实际使用,直接删除即可。
部署MySQL集群
- 进入
Catalog
- 安装
mysqlha
- 配置Answer
xtraBackupImage=registry-vpc.cn-beijing.aliyuncs.com/honghegame/gcr.io-google-samples-xtrabackup:latest
由于国内gcr.io
无法访问,所以需要通过以上Answer修改为阿里云镜像。
部署Redis集群
- 进入
Catalog
- 安装
redis
(Library中的即可)
- 按照设置设置即可
部署持续集成
部署Jenkins
- 进入
Catalog
- 安装
Jenkins
- 配置
Answer
Agent.Enabled=false
Master.AdminPassword=password
Master.ServiceType=ClusterIP
rbac.install=true
- 删除报错的test的POD
安装NodeJS
注意:以下安装的是NodeJS 8.x版本
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
##设置JenkinsHome目录映射
ln -s /nfs/jenkins-jenkins-pvc-630f23f7-5a77-11e8-bdbc-00163e0a3584 /var/jenkins_home
设置第一个CI任务
未完待续