rancher高可用部署

1,155 阅读3分钟

1 主机配置

在每台部署机器上执行主机配置

1) 主机名配置

因为K8S的规定,主机名只支持包含 - 和 .(中横线和点)两种特殊符号,并且主机名不能出现重复。

2) Hosts配置

配置每台主机的hosts(/etc/hosts),添加host_ip $hostname到/etc/hosts文件中。

3) 关闭selinux

sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

4) 关闭防火墙

systemctl stop firewalld.service && systemctl disable firewalld.service

5) 配置主机时间、时区、系统语言

查看时区
date -R或者timedatectl
修改时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
修改系统语言环境
sudo echo 'LANG="en_US.UTF-8"' >> /etc/profile;source /etc/profile
配置主机NTP时间同步

6) Kernel性能调优

echo "
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
net.ipv4.conf.all.forwarding=1
net.ipv4.neigh.default.gc_thresh1=128
net.ipv4.neigh.default.gc_thresh2=6144
net.ipv4.neigh.default.gc_thresh3=8192
net.ipv4.neigh.default.gc_interval=60
net.ipv4.neigh.default.gc_stale_time=120
kernel.perf_event_paranoid=-1
kernel.softlockup_panic=0
kernel.watchdog_thresh=30
fs.file-max=2097152
fs.inotify.max_user_instances=8192
fs.inotify.max_queued_events=16384
fs.inotify.max_user_watches=524288
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1
kernel.yama.ptrace_scope=0
vm.swappiness=0
kernel.core_uses_pid=1
net.ipv4.conf.default.promote_secondaries=1
net.ipv4.conf.all.promote_secondaries=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_synack_retries=2
net.ipv4.tcp_max_syn_backlog=8096
kernel.sysrq=1
net.ipv4.tcp_tw_recycle=0
" >> /etc/sysctl.conf

数值根据实际环境自行配置,最后执行sysctl -p保存配置。

cat >> /etc/security/limits.conf <<EOF
* soft nofile 65535
* hard nofile 65536
EOF

7) 内核模块

以下模块需要在主机上加载

	module_list='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'

	for module in $module_list;
	do
		  if ! lsmod | grep -q $module; then
				echo "module $module is not present"
				modprobe $module
		  fi
	done;

2 docker 部署

每台部署机器上执行docker安装

1) 下载解压docker-18.09.6.tgz

tar -zxvf docker-18.09.6.tgz

2) 复制到/usr/bin目录

cp docker/* /usr/bin/

3) 配置dockerd启动项

cat > /etc/docker/daemon.json <<EOF
{
    "oom-score-adjust": -1000,
    "log-driver": "json-file",
    "log-opts": {
    "max-size": "100m",
    "max-file": "3"
    },
    "max-concurrent-downloads": 10,
    "max-concurrent-uploads": 10,
    "bip": "192.168.100.1/24",
"registry-mirrors": ["https://harbor01.io"],
"insecure-registries": [
  "harbor01.io"
],
    "storage-driver": "overlay2",
    "storage-opts": [
    "overlay2.override_kernel_check=true"
],
"graph": "/export/docker",
"hosts":["unix:///var/run/docker.sock", "tcp://0.0.0.0:8100"]
}
EOF

4) 配置dockerd到systemd

cat > /usr/lib/systemd/system/docker.service <<EOF
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target docker.socket
[Service]
OOMScoreAdjust=-1000
Type=notify
EnvironmentFile=-/run/flannel/docker
WorkingDirectory=/usr/bin
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
  1. 启动
systemctl daemon-reload
systemctl start docker
systemctl enable docker.service

3 harbor部署

在其中一台机器上部署镜像仓库

1) 下载安装docker-compose

mv docker-compose /usr/bin/
chmod +x /usr/bin/docker-compose
  1. 下载解压harbor安装包
tar -zxvf harbor-ha-offline-installer-v1.7.0.tgz
cd harbor
  1. 配置harbor
vi harbor/harbor.cfg
hostname = harbor01.io
customize_crt = false

注:参数ui_url_protocol, auth_mode, db_host, db_password等信息依据需求选择修改

  1. 挂载共享存储glusterfs
mkdir -p /share_storage
mount -t glusterfs <glusterfs_node_ip>:<glusterfs_vol_name> /share_storage
mkdir -p /share_storage/harbor
cp -r -f common /share_storage/harbor/
cp -r -f harbor.cfg /share_storage/harbor/
  1. 启动

sh install.sh

  1. 检查 docker ps

安装完成后浏览器打开,默认端口80

未修改harbor.cfg默认用户名密码是 admin/Harbor12345

4 rancher 高可用部署

4.1 生成自签名ssl证书

下载create_self-signed-cert.sh,执行

./create_self-signed-cert.sh --ssl-domain=rancher.test.com

4.2 上传rancher镜像

在其中一台服务器执行rancher部署操作

1) 下载镜像包rancher-images.tar.gz、rancher-images.txt和脚本rancher-load-images.sh

2) 登录harbor页面,创建名为rancher的项目,访问级别公开

3) 上传镜像到harbor

执行docker login命令

docker login harbor01.io -u admin

注:harbor镜像仓库默认admin密码为Harbor12345,如有修改,则输入修改后密码

上传镜像 sh rancher-load-images.sh --image-list rancher-images.txt --registry harbor01.io

4.3 安装nginx

编辑/etc/nginx.conf,替换IP_NODE_1、IP_NODE_2、IP_NODE_3为真实IP地址

nginx.conf配置如下:

worker_processes 4;
worker_rlimit_nofile 40000;

events {
    worker_connections 8192;
}

stream {
    upstream rancher_servers_http {
        least_conn;
        server <IP_NODE_1>:80 max_fails=3 fail_timeout=5s;
        server <IP_NODE_2>:80 max_fails=3 fail_timeout=5s;
        server <IP_NODE_3>:80 max_fails=3 fail_timeout=5s;
    }
    server {
        listen     80;
        proxy_pass rancher_servers_http;
    }

    upstream rancher_servers_https {
        least_conn;
        server <IP_NODE_1>:443 max_fails=3 fail_timeout=5s;
        server <IP_NODE_2>:443 max_fails=3 fail_timeout=5s;
        server <IP_NODE_3>:443 max_fails=3 fail_timeout=5s;
    }
    server {
        listen     443;
        proxy_pass rancher_servers_https;
    }
}

容器启动nginx服务

docker run -d --restart=unless-stopped \
  -p 80:80 -p 443:443 \
  -v /etc/nginx.conf:/etc/nginx/nginx.conf \
  harbor01.io/rancher/nginx:1.14

4.4 rke安装k8s

  • 下载rke、helm和kubectl,并将其放入/usr/bin目录下
mv rke kubectl helm /usr/bin/
chmod 777 /usr/bin/rke /usr/bin/kubectl /usr/bin/helm
  • 打通ssh通信 每台机器添加docker用户,设置docker用户密码
groupadd docker
useradd docker -g docker
passwd docker

rke执行机器执行

su – docker
ssh-keygen
ssh-copy-id docker@<IP_NODE_1>
ssh-copy-id docker@<IP_NODE_2>
ssh-copy-id docker@<IP_NODE_3>
  • 每台机器上添加/etc/hosts配置
<IP_nginx_node> rancher.gly.com
  • 创建rke配置文件rancher-cluster.yml,替换IP_NODE_1、IP_NODE_2、IP_NODE_3为真实IP地址
nodes:
- address: <IP_NODE_1>
  user: docker
  role: [ "controlplane", "etcd", "worker" ]
  ssh_key_path: /home/docker/.ssh/id_rsa
nodes:
- address: <IP_NODE_2>
  user: docker
  role: [ "controlplane", "etcd", "worker" ]
  ssh_key_path: /home/docker/.ssh/id_rsa
nodes:
- address: <IP_NODE_3>
  user: docker
  role: [ "controlplane", "etcd", "worker" ]
  ssh_key_path: /home/docker/.ssh/id_rsa
private_registries:
- url: harbor01.io # private registry url
  user: admin
  password: "Harbor12345"
  is_default: true
  • 创建kubernetest集群 rke up --config ./rancher-cluster.yml
  • 执行成功后,会在当前目录下生成一个kube_config_rancher-cluster.yml文件,执行 mkdir /root/.kube

mv kube_config_rancher-cluster.yml /root/.kube/config

  • 查看集群状态,执行 kubectl get nodes

4.5 安装rancher

证书tls.crt、tls.key和cacerts.pem为3.3.4.1步骤中生成

kubectl create namespace cattle-system
kubectl -n cattle-system create secret tls tls-rancher-ingress --cert=./tls.crt --key=./tls.key   
kubectl -n cattle-system create secret generic tls-ca --from-file=cacerts.pem
helm install rancher ./rancher \
    --namespace cattle-system \
    --set hostname=rancher.gly.com \
    --set ingress.tls.source=secret \
    --set privateCA=true \
    --set useBundledSystemChart=true \
    --set rancherImage=harbor01.io/rancher/rancher

5 kubernetes安装

1) rancher界面在全局添加集群

访问rancher.test.com,登录rancher界面

点击“添加集群”,选择“添加主机自建Kubernetes集群”,输入集群名称ocean,点击下一步

2) rancher界面在主机处添加服务器 说明:

若为生产环境建议集群规格为3个master,2个worker;

若为演示poc可以使用1个master和1个worker的规格。

Master:主机规格中勾选Etcd、Control

Worker: 主机规格中勾选Worker

根据节点规格复制界面上的相应命令去相应主机执行命令