生产环境部署高可用Rancher
- 环境准备:
- IP hostname role
- 192.168.200.150 nginx LB
- 192.168.200.151 master01-151 docker-ce/rke/helm/kubectl
- 192.168.200.152 master02-152 docker-ce/rke
- 192.168.200.153 master03-153 docker-ce/rke
- (1)设置主机名
- (2)设置域名解析
- # 生产环境中使用内网dns服务器解析域名
- (3)关闭swap交换分区
- (4)开放防火墙端口(参考)
- portol port server
- tcp 22 sshd
- tcp 10250 kubelet
- tcp 10251 kube-schedule :接收 http 请求,非安全端口,不需要认证授权。
- tcp 10259 kube-schedule :接收 https 请求,安全端口,需要认证授权。
- tcp 10252 kube-controll :接收 http 请求,非安全端口,不需要认证授权。
- tcp 10257 kube-controll :接收 https 请求,安全端口,需要认证授权。
- tcp 6443 kube-apiserve
- tcp 2379 etcd
- tcp 2380 etcd
- udp 8472 overlay2
- udp 323 chronyd
- (5)设置selinux策略
- (6)调整时区时间同步
- # 生产环境中使用内网ntp服务器并配置chrony服务
- (7)系统其他优化
- 软件版本(所有版本均使用最新稳定版 2021.9.15):
- docker-ce:20.10.8
- rke:v1.3.0
- kubernetes:v1.21.4-rancher1-1
- kubectl:v1.21.4
- helm:3.6.3
- cert-manager:1.5.3
- nginx:v1.20.1
- 1.安装docker-ce
- wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- yum list --showduplicates docker-ce
- yum install -y docker-ce-20.10.8
- mkdir -p /etc/docker /data/docker
- # 定义docker配置
- vim /etc/docker/daemon.json
- {
- "graph": "/data/docker",
- "storage-driver": "overlay2",
- "insecure-registries": ["registry.access.redhat.com","quay.io","harbor.example.com"],
- "registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
- "exec-opts": ["native.cgroupdriver=systemd"],
- "log-opts": {"max-size":"32M", "max-file":"2"}
- }
- systemctl restart docker
- systemctl enable docker
- 2.加载内核模块
- modprobe -a 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
- 3.修改内核参数
- cat >> /etc/sysctl.conf <<EOF
- net.ipv4.ip_forward=1
- net.bridge.bridge-nf-call-iptables=1
- EOF
- sysctl -p /etc/sysctl.conf
- 4.创建用户并配置免密登录
- # rke用户需要调用docker客户端工具创建容器
- useradd -m -s /bin/bash -G docker rke
- echo "123456" | passwd --stdin rke
- # rke用户通过ssh协议远程安装和运行服务组件、类似于ceph-deploy
- su - rke
- ssh-keygen
- ssh-copy-id rke@192.168.200.151
- ssh-copy-id rke@192.168.200.152
- ssh-copy-id rke@192.168.200.153
- exit
- 5.安装rke
- wget https://github.com/rancher/rke/releases/download/v1.3.0/rke_linux-amd64
- mv rke_linux-amd64 /usr/local/bin/rke
- chmod +x /usr/local/bin/rke
- # 定义集群基础信息
- vim cluster.yml
- nodes:
- - address: 192.168.200.151
- port: "22"
- internal_address: 192.168.200.151
- role: [controlplane,worker,etcd]
- hostname_override: "master01-151"
- user: rke
- ssh_key_path: /home/rke/.ssh/id_rsa
- ssh_agent_auth: true
- labels: {}
- taints: []
- - address: 192.168.200.152
- port: "22"
- internal_address: 192.168.200.152
- role: [controlplane,worker,etcd]
- hostname_override: "master02-152"
- user: rke
- ssh_key_path: /home/rke/.ssh/id_rsa
- ssh_agent_auth: true
- labels: {}
- taints: []
- - address: 192.168.200.153
- port: "22"
- internal_address: 192.168.200.153
- role: [controlplane,worker,etcd]
- hostname_override: "master03-153"
- user: rke
- ssh_key_path: /home/rke/.ssh/id_rsa
- ssh_agent_auth: true
- labels: {}
- taints: []
- kubernetes_version: "v1.21.4-rancher1-1"
- cluster_name: "mycluster"
- services:
- etcd:
- backup_config:
- enabled: true
- interval_hours: 6
- retention: 60
- # 运行rke
- rke up --config ./cluster.yml
- 6.保存重要文件
- # 请保存下文中列出来的所有文件,这些文件可以用于维护集群,排查问题和升级集群。请将这些文件复制并保存到安全的位置:
- cluster.yml:RKE 集群的配置文件。
- kube_config_cluster.yml:该集群的Kubeconfig 文件包含了获取该集群所有权限的认证凭据。
- cluster.rkestate:Kubernetes 集群状态文件,包含了获取该集群所有权限的认证凭据,使用 RKE v0.2.0 时才会创建这个文件。
- 7.安装kubectl
- wget http://rancher-mirror.cnrancher.com/kubectl/v1.21.4/linux-amd64-v1.21.4-kubectl
- mv linux-amd64-v1.21.4-kubectl /usr/local/bin/kubectl
- chmod +x /usr/local/bin/kubectl
- kubectl version --client
- # 拷贝认证文件并查看集群信息
- mkdir ~/.kube && cp kube_config_cluster.yml ~/.kube/config
- kubectl get cs
- kubectl get nodes
- 8.安装helm
- wget http://rancher-mirror.cnrancher.com/helm/v3.6.3/helm-v3.6.3-linux-amd64.tar.gz
- tar zxvf helm-v3.6.3-linux-amd64.tar.gz -C /usr/local
- helm version
- # 增加rancher稳定版仓库
- helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/stable
- 9.安装cert-manager
- # 创建CRD资源
- wget https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.crds.yaml
- kubectl apply -f cert-manager.crds.yaml
- # 增加jetstack仓库并安装cert-manager
- kubectl create namespace cert-manager
- helm repo add jetstack https://charts.jetstack.io
- helm repo update
- helm install cert-manager jetstack/cert-manager --namespace cert-manager --version v1.5.3
- kubectl get pods -n cert-manager
- 10.安装Rancher
- # hostname定义rancher访问域名,需配置域名解析
- helm install rancher rancher-stable/rancher \
- --namespace cattle-system \
- --set hostname=rancher.example.com \
- --set ingress.tls.source=letsEncrypt \
- --set letsEncrypt.email=admin@example.com
- # 查询rancher部署状态
- kubectl -n cattle-system rollout status deploy/rancher
- kubectl -n cattle-system get deploy rancher
- 11.配置负载均衡
- # CentOS7.6发行版epel源安装的nginx/1.20.1默认没有stream模块,则需要安装nginx-all-modules包
- yum -y install nginx-all-modules.noarch
- # http中server段,将80端口流量重定向到443端口
- server {
- listen 80;
- return 301 https://$host$request_uri;
- }
- # stream段配置4层反向代理
- stream {
- log_format proxy '$time_local|$remote_addr|$upstream_addr|$protocol|$status|'
- '$session_time|$upstream_connect_time|$bytes_sent|$bytes_received|'
- '$upstream_bytes_sent|$upstream_bytes_received' ;
- upstream rancher_servers {
- least_conn;
- server 192.168.200.151:443 max_fails=3 fail_timeout=5s;
- server 192.168.200.152:443 max_fails=3 fail_timeout=5s;
- server 192.168.200.153:443 max_fails=3 fail_timeout=5s;
- }
- server {
- listen 443;
- proxy_pass rancher_servers;
- access_log /var/log/nginx/proxy.log proxy;
- }
- }
- # 重启nginx
- systemctl restart nginx
- 12.访问rancher域名 https://rancher.example.com 新建或增加下游集群,配置到此完成。
- 附:需要完全卸载rke时提供以下脚本
- #!/bin/bash
- #杀死所有正在运行的容器
- docker stop $(docker ps -a -q)
- #删除所有容器
- 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
- #删除残留路径
- rm -rf /etc/ceph \
- /etc/cni \
- /etc/kubernetes \
- /opt/cni \
- /opt/rke \
- /run/secrets/kubernetes.io \
- /run/calico \
- /run/flannel \
- /var/lib/calico \
- /var/lib/etcd \
- /var/lib/cni \
- /var/lib/kubelet \
- /var/lib/rancher/rke/log \
- /var/log/containers \
- /var/log/pods \
- #清理网络接口
- 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
- #清理路由规则
- 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
- # 重启docker
- sudo systemctl restart docker
参考文档:
https://docs.rancher.cn/rancher2.5/
https://blog.csdn.net/AmorKlee/article/details/116940446
https://www.cnblogs.com/xiao987334176/p/12981735.html
生产环境部署高可用Rancher的更多相关文章
- consul安装配置,生产环境部署高可用环境
1.建立三个consul节点(一个server+两个client) 具体的过程见http://www.cnblogs.com/java-zhao/p/5375132.html 1)在终端下启动vagr ...
- 生产环境搭建高可用Harbor(包括恢复演练实操)
生产环境搭建高可用Harbor(包括恢复演练实操) 前言 因资源成本问题,本Harbor高可用架构为最小开销方案,如果资源充足,可以将PG.Redis全部使用使用云厂商集群模式. 同时为了配置简单,并 ...
- 深度学习Tensorflow生产环境部署(上·环境准备篇)
最近在研究Tensorflow Serving生产环境部署,尤其是在做服务器GPU环境部署时,遇到了不少坑.特意总结一下,当做前车之鉴. 1 系统背景 系统是ubuntu16.04 ubuntu@ub ...
- 【原创】大数据基础之Airflow(2)生产环境部署airflow研究
一 官方 airflow官方分布式部署结构图 airflow进程 webserver scheduler flower(非必须) worker airflow缺点 scheduler单点 通过在sch ...
- 附012.Kubeadm部署高可用Kubernetes
一 kubeadm介绍 1.1 概述 参考<附003.Kubeadm部署Kubernetes>. 1.2 kubeadm功能 参考<附003.Kubeadm部署Kubernetes& ...
- 生产环境部署springcloud微服务启动慢的问题排查
今天带来一个真实案例,虽然不是什么故障,但是希望对大家有所帮助. 一.问题现象: 生产环境部署springcloud应用,服务部署之后,有时候需要10几分钟才能启动成功,在开发测试环境则没有这个问题. ...
- 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...
- kubernetes kubeadm部署高可用集群
k8s kubeadm部署高可用集群 kubeadm是官方推出的部署工具,旨在降低kubernetes使用门槛与提高集群部署的便捷性. 同时越来越多的官方文档,围绕kubernetes容器化部署为环境 ...
- 第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块
第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块 virtualenv简介 1.安装virtuale ...
随机推荐
- CTF_论剑场_Web20
直接上脚本,多跑几次就能出flag import requests import re url = "http://123.206.31.85:10020/" s = reques ...
- 两年Android开发三面上岸腾讯,这些核心知识点建议收藏
概述 感觉毕业后时间过得真快啊,从 19 年 7 月本科毕业入职后,到现在快两年了,前段时间金三银四期间想着找一个新的工作,前前后后花了一个多月的时间复习以及面试,面试好几家大厂,最后选择了腾讯.也祝 ...
- 只要套路对,薪资直接翻一倍!保姆级Android面试葵花宝典,肝完面试犹如开挂
跳槽,这在 IT 互联网圈是非常普遍的,也是让自己升职加薪,走上人生巅峰的重要方式.那么作为一个普通的Android程序猿,我们如何才能斩获大厂offer 呢? 疫情向好.面试在即,还在迷茫踌躇中的后 ...
- 深入理解Https如何保证通信安全
作为一名ABC搬运工,我相信很多人都知道Https,也都知道它是用来保证通信安全的,但是如果你没有深入了解过Https,可能并不知道它是如何保证通信安全的.我也是借着这次机会,和大家分享下我深入了解的 ...
- 面试常见SQL中where和having的区别你确定你知道吗!
"Where" 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数. "Having" 是 ...
- Spring对Controller、Service、Dao进行Junit单元测试总结
测试类注解 @RunWith(SpringRunner.class) @SpringBootTest(classes={DemoApplication.class}) 以Controller层的的单元 ...
- Git常见的操作及命令
Git的下载安装 安装直接去Git官方网站https://git-scm.com/下载后安装即可. Git常用命令 git init初始化本地仓库(没有仓库就创建) git clone克隆远程仓库到本 ...
- 单机版搭建kubernetes(K8s)
准备 云原生的概念越来越火,忍不住去看了看kubernetes,初次接触,晕晕乎乎的,于是不管三七二十一,先搭建个单机版的再说(没钱买服务器,目前也懒得装虚拟机),跑起来也算是第一步吧.网上教程一顿搜 ...
- 面试官:实现一个带值变更通知能力的Dictionary
如题, 你知道字典KEY对应的Value什么时候被覆盖了吗?今天我们聊这个刚性需求. 前文提要: 数据获取组件维护了业务方所有(在用)的连接对象,DBA能在后台无侵入的切换备份库. 上文中:DBA在为 ...
- HCNA Routing&Switching之访问控制列表ACL
前文我们了解了DHCP服务相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15147870.html:今天我们来聊一聊访问控制列表ACL: ACL(ac ...