rancher2.3.3详细部署文档
rancher 简介
rancher 是全栈化企业级容器应用解决方案
Rancher为容器提供一揽子基础架构服务:CNI兼容的网络服务、存储服务、主机管理、负载均衡、防护墙……
Rancher让上述服务跨越公有云、私有云、虚拟机、物理机环境运行,真正实现一键式应用部署和管理。
Rancher可以与各种CI/CD工具协同工作,可以实现开发、测试、预生产和生产环境的自动部署,提供整体可视化的主机、容器、网络及存储管理,大幅简化运维人员故障排除和生产部署的工作量。
基础环境配置
主机配置
主机名配置
因为K8S的规定,主机名只支持包含 - 和 .(中横线和点)两种特殊符号,并且主机名不能出现重复。
- 1.Hosts
配置每台主机的hosts(/etc/hosts),添加host_ip $hostname到/etc/hosts文件中。
- 2.CentOS关闭selinux
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
- 3.关闭防火墙(可选)或者放行相应端口
对于刚刚接触Rancher的用户,建议在关闭防火墙的测试环境或桌面虚拟机来运行rancher,以避免出现网络通信问题。
1.关闭防火墙
CentOS
systemctl stop firewalld.service && systemctl disable firewalld.service
- Ubuntu
ufw disable
- 2.端口放行
端口放行请查看端口需求
PROTOCOL | PORT | DESCRIPTION |
---|---|---|
TCP | 22 | Node driver SSH provisioning |
TCP | 2376 | Node driver Docker daemon TLS port |
TCP | 2379 | etcd client requests |
TCP | 2380 | etcd peer communication |
UDP | 8472 | Canal/Flannel VXLAN overlay networking |
UDP | 4789 | Flannel VXLAN overlay networking on Windows cluster |
TCP | 9099 | Canal/Flannel livenessProbe/readinessProbe |
TCP | 6783 | Weave Port |
UDP | 6783-6784 | Weave UDP Ports |
TCP | 10250 | kubelet API |
TCP | 10254 | Ingress controller livenessProbe/readinessProbe |
TCP/UDP | 30000- 32767 | NodePort port range |
-
4.配置主机时间、时区、系统语言
1. 查看时区
date -R或者timedatectl
2. 修改时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3.修改系统语言环境
4. 配置主机NTP时间同步
5.配置主机DNS
对于类似Ubuntu 18这类默认使用systemd-resolve管理DNS的系统,建议禁用systemd-resolved服务,然后手动配置DNS。
操作方法:
- 禁用systemd-resolved.service
systemctl disable systemd-resolved.service
systemctl stop systemd-resolved.service
rm -rf /etc/resolv.conf ; touch /etc/resolv.conf
systemctl daemon-reload ; systemctl restart docker
3.重启docker服务
systemctl daemon-reload
systemctl restart docker
Kernel性能调优
cat >> /etc/sysctl.conf<
数值根据实际环境自行配置,最后执行sysctl -p保存配置
docker 安装配置
Docker 安装
- 修改数据源
Centos7.x
yum install ca-certificates ;
update-ca-trust;
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo-bak
cat << 'EOF' > /etc/yum.repos.d/CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
EOF
docker-ce 安装
- centos
因为CentOS的安全限制,通过RKE安装K8S集群时候无法使用root账户。所以,建议CentOS用户使用非root用户来运docker,不管是RKE还是custom安装k8s,详情查看无法为主机配置SSH隧道。
# 定义用户名
NEW_USER=rancher
# 添加用户(可选)
sudo adduser $NEW_USER
# 为新用户设置密码
sudo passwd $NEW_USER
# 为新用户添加sudo权限
sudo echo "$NEW_USER ALL=(ALL) ALL" >> /etc/sudoers
# 卸载旧版本Docker软件
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
container*
# 定义安装版本
export docker_version=18.06.3
# 对系统进行全面的更新升级,推荐升级一下(可选)
sudo yum update -y;
# 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data \
lvm2 bash-completion;
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo;
# Step 3: 更新并安装 Docker-CE
sudo yum makecache all;
version=$(yum list docker-ce.x86_64 --showduplicates | sort -r|grep ${docker_version}|awk '{print $2}');
sudo yum -y install --setopt=obsoletes=0 docker-ce-${version} docker-ce-selinux-${version};
# 如果已经安装高版本Docker,可进行降级安装(可选)
yum downgrade --setopt=obsoletes=0 -y docker-ce-${version} docker-ce-selinux-${version};
# 把当前用户加入docker组
sudo usermod -aG docker $NEW_USER;
# 设置开机启动
sudo systemctl enable docker;
Docker-engine
Docker-Engine Docker官方已经不推荐使用,请安装Docker-CE。
锁定docker 版本
可能因为某些原因无意间执行了yum update或者apt-get -y upgrade;导致Docker版本升级。为了避免此类问题发生,建议在安装好Docker后对Docker软件进行锁定,防止Docker意外更新。
- centos
1. 安装yum-plugin-versionlock插件
yum install yum-plugin-versionlock
2. 锁定软件包
yum versionlock add docker-ce docker-ce-cli
[root@izwz969o7lu6t9lh4ta6m5z ~]# yum versionlock add docker-ce docker-ce-cli
已加载插件:fastestmirror, versionlock
Adding versionlock on: 0:docker-ce-17.06.2.ce-3.el7.centos
versionlock added: 1
[root@izwz969o7lu6t9lh4ta6m5z ~]#
3. 查看已锁定的软件包
yum versionlock list
4. 解锁指定的软件包
yum versionlock delete <软件包名称>
5. 解锁所有的软件包
yum versionlock clear
docker配置
对于通过systemd来管理服务的系统(比如CentOS7.X、Ubuntu16.X), Docker有两处可以配置参数: 一个是docker.service服务配置文件,一个是Docker daemon配置文件daemon.json。
1.docker.service
对于CentOS系统,docker.service默认位于/usr/lib/systemd/system/docker.service;对于Ubuntu系统,docker.service默认位于/lib/systemd/system/docker.service
2. daemon.json
daemon.json默认位于/etc/docker/daemon.json,如果没有可手动创建,基于systemd管理的系统都是相同的路径。通过修改daemon.json来改过Docker配置,也是Docker官方推荐的方法。
以下说明均基于systemd,并通过/etc/docker/daemon.json来修改配置。
3. 配置镜像下载和上传并发数
从Docker1.12开始,支持自定义下载和上传镜像的并发数,默认值上传为3个并发,下载为5个并发。通过添加"max-concurrent-downloads"和"max-concurrent-uploads"参数对其修改:
"max-concurrent-downloads": 3,
"max-concurrent-uploads": 5
4. 配置镜像加速地址
Rancher从v1.6.15开始到v2.x.x,Rancher系统相关的所有镜像(包括1.6.x上的K8S镜像)都托管在Dockerhub仓库。Dockerhub节点在国外,国内直接拉取镜像会有些缓慢。为了加速镜像的下载,可以给Docker配置国内的镜像地址。
编辑/etc/docker/daemon.json加入以下内容
{
"registry-mirrors": ["https://XXXX.mirror.aliyuncs.com/","https://IP:PORT/"]
}
可以设置多个registry-mirrors地址,以数组形式书写,地址需要添加协议头(https或者http)。
- 配置insecure-registries私有仓库
Docker默认只信任TLS加密的仓库地址(https),所有非https仓库默认无法登陆也无法拉取镜像。insecure-registries字面意思为不安全的仓库,通过添加这个参数对非https仓库进行授信。可以设置多个insecure-registries地址,以数组形式书写,地址不能添加协议头(http)。
编辑/etc/docker/daemon.json加入以下内容:
{
"insecure-registries": ["192.168.1.100","IP:PORT"]
}
- 配置Docker存储驱动
OverlayFS是一个新一代的联合文件系统,类似于AUFS,但速度更快,实现更简单。Docker为OverlayFS提供了两个存储驱动程序:旧版的overlay,新版的overlay2(更稳定)。
先决条件:
overlay2: Linux内核版本4.0或更高版本,或使用内核版本3.10.0-514+的RHEL或 CentOS。
overlay: 主机Linux内核版本3.18+
-
支持的磁盘文件系统
ext4(仅限RHEL 7.1)
xfs(RHEL7.2及更高版本),需要启用d_type=true。
具体详情参考 Docker Use the OverlayFS storage driver
编辑/etc/docker/daemon.json加入以下内容
{
"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"]
}
7.配置日志驱动
容器在运行时会产生大量日志文件,很容易占满磁盘空间。通过配置日志驱动来限制文件大小与文件的数量。
限制单个日志文件为100M,最多产生3个日志文件
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
8.Ubuntu\Debian系统 ,docker info提示WARNING: No swap limit support
Ubuntu\Debian系统下,默认cgroups未开启swap account功能,这样会导致设置容器内存或者swap资源限制不生效。可以通过以下命令解决:
# 统一网卡名称为ethx
sudo sed -i 's/en[[:alnum:]]*/eth0/g' /etc/network/interfaces;
sudo sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="net.ifnames=0 cgroup_enable=memory swapaccount=1 biosdevname=0 \1"/g' /etc/default/grub;
sudo update-grub;
注意 通过以上命令可自动配置参数,如果/etc/default/grub非默认配置,需根据实际参数做调整。 提示 以上配置完成后,建议重启一次主机。
rancher 安装
单节点在线安装
配置ssl 证书并安装rancher
出于安全考虑,使用Rancher时需要SSL进行加密。SSL可以保护所有Rancher网络通信,例如登录或与集群交互。
1. 方案A-使用默认自签名证书
默认情况下,Rancher会自动生成一个用于加密的自签名证书。从您的Linux主机运行Docker命令来安装Rancher,而不需要任何其他参数:
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v <主机路径>:/var/lib/rancher/ \
-v /root/var/log/auditlog:/var/log/auditlog \
-e CATTLE_SYSTEM_CATALOG=bundled \
-e AUDIT_LEVEL=3 \
rancher/rancher:stable (或者rancher/rancher:latest)
2. 方案B-使用您自己的自签名证书
Rancher安装可以使用自己生成的自签名证书,如果没有自签名证书,可一键生成自签名ssl证书。
提示
使用OpenSSL或其他方法创建自签名证书。
这里的证书不需要进行base64加密。
证书文件必须是PEM格式。
在您的证书文件中,包含链中的所有中间证书。有关示例,请参考SSL常见问题/故障排除。
您的Rancher安装可以使用您提供的自签名证书来加密通信。创建证书后,运行docker命令时把证书文件映射到容器中。
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v <主机路径>:/var/lib/rancher/ \
-v /var/log/rancher/auditlog:/var/log/auditlog \
-e AUDIT_LEVEL=3 \
-v /etc//tls.crt:/etc/rancher/ssl/cert.pem \
-v /etc//tls.key:/etc/rancher/ssl/key.pem \
-v /etc//cacerts.pem:/etc/rancher/ssl/cacerts.pem \
rancher/rancher:stable (或者rancher/rancher:latest)
3. 方案C-使用权威CA机构颁发的证书
如果您公开发布您的应用,理想情况下应该使用由权威CA机构颁发的证书。
提示
证书必须是PEM格式,PEM只是一种证书类型,并不是说文件必须是PEM为后缀,具体可以查看证书类型。
确保容器包含您的证书文件和密钥文件。由于您的证书是由认可的CA签署的,因此不需要安装额外的CA证书文件。
给容器添加--no-cacerts参数禁止Rancher生成默认CA证书。
这里的证书不需要进行base64加密。
获取证书后,运行Docker命令以部署Rancher,同时指向证书文件。
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v <主机路径>:/var/lib/rancher/ \
-v /root/var/log/auditlog:/var/log/auditlog \
-e CATTLE_SYSTEM_CATALOG=bundled \
-e AUDIT_LEVEL=3 \
-v /etc//tls.crt:/etc/rancher/ssl/cert.pem \
-v /etc//tls.key:/etc/rancher/ssl/key.pem \
rancher/rancher:stable (或者rancher/rancher:latest) --no-cacerts
参考rancher官方文档
参考leileitang的博客