一、安装准备

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",并增加 IPADDRNETMASKGATEWAYDNS1

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
作者:Jeebiz  创建时间:2019-08-14 15:11
 更新时间:2024-08-02 14:28