一、安装准备
1、系统要求
最低要求 | |
---|---|
CPU | 支持 64 位的 Intel® 或 AMD 处理器*;2 GHz 或速度更快的处理器 |
内存 | 8 GB 或更大 RAM(推荐使用 16 GB) |
硬盘 | 需要 50GB 以上的可用磁盘空间 |
操作系统 | Centos/RedHat Linux 7.5+(64位) 或更高版本 |
2、软件要求
- Docker 安装包
- 支持的Docker版本:
17.03.x
18.06.x
18.09.x
二、系统设置
1、设置镜像源
因为国外镜像网速较慢,推荐设置阿里云镜像源:https://opsx.alibaba.com/mirror
1.1、备份
[root@rancher ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
1.2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/
[root@rancher ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或者
[root@rancher ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
1.3、之后运行yum makecache生成缓存
[root@docker]# sudo yum makecache all;
1.4、执行yum update 更新系统组件到最新版本
[root@docker]# sudo yum update -y;
2、配置静态IP
通常在/etc/sysconfig/network-scripts
目录下都会有 ifcfg-eth0
格式文件,修改该文件内容:
[root@rancher ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
主要修改BOOTPROTO="static"
、ONBOOT="yes"
,并增加 IPADDR
、NETMASK
、GATEWAY
、DNS1
。
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth0"
UUID="5b07acd3-b8bf-4a9e-b471-8e6330f2b622"
DEVICE="eth0"
ONBOOT="yes"
IPADDR=192.168.1.102
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=119.29.29.29
ZONE=public
重启网卡
[root@rancher ~]# service network restart
3、关闭防火墙
常用命令
[root@rancher]# systemctl start firewalld 启动
[root@rancher]# systemctl stop firewalld 关闭
[root@rancher]# systemctl status firewalld 查看状态
[root@rancher]# systemctl disable firewalld 开机禁用
[root@rancher]# systemctl enable firewalld 开机启用
三、环境设置
官方文档:https://www.cnrancher.com/docs/rancher/v2.x/cn/install-prepare/basic-environment-configuration/
1、主机配置
1.1、配置要求
硬件要求根据Rancher部署的K8S集群规模大小进行扩展,根据要求配置每个节点。
单节点安装需求
部署规模 | 集群数 | Nodes | vCPUs | RAM |
---|---|---|---|---|
小 | 最多5个 | 最多50个 | 1 | 4 GB |
中 | 最多15个 | 最多200个 | 2 | 8 GB |
1.2、主机名配置
因为K8S的规定,主机名只支持包含-
和.
(中横线和点)两种特殊符号,并且主机名不能出现重复。
1.3、Hosts
配置每台主机的hosts(/etc/hosts),添加host_ip $hostname
到/etc/hosts
文件中。
[root@rancher]# echo "x.x.x.x rancher.k8s" >> /etc/hosts
请替换其中的 x.x.x.x 为您的 rancher 的实际 ip 地址。(如果 rancher 同时有内网IP和外网IP,此处请使用内网IP); rancher.k8s 可根据情况进行调整
1.4、CentOS关闭selinux
[root@rancher]# sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
1.5、关闭防火墙(可选)或者放行相应端口
如果宿主机处于安全的内网环境内,可以关闭防火墙来运行Rancher,否则必须开放指定端口,以避免出现网络通信问题。
关闭防火墙:
[root@rancher]# systemctl stop firewalld.service && systemctl disable firewalld.service
端口放行:
端口放行请查看 端口需求
1.6、配置主机时间、时区、系统语言
查看时区
[root@rancher]# date -R 或者 timedatectl
修改时区
[root@rancher]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
修改系统语言环境
[root@rancher]# sudo echo 'LANG="en_US.UTF-8"' >> /etc/profile;source /etc/profile
配置主机NTP时间同步
4.1、配置主机时间、时区、系统语言
查看时区
[root@rancher]# date -R 或者 timedatectl
修改时区
[root@rancher]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
修改系统语言环境
[root@rancher]# sudo echo 'LANG="en_US.UTF-8"' >> /etc/profile;source /etc/profile
配置主机NTP时间同步
yum install ntp ntpdate -y
选择Rancher服务作为 ntp 时间服务器,修改/etc/ntp.conf文件,删除:
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
改为
server ntp3.aliyun.com iburst
另外,原始文件中有一行为如下内容:
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
去掉#打开注释,并将其ip修改服务器所在网段,比如服务器的ip地址为192.168.1.114,则该项改为:
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
在Rancher管理的K8s集群中的其他服务器上,也要修改此文件,删除掉:
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
加入:
server 192.168.1.114 prefer
保存后退出,在集群中的所有服务器上执行如下命令:
service ntpd restart
systemctl disable chronyd.service
systemctl enable ntpd.service
在集群中Rancher服务器以外的服务器上执行:
ntpq -p
出现以下结果:
remote refid st t when poll reach delay offset jitter
==============================================================================
*124.108.20.1 127.67.113.92 2 u 53 64 1 163.872 15.107 0.400
192.168.1.114 193.228.143.14 3 u 62 64 1 0.285 4.458 0.000
说明时间已经同步。
1.7、Kernel 性能调优
通过如下命令进行宿主机内核性能调优,实际参数数值根据实际环境自行配置,最后执行
sysctl -p
保存配置。
cat >> /etc/sysctl.conf<<EOF
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.neigh.default.gc_thresh1=4096
net.ipv4.neigh.default.gc_thresh2=6144
net.ipv4.neigh.default.gc_thresh3=8192
EOF
1.8、内核模块
警告
如果要使用ceph存储相关功能,需保证worker节点加载RBD
模块
以下模块需要在主机上加载:
#####################################模块名称##################################### |
---|
br_netfilter |
ip6_udp_tunnel |
ip_set |
ip_set_hash_ip |
ip_set_hash_net |
iptable_filter |
iptable_nat |
iptable_mangle |
iptable_raw |
nf_conntrack_netlink |
nf_conntrack |
nf_conntrack_ipv4 |
nf_defrag_ipv4 |
nf_nat |
nf_nat_ipv4 |
nf_nat_masquerade_ipv4 |
nfnetlink |
udp_tunnel |
VETH |
VXLAN |
x_tables |
xt_addrtype |
xt_conntrack |
xt_comment |
xt_mark |
xt_multiport |
xt_nat |
xt_recent |
xt_set |
xt_statistic |
xt_tcpudp |
模块查询: lsmod | grep <模块名>
模块加载: modprobe <模块名>
更多实优化参考如下地址:
https://www.cnrancher.com/docs/rancher/v2.x/cn/install-prepare/best-practices/
四、服务安装
1、Docker安装与配置
1.1、Docker 安装
因为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
# step 1: 安装必要的一些系统工具
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 install -y --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;
sudo systemctl restart docker
详细内容请参考 >> Docker CE 安装说明
更多配置可以访问:https://www.cnrancher.com/docs/rancher/v2.x/cn/install-prepare/best-practices/
2、安装和配置kubectl
kubectl是一个CLI命令行工具,用于运行Kubernetes集群的命令。Rancher 2.x中的许多维护和管理都需要它。
2.1、安装kubectl
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
sudo yum install -y kubelet kubeadm kubectl
sudo yum install -y kubelet-1.15.2 kubeadm-1.15.2 kubectl-1.15.2
3、Rancher 安装与配置
3.1、外部数据库
3.1、配置SSL证书并安装Rancher
要想在主机上安装Rancher,需要先登录到主机上,接着进行以下步骤:
1、通过shell工具(例如PuTTy或远程终端连接)登录到主机
2、在shell中执行以下命令:
出于安全考虑,使用Rancher时需要SSL进行加密。SSL可以保护所有Rancher网络通信,例如登录或与集群交互。
- 方案A-使用默认自签名证书
默认情况下,Rancher会自动生成一个用于加密的自签名证书。从您的Linux主机运行Docker命令来安装Rancher,而不需要任何其他参数:
docker run -d --restart=unless-stopped --privileged \
-p 80:80 -p 443:443 \
-v <主机路径>:/var/lib/rancher/ \
-v /root/var/log/auditlog:/var/log/auditlog \
-e AUDIT_LEVEL=3 \
rancher/rancher:stable (或者rancher/rancher:latest)
如:
docker run -d --restart=unless-stopped --privileged \
-p 80:80 -p 443:443 \
-v /var/lib/rancher/ \
-v /root/var/log/auditlog:/var/log/auditlog \
-e AUDIT_LEVEL=3 \
-e AUDIT_LOG_PATH=/var/log/auditlog/rancher-api-audit.log \
-e AUDIT_LOG_MAXAGE=20 \
-e AUDIT_LOG_MAXBACKUP=20 \
-e AUDIT_LOG_MAXSIZE=100 \
rancher/rancher:stable
- 方案B-使用您自己的自签名证书
Rancher安装可以使用自己生成的自签名证书,如果没有自签名证书,可一键生成自签名ssl证书。
先决条件:
- 使用OpenSSL或其他方法创建自签名证书。
- 这里的证书不需要进行base64加密。
- 证书文件必须是PEM格式。
- 在您的证书文件中,包含链中的所有中间证书。有关示例,请参考SSL常见问题/故障排除。
您的Rancher安装可以使用您提供的自签名证书来加密通信。创建证书后,运行docker命令时把证书文件映射到容器中。
docker run -d --restart=unless-stopped --privileged \
-p 80:80 -p 443:443 \
-v <主机路径>:/var/lib/rancher/ \
-v /var/log/rancher/auditlog:/var/log/auditlog \
-e AUDIT_LEVEL=3 \
-v /etc/<CERT_DIRECTORY>/<FULL_CHAIN.pem>:/etc/rancher/ssl/cert.pem \
-v /etc/<CERT_DIRECTORY>/<PRIVATE_KEY.pem>:/etc/rancher/ssl/key.pem \
-v /etc/<CERT_DIRECTORY>/<CA_CERTS.pem>:/etc/rancher/ssl/cacerts.pem \
rancher/rancher:stable (或者rancher/rancher:latest)
- 方案C-使用权威CA机构颁发的证书
如果您公开发布您的应用,理想情况下应该使用由权威CA机构颁发的证书。
先决条件:
1.证书必须是PEM格式,PEM只是一种证书类型,并不是说文件必须是PEM为后缀,具体可以查看证书类型。
2.确保容器包含您的证书文件和密钥文件。由于您的证书是由认可的CA签署的,因此不需要安装额外的CA证书文件。
3.给容器添加–no-cacerts参数禁止Rancher生成默认CA证书。
4.这里的证书不需要进行base64加密。
获取证书后,运行Docker命令以部署Rancher,同时指向证书文件。
docker run -d --restart=unless-stopped --privileged \
-p 80:80 -p 443:443 \
-v <主机路径>:/var/lib/rancher/ \
-v /root/var/log/auditlog:/var/log/auditlog \
-e AUDIT_LEVEL=3 \
-v /etc/your_certificate_directory/fullchain.pem:/etc/rancher/ssl/cert.pem \
-v /etc/your_certificate_directory/privkey.pem:/etc/rancher/ssl/key.pem \
rancher/rancher:stable (或者rancher/rancher:latest) --no-cacerts
如:
/etc/hiwepy.eicp.vip/
docker run -d --restart=unless-stopped --privileged \
-p 80:80 -p 443:443 \
-v /var/lib/rancher/ \
-v /root/var/log/auditlog:/var/log/auditlog \
-e AUDIT_LEVEL=3 \
-e AUDIT_LOG_PATH=/var/log/auditlog/rancher-api-audit.log \
-e AUDIT_LOG_MAXAGE=20 \
-e AUDIT_LOG_MAXBACKUP=20 \
-e AUDIT_LOG_MAXSIZE=100 \
-v /etc/hiwepy.eicp.vip/fullchain.pem:/etc/rancher/ssl/cert.pem \
-v /etc/hiwepy.eicp.vip/privkey.pem:/etc/rancher/ssl/key.pem \
rancher/rancher:stable --no-cacerts
3.2、Rancher 配置
登录并开始使用Rancher。登录后,您将进行一些一次性配置。
Rancher Server容器启动很快速,不到一分钟您就可以通过 https://<server_ip>
访问Rancher UI。
一旦Rancher Server成功安装,用户界面将指导您添加第一个集群
1、打开浏览器,输入https://<server_ip>
,server_ip替换为运行Rancher容器主机的ip;
2、因为是自动使用的自签名证书,在第一次登录会提示安全授信问题,信任即可;
3、设置管理员密码
第一次登录会要求设置管理员密码,默认管理员账号为: admin
如果没有设置密码而要求输入当前密码,可以输入密码: admin
4、设置Rancher Server URL
Rancher Server URL是agent节点注册到Rancher Serverd的地址,需要保证这个地址能够被agent主机访问,不要设置为127.0.0.1
或者localhost
。
3.3、手动清理节点(安装异常时)
将节点添加到集群时后,会创建容器、虚拟网络接口等资源和证书、配置文件。从集群中正常删除节点时(如果处于Active状态),将自动清除这些资源,并且只需重新启动节点即可。当节点无法访问且无法使用自动清理,或者异常导致节点脱离集群后,如果需要再次将节点加入集群,那么需要手动进行节点初始化操作。
警告:
以下操作将删除节点中的数据,在执行命令之前,请确保已进行数据备份。
# 停止服务
systemctl disable kubelet.service
systemctl disable kube-scheduler.service
systemctl disable kube-proxy.service
systemctl disable kube-controller-manager.service
systemctl disable kube-apiserver.service
systemctl stop kubelet.service
systemctl stop kube-scheduler.service
systemctl stop kube-proxy.service
systemctl stop kube-controller-manager.service
systemctl stop kube-apiserver.service
# 删除所有容器
docker rm -f $(docker ps -qa)
# 删除所有容器卷
docker volume rm $(docker volume ls -q)
# 卸载mount目录
for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher; do umount $mount; done
# 备份目录
mv /etc/kubernetes /etc/kubernetes-bak-$(date +"%Y%m%d%H%M")
mv /var/lib/etcd /var/lib/etcd-bak-$(date +"%Y%m%d%H%M")
mv /var/lib/rancher /var/lib/rancher-bak-$(date +"%Y%m%d%H%M")
mv /opt/rke /opt/rke-bak-$(date +"%Y%m%d%H%M")
# 删除残留路径
rm -rf /etc/ceph \
/etc/cni \
/opt/cni \
/run/secrets/kubernetes.io \
/run/calico \
/run/flannel \
/var/lib/calico \
/var/lib/cni \
/var/lib/kubelet \
/var/log/containers \
/var/log/pods \
/var/run/calico
# 清理网络接口
network_interface=`ls /sys/class/net`
for net_inter in $network_interface;
do
if ! echo $net_inter | grep -qiE 'lo|docker0|eth*|ens*';then
ip link delete $net_inter
fi
done
# 清理残留进程
port_list='80 443 6443 2376 2379 2380 8472 9099 10250 10254'
for port in $port_list
do
pid=`netstat -atlnup|grep $port |awk '{print $7}'|awk -F '/' '{print $1}'|grep -v -|sort -rnk2|uniq`
if [[ -n $pid ]];then
kill -9 $pid
fi
done
pro_pid=`ps -ef |grep -v grep |grep kube|awk '{print $2}'`
if [[ -n $pro_pid ]];then
kill -9 $pro_pid
fi
# 清理Iptables表
## 注意:如果节点Iptables有特殊配置,以下命令请谨慎操作
sudo iptables --flush
sudo iptables --flush --table nat
sudo iptables --flush --table filter
sudo iptables --table nat --delete-chain
sudo iptables --table filter --delete-chain
systemctl restart docker
更新时间:2024-08-02 14:28