研究生期间,利用学校的云服务器搭建了一个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
| 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
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
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官方文档
- 使用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
|
- 启动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
|
- 把证书文件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
| /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
挂载NFS
1
| mount -t nfs 10.77.70.135:/home/centos/share <>
|