1. 环境准备:
  2. IP hostname role
  3. 192.168.200.150 nginx LB
  4. 192.168.200.151 master01-151 docker-ce/rke/helm/kubectl
  5. 192.168.200.152 master02-152 docker-ce/rke
  6. 192.168.200.153 master03-153 docker-ce/rke
  7.  
  8. (1)设置主机名
  9. (2)设置域名解析
  10. # 生产环境中使用内网dns服务器解析域名
  11. (3)关闭swap交换分区
  12. (4)开放防火墙端口(参考)
  13. portol port server
  14. tcp 22 sshd
  15. tcp 10250 kubelet
  16. tcp 10251 kube-schedule :接收 http 请求,非安全端口,不需要认证授权。
  17. tcp 10259 kube-schedule :接收 https 请求,安全端口,需要认证授权。
  18. tcp 10252 kube-controll :接收 http 请求,非安全端口,不需要认证授权。
  19. tcp 10257 kube-controll :接收 https 请求,安全端口,需要认证授权。
  20. tcp 6443 kube-apiserve
  21. tcp 2379 etcd
  22. tcp 2380 etcd
  23. udp 8472 overlay2
  24. udp 323 chronyd
  25. (5)设置selinux策略
  26. (6)调整时区时间同步
  27. # 生产环境中使用内网ntp服务器并配置chrony服务
  28. (7)系统其他优化
  29.  
  30. 软件版本(所有版本均使用最新稳定版 2021.9.15):
  31. docker-ce20.10.8
  32. rkev1.3.0
  33. kubernetesv1.21.4-rancher1-1
  34. kubectlv1.21.4
  35. helm3.6.3
  36. cert-manager1.5.3
  37. nginxv1.20.1
  38.  
  39. 1.安装docker-ce
  40. wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  41. yum list --showduplicates docker-ce
  42. yum install -y docker-ce-20.10.8
  43. mkdir -p /etc/docker /data/docker
  44.  
  45. # 定义docker配置
  46. vim /etc/docker/daemon.json
  47. {
  48. "graph": "/data/docker",
  49. "storage-driver": "overlay2",
  50. "insecure-registries": ["registry.access.redhat.com","quay.io","harbor.example.com"],
  51. "registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
  52. "exec-opts": ["native.cgroupdriver=systemd"],
  53. "log-opts": {"max-size":"32M", "max-file":"2"}
  54. }
  55.  
  56. systemctl restart docker
  57. systemctl enable docker
  58.  
  59. 2.加载内核模块
  60. modprobe -a br_netfilter ip6_udp_tunnel ip_set ip_set_hash_ip ip_set_hash_net \
  61. iptable_filter iptable_nat iptable_mangle iptable_raw nf_conntrack_netlink nf_conntrack \
  62. nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat nf_nat_ipv4 nf_nat_masquerade_ipv4 nfnetlink \
  63. udp_tunnel VETH VXLAN x_tables xt_addrtype xt_conntrack xt_comment xt_mark xt_multiport \
  64. xt_nat xt_recent xt_set xt_statistic xt_tcpudp
  65.  
  66. 3.修改内核参数
  67. cat >> /etc/sysctl.conf <<EOF
  68. net.ipv4.ip_forward=1
  69. net.bridge.bridge-nf-call-iptables=1
  70. EOF
  71.  
  72. sysctl -p /etc/sysctl.conf
  73.  
  74. 4.创建用户并配置免密登录
  75. # rke用户需要调用docker客户端工具创建容器
  76. useradd -m -s /bin/bash -G docker rke
  77. echo "123456" | passwd --stdin rke
  78.  
  79. # rke用户通过ssh协议远程安装和运行服务组件、类似于ceph-deploy
  80. su - rke
  81. ssh-keygen
  82. ssh-copy-id rke@192.168.200.151
  83. ssh-copy-id rke@192.168.200.152
  84. ssh-copy-id rke@192.168.200.153
  85. exit
  86.  
  87. 5.安装rke
  88. wget https://github.com/rancher/rke/releases/download/v1.3.0/rke_linux-amd64
  89. mv rke_linux-amd64 /usr/local/bin/rke
  90. chmod +x /usr/local/bin/rke
  91.  
  92. # 定义集群基础信息
  93. vim cluster.yml
  94. nodes:
  95. - address: 192.168.200.151
  96. port: "22"
  97. internal_address: 192.168.200.151
  98. role: [controlplane,worker,etcd]
  99. hostname_override: "master01-151"
  100. user: rke
  101. ssh_key_path: /home/rke/.ssh/id_rsa
  102. ssh_agent_auth: true
  103. labels: {}
  104. taints: []
  105. - address: 192.168.200.152
  106. port: "22"
  107. internal_address: 192.168.200.152
  108. role: [controlplane,worker,etcd]
  109. hostname_override: "master02-152"
  110. user: rke
  111. ssh_key_path: /home/rke/.ssh/id_rsa
  112. ssh_agent_auth: true
  113. labels: {}
  114. taints: []
  115. - address: 192.168.200.153
  116. port: "22"
  117. internal_address: 192.168.200.153
  118. role: [controlplane,worker,etcd]
  119. hostname_override: "master03-153"
  120. user: rke
  121. ssh_key_path: /home/rke/.ssh/id_rsa
  122. ssh_agent_auth: true
  123. labels: {}
  124. taints: []
  125. kubernetes_version: "v1.21.4-rancher1-1"
  126. cluster_name: "mycluster"
  127. services:
  128. etcd:
  129. backup_config:
  130. enabled: true
  131. interval_hours: 6
  132. retention: 60
  133.  
  134. # 运行rke
  135. rke up --config ./cluster.yml
  136.  
  137. 6.保存重要文件
  138. # 请保存下文中列出来的所有文件,这些文件可以用于维护集群,排查问题和升级集群。请将这些文件复制并保存到安全的位置:
  139.  
  140. cluster.ymlRKE 集群的配置文件。
  141. kube_config_cluster.yml:该集群的Kubeconfig 文件包含了获取该集群所有权限的认证凭据。
  142. cluster.rkestateKubernetes 集群状态文件,包含了获取该集群所有权限的认证凭据,使用 RKE v0.2.0 时才会创建这个文件。
  143.  
  144. 7.安装kubectl
  145. wget http://rancher-mirror.cnrancher.com/kubectl/v1.21.4/linux-amd64-v1.21.4-kubectl
  146. mv linux-amd64-v1.21.4-kubectl /usr/local/bin/kubectl
  147. chmod +x /usr/local/bin/kubectl
  148. kubectl version --client
  149.  
  150. # 拷贝认证文件并查看集群信息
  151. mkdir ~/.kube && cp kube_config_cluster.yml ~/.kube/config
  152. kubectl get cs
  153. kubectl get nodes
  154.  
  155. 8.安装helm
  156. wget http://rancher-mirror.cnrancher.com/helm/v3.6.3/helm-v3.6.3-linux-amd64.tar.gz
  157. tar zxvf helm-v3.6.3-linux-amd64.tar.gz -C /usr/local
  158. helm version
  159.  
  160. # 增加rancher稳定版仓库
  161. helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/stable
  162.  
  163. 9.安装cert-manager
  164. # 创建CRD资源
  165. wget https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.crds.yaml
  166. kubectl apply -f cert-manager.crds.yaml
  167.  
  168. # 增加jetstack仓库并安装cert-manager
  169. kubectl create namespace cert-manager
  170. helm repo add jetstack https://charts.jetstack.io
  171. helm repo update
  172. helm install cert-manager jetstack/cert-manager --namespace cert-manager --version v1.5.3
  173. kubectl get pods -n cert-manager
  174.  
  175. 10.安装Rancher
  176. # hostname定义rancher访问域名,需配置域名解析
  177. helm install rancher rancher-stable/rancher \
  178. --namespace cattle-system \
  179. --set hostname=rancher.example.com \
  180. --set ingress.tls.source=letsEncrypt \
  181. --set letsEncrypt.email=admin@example.com
  182.  
  183. # 查询rancher部署状态
  184. kubectl -n cattle-system rollout status deploy/rancher
  185. kubectl -n cattle-system get deploy rancher
  186.  
  187. 11.配置负载均衡
  188. # CentOS7.6发行版epel源安装的nginx/1.20.1默认没有stream模块,则需要安装nginx-all-modules包
  189. yum -y install nginx-all-modules.noarch
  190.  
  191. # http中server段,将80端口流量重定向到443端口
  192. server {
  193. listen 80;
  194. return 301 https://$host$request_uri;
  195. }
  196.  
  197. # stream段配置4层反向代理
  198. stream {
  199. log_format proxy '$time_local|$remote_addr|$upstream_addr|$protocol|$status|'
  200. '$session_time|$upstream_connect_time|$bytes_sent|$bytes_received|'
  201. '$upstream_bytes_sent|$upstream_bytes_received' ;
  202. upstream rancher_servers {
  203. least_conn;
  204. server 192.168.200.151:443 max_fails=3 fail_timeout=5s;
  205. server 192.168.200.152:443 max_fails=3 fail_timeout=5s;
  206. server 192.168.200.153:443 max_fails=3 fail_timeout=5s;
  207. }
  208. server {
  209. listen 443;
  210. proxy_pass rancher_servers;
  211. access_log /var/log/nginx/proxy.log proxy;
  212. }
  213. }
  214.  
  215. # 重启nginx
  216. systemctl restart nginx
  217.  
  218. 12.访问rancher域名 https://rancher.example.com 新建或增加下游集群,配置到此完成。
  219.  
  220. 附:需要完全卸载rke时提供以下脚本
  221. #!/bin/bash
  222.  
  223. #杀死所有正在运行的容器
  224. docker stop $(docker ps -a -q)
  225.  
  226. #删除所有容器
  227. docker rm -f $(docker ps -qa)
  228.  
  229. #删除所有容器卷
  230. docker volume rm $(docker volume ls -q)
  231.  
  232. #卸载mount目录
  233. for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher; do umount $mount; done
  234.  
  235. #删除残留路径
  236. rm -rf /etc/ceph \
  237. /etc/cni \
  238. /etc/kubernetes \
  239. /opt/cni \
  240. /opt/rke \
  241. /run/secrets/kubernetes.io \
  242. /run/calico \
  243. /run/flannel \
  244. /var/lib/calico \
  245. /var/lib/etcd \
  246. /var/lib/cni \
  247. /var/lib/kubelet \
  248. /var/lib/rancher/rke/log \
  249. /var/log/containers \
  250. /var/log/pods \
  251.  
  252. #清理网络接口
  253. network_interface=`ls /sys/class/net`
  254. for net_inter in $network_interface;
  255. do
  256. if ! echo $net_inter | grep -qiE 'lo|docker0|eth*|ens*';then
  257. ip link delete $net_inter
  258. fi
  259. done
  260.  
  261. #清理残留进程
  262. port_list='80 443 6443 2376 2379 2380 8472 9099 10250 10254'
  263.  
  264. for port in $port_list
  265. do
  266. pid=`netstat -atlnup|grep $port |awk '{print $7}'|awk -F '/' '{print $1}'|grep -v -|sort -rnk2|uniq`
  267. if [[ -n $pid ]];then
  268. kill -9 $pid
  269. fi
  270. done
  271.  
  272. pro_pid=`ps -ef |grep -v grep |grep kube|awk '{print $2}'`
  273.  
  274. if [[ -n $pro_pid ]];then
  275. kill -9 $pro_pid
  276. fi
  277.  
  278. #清理路由规则
  279. sudo iptables --flush
  280. sudo iptables --flush --table nat
  281. sudo iptables --flush --table filter
  282. sudo iptables --table nat --delete-chain
  283. sudo iptables --table filter --delete-chain
  284.  
  285. # 重启docker
  286. 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的更多相关文章

  1. consul安装配置,生产环境部署高可用环境

    1.建立三个consul节点(一个server+两个client) 具体的过程见http://www.cnblogs.com/java-zhao/p/5375132.html 1)在终端下启动vagr ...

  2. 生产环境搭建高可用Harbor(包括恢复演练实操)

    生产环境搭建高可用Harbor(包括恢复演练实操) 前言 因资源成本问题,本Harbor高可用架构为最小开销方案,如果资源充足,可以将PG.Redis全部使用使用云厂商集群模式. 同时为了配置简单,并 ...

  3. 深度学习Tensorflow生产环境部署(上·环境准备篇)

    最近在研究Tensorflow Serving生产环境部署,尤其是在做服务器GPU环境部署时,遇到了不少坑.特意总结一下,当做前车之鉴. 1 系统背景 系统是ubuntu16.04 ubuntu@ub ...

  4. 【原创】大数据基础之Airflow(2)生产环境部署airflow研究

    一 官方 airflow官方分布式部署结构图 airflow进程 webserver scheduler flower(非必须) worker airflow缺点 scheduler单点 通过在sch ...

  5. 附012.Kubeadm部署高可用Kubernetes

    一 kubeadm介绍 1.1 概述 参考<附003.Kubeadm部署Kubernetes>. 1.2 kubeadm功能 参考<附003.Kubeadm部署Kubernetes& ...

  6. 生产环境部署springcloud微服务启动慢的问题排查

    今天带来一个真实案例,虽然不是什么故障,但是希望对大家有所帮助. 一.问题现象: 生产环境部署springcloud应用,服务部署之后,有时候需要10几分钟才能启动成功,在开发测试环境则没有这个问题. ...

  7. 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...

  8. kubernetes kubeadm部署高可用集群

    k8s kubeadm部署高可用集群 kubeadm是官方推出的部署工具,旨在降低kubernetes使用门槛与提高集群部署的便捷性. 同时越来越多的官方文档,围绕kubernetes容器化部署为环境 ...

  9. 第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块

    第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块 virtualenv简介 1.安装virtuale ...

随机推荐

  1. CTF_论剑场_Web20

    直接上脚本,多跑几次就能出flag import requests import re url = "http://123.206.31.85:10020/" s = reques ...

  2. 两年Android开发三面上岸腾讯,这些核心知识点建议收藏

    概述 感觉毕业后时间过得真快啊,从 19 年 7 月本科毕业入职后,到现在快两年了,前段时间金三银四期间想着找一个新的工作,前前后后花了一个多月的时间复习以及面试,面试好几家大厂,最后选择了腾讯.也祝 ...

  3. 只要套路对,薪资直接翻一倍!保姆级Android面试葵花宝典,肝完面试犹如开挂

    跳槽,这在 IT 互联网圈是非常普遍的,也是让自己升职加薪,走上人生巅峰的重要方式.那么作为一个普通的Android程序猿,我们如何才能斩获大厂offer 呢? 疫情向好.面试在即,还在迷茫踌躇中的后 ...

  4. 深入理解Https如何保证通信安全

    作为一名ABC搬运工,我相信很多人都知道Https,也都知道它是用来保证通信安全的,但是如果你没有深入了解过Https,可能并不知道它是如何保证通信安全的.我也是借着这次机会,和大家分享下我深入了解的 ...

  5. 面试常见SQL中where和having的区别你确定你知道吗!

    "Where" 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数. "Having" 是 ...

  6. Spring对Controller、Service、Dao进行Junit单元测试总结

    测试类注解 @RunWith(SpringRunner.class) @SpringBootTest(classes={DemoApplication.class}) 以Controller层的的单元 ...

  7. Git常见的操作及命令

    Git的下载安装 安装直接去Git官方网站https://git-scm.com/下载后安装即可. Git常用命令 git init初始化本地仓库(没有仓库就创建) git clone克隆远程仓库到本 ...

  8. 单机版搭建kubernetes(K8s)

    准备 云原生的概念越来越火,忍不住去看了看kubernetes,初次接触,晕晕乎乎的,于是不管三七二十一,先搭建个单机版的再说(没钱买服务器,目前也懒得装虚拟机),跑起来也算是第一步吧.网上教程一顿搜 ...

  9. 面试官:实现一个带值变更通知能力的Dictionary

    如题, 你知道字典KEY对应的Value什么时候被覆盖了吗?今天我们聊这个刚性需求. 前文提要: 数据获取组件维护了业务方所有(在用)的连接对象,DBA能在后台无侵入的切换备份库. 上文中:DBA在为 ...

  10. HCNA Routing&Switching之访问控制列表ACL

    前文我们了解了DHCP服务相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15147870.html:今天我们来聊一聊访问控制列表ACL: ACL(ac ...