0%

基于k8s+rancher+NFS搭建云平台

研究生期间,利用学校的云服务器搭建了一个k8s集群,使用rancher来做管理软件。我们使用rancher来作为我们的测试发布平台,相比于原始的docker,这种模式更简单快捷。但是面临一些问题,比如缺少一个好的日志工具,来收集和统一查看(短暂的搭建过ELF,但是没有使用起来);

其次缺少一个存储平台,比如集群一共有16台服务器,我要启动若干个服务测试,服务的调度交由k8s调度,每个服务有着自己的配置文件。发现问题了吧,服务可能会出现在16台服务器中的任意一台上,所以需要拷贝16份副本放在素有服务器的相同位置。开始我们搭建了一套NFS,但是随着测试规模越来越大,NFS的写入成为了测试系统的瓶颈点(后文会具体提到原因)。所以后来采抛弃了这个方案,选择在在部署时候,把同一份文件拷贝到所有服务器上,这样的代价就是一次部署测试的时间会很长。

现在也没有更好的解决方案,选择还是回退到NFS,但和原来的稍有不同,等有时间在详细写写

persistent volume

搭建rancher

前置(安装docker)

1
2
3
4
5
6
7
8
9
10
11
12
13
#step0 設置DNS
echo "DNS1=8.8.8.8" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "DNS2=8.8.4.4" >> /etc/sysconfig/network-scripts/ifcfg-eth0
sudo systemctl restart network

# step1 安裝docker
sudo yum update -y
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce-18.03.1.ce -y
# 配置docker开机自启
sudo systemctl start docker
sudo systemctl enable docker

背景:需要一个工具,帮助我们管理集群资源,以及能够提供部署方案。采用kubernetes(k8s) + rancher的方案

我们选择rancher2.4+版本,原因因为2.5+删除了一键增加节点的方式,懒得折腾了

安装rancher server

1
2
3
4
5
6
docker run -d \
--restart=unless-stopped \
--privileged \
-p 80:80 -p 443:443 \
-v /opt/rancher:/var/lib/rancher \
rancher/rancher:v2.4.16

导入主机

1
sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.4.16 --server https://10.77.70.135 --token {token} --worker

passwd:RUC500

搭建私有镜像库

详细过程可以查看docker registry官方文档

  1. 使用openssl生成私有证书。openssl配置文件的参数说明可以查看openssl.cnf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ cat ssl.config 
[ req ]
prompt = no /* 设置为no将不提示输入DN field,而是直接从配置文件中读取,需要同时设置DN默认值,否则创建证书请求时将出错。 */
distinguished_name = req_subj /* 可识别的字段名(常被简称为DN) */
x509_extensions = x509_ext /* 加入到自签证书中的扩展项 */

[ req_subj ]
CN = Localhost

[ x509_ext ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
basicConstraints = CA:true /* 基本约束,CA:FALSE表示该证书不能作为CA证书,即不能给其他人颁发证书*/
subjectAltName = @alternate_names

[ alternate_names ] 带有 SAN 扩展
DNS.1 = localhost
IP.1 = 10.77.70.135

$ openssl req -config ssl.conf -new -x509 -nodes -sha256 -days 365 -newkey rsa:4096 -keyout /certs/domain.key -out /certs/domain.crt
  1. 启动registry镜像,对外暴露的端口为4433
1
2
3
4
5
6
7
8
9
10
docker run -d \
--restart=always \
--name ruc_registry \
-v /opt/docker/certs:/certs \
-v /opt/docker/registry:/var/lib/registry \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=//certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
-p 4433:443 \
registry:2
  1. 把证书文件domain.crt发送给其他要使用该私有镜像库的服务器

    路径为/etc/docker/certs.d/<docker registry url>,文件名为ca.crt

1
mkdir -p /etc/docker/certs.d/10.77.70.135:4433

NFS

搭建NFS系统:以10.77.70.135为master server(centos服务器

1
2
3
4
5
6
# 安装
yum -y install rpcbind nfs-utils

# 创建同步的文件夹
mkdir /data/share/
chmod 755 -R /data/share/

配置NFS参数

1
2
# /etc/exports文件添加记录
/home/centos/share 10.77.70.0/24(rw,no_root_squash,no_all_squash,sync)

启动NFS服务

1
2
systemctl start rpcbind
systemctl start nfs

重启NFS

1
sudo exportfs -r

挂载NFS

1
mount -t nfs 10.77.70.135:/home/centos/share  <>