K8s高可用集群部署(四)
k8s官网高可用部署参考:https://kubernetes.io/docs/setup/independent/high-availability/
目录
一 ,k8s高可用集群搭建原理
二 ,k8s高可用搭建步骤
一, k8s高可用集群搭建原理
在k8s集群中,pod节点挂掉还不用担心,它会有恢复,但是如果是单节点master挂掉了,那情况就危险了,会导致
集群全部挂点,所以,需要给k8s集群做高可用,消除master的单点故障
对于k8s,要做高可用,要考虑一下几点
在kubernetes-1.15.以后的版本有些改变,如下:
****Apiserver****Apiserver****Apiserver**** (如果有三个,并不会影响与etcd的沟通)
****ETCD****ETCD****ETCD**** (当配置多主集群时,etcd会扩展)
****controller-manager****controller-manager****controller-manager (在高可用集群中,是休眠状态,就是一个运行,其他休眠)
****scheduler****scheduler****scheduler**** (在高可用集群中,是休眠状态,就是一个运行,其他休眠)
****kubelet**** (不需要做高可用)
****Proxy**** (不需要做高可用)
上图就是要搭建的集群架构
二 , k8s高可用搭建步骤
搭建目录:
注:一定要慢慢来,按步骤做,不然出差不好找问题
- 集群的准备
- 集群各各节点初始化
- 安装docker-ce
- kubeadm安装搭建主从
- 加入主节点,和从节点
- ETCD集群查看
- 部署网络Flannfly(集群内)
(1) 集群的准备
系 统 | 主 机 名 | I P |
Centos7.6 | matser01 | 192.168.30.145 |
Centos7.6 | master02 | 192.168.30.144 |
Centos7.6 | master03 | 192.168.30.143 |
三台master节点做高可用
要求:三台master的cpu虚拟核数要>=4个 | 三台master节点机器要可以上网,可以相互连通。(确保每一台master都是一样的配置)
(2) 集群各各节点初始化
这里初始化参看我的笔记部署k8s集群(二)
这里初始化最后有一点不同
按部署k8s集群(二) 中部署到升级完内核后,重启reboor后,需要关闭NUMA
如图:(这里是一定要是重启完后做)
其中#vim grub 修改的是:"GRUB_CMDLINE_LINUX" 这一行最后添加numa=off (关闭的意思)添加完后,是这样的:GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet numa=off" (每个人做可能quiet前不同,只要在最后添加即可)
按图中步骤做完后,要再次重启机器*****
(3) 安装docker-ce
*****所有节点都安装docker-ce*****
安装需要的依赖包
#yum install -y yum-utils device-mapper-persistent-data lvm2
下载docker-ce源
#yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新软件包并安装docker-ce
#yum update -y && yum install -y docker-ce
创建docker目录
#mkdir /etc/docker
#mkdir -p /etc/systemd/system/docker.service.d
*上传文件daemon.json 到/etc/docker/ (如图:)
启动docker-ce并开机自启
#systemctl start docker && systemctl enable docker
(4) kubeadm安装搭建主从
开始搭建前,先部署调度
部署调度(所有节点都要做)
#modprobe br_netfilter
#cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
#chmod 755 /etc/sysconfig/modules/ && bash /etc/sysconfig/modules/ipvs.modules
#lsmod | grep -e ip_vs -e nf_conntrack_ipv4
调度做完,开始部署kubeadm
这里每个节点都采用的是睿云的镜像包,下载以下包 如图
导入docker
#docker load -i haproxy.tar
#dcoker load -i keepalived.tar
解压
#tar zxvf kubeadm-basic.images.tar .gz
修改load-images.sh
如图:通过pwd这里先找到解压后的路径,并复制粘贴到load-images.sh中“cd”和“ls” 这两行
完成后,对这个文件加权限
#chmod a+x load-images.sh
加完权限后,开始执行权限
#./load-images.sh
每个节点都做完以上操作后,解压start文件
#tar zxvf start.keep.tar.gz
#mv data /
#cd /data/lb/
这里的yaml文件是Kubeadm的配置文件,另外两个sh文件是启动脚本
进入etc目录下,有一个haproxy的文件,修改,再最后一行加入本负载节点IP与端口
保存退出后,修改start-haproxy,sh文件,如下图(修改前几行,加入节点IP)
启动haproxy
#./start-haproxy.sh
查看一下是否成功监听
修改keepalived文件 如下图(定义一个VIP在第一行添加修改,第二行是当前网卡名)
其他不做修改,保存退出即可
启动#./start-keepalived.sh
查看一下是否开启
#ip a
(4) 加入主节点,和从节点
************以上做完后,就可以 创建集群了(开始安装kubeadm)
加入源
#yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1
#systemc enable kubelet.service
Kub,生成yaml文件 如图
#cd /usr/local/kubernetes/install
#kubeadm config print init-defaults > kubeadm-config.yaml
修改kubeadm-config.yaml (红色为必要修改内容)
cat
*******************************************************************
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:2
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.30.145
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: k8s-master01
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: "192.168.30.140:6444"
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.15.1
networking:
dnsDomain: cluster.local
podSubnet: "10.244.0.0/16"
serviceSubnet: 10.96.0.0/12
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
SupportIPVSProxyMode: true
mode: ipvs
***********************************************************************************
修改完成后,可以初始化了
#kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs |tee kubeadm-init.log
这里初始化完成后,跟以前单节点不一样,会多出一些信息,如图
先按文件要求走三步,如图,
#mkdir -p $HOME/.kube\
#sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
#sudo chown $(id -u):$(id -g) $HOME/.kube/config
做完后,查看是否生效
#kubelct get node
此时,一个节点就部署完成
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
加入其他主节点,要和这个节点安装的包要一致
首先在此节点上
#scp -r /data 192.168.30.144:/
#scp -r /data 192.168.30.143:/
导入docker
#docker load -i haproxy.tar
#dcoker load -i keepalived.tar
安装kubadm(跟上面一样)注意不要初始化,到改完配置文件即可
#systemctl enable kubelet.service
最后,也是最重要一步:在主节点上找到Log文件,复制粘贴到其他节点并运行,如图
这里注意,要添加的节点要做完三步后,再拷贝主节点的配置文件内容到本节点初始化如图
复制以下部分到其他要加入节点(192.168.30.144)
此时,加入完成后,在主节点需改haproxy.cfg文件
在最后加入节点IP(注意:这里最好是在节点部署都完成后,最后加入节点IP,如果是提前加,可能启动会识别不到,会报错)
在第一台主机上重新做一下docker镜像
#docker ps -a
#docker rm -f HAProxy-K8S && bash /data/lb/start-haproxy.sh
然后把haproxy.cfg文件拷贝到要加入的节点机器,并也运行以上命令,如图
最后,查询是否加入成功
# kubectl get pod -n kube-system
到这里基本上部署已经完成了,再加入节点和以上方法一样
(5) ETCD集群查看
查看状态:
#kubectl get endpoints kube-controller-manager --namespace=kube-system -o yaml
#kubectl get endpoints kube-scheduler --namespace=kube-system -o yaml
(6) 部署网络Flannfly(集群内)
部署网络:这里部署网络让每一个节点可以通网(方法和单机部署一样,都是部署Flannly)
#mkdir k8s-flannly
#cd k8s-flannly
#wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#kubectl create -f kube-flannel.yml
*******在这里可能下载不稳定,做一下域名映射到ip*********
查询IP:https://site.ip138.com/raw.githubusercontent.com/
会出现出个IP,选择离我们最近的,目前最近的是中国香港 : 151.101.76.133
然后在/etc/hosts文件里加入: 151.101.76.133 raw.githubusercontent.com
保存退出后,再次尝试wget下载,就可以了
*******************************************************************
启动网络部署
#kubectl apply -f kube-flannel.yml
查看是否运行成功
#kubectl get pod -n kube-system
#kubectl get nodes
此刻网络状态便通了
K8s高可用集群部署(四)的更多相关文章
- .Net Core2.1 秒杀项目一步步实现CI/CD(Centos7.2)系列一:k8s高可用集群搭建总结以及部署API到k8s
前言:本系列博客又更新了,是博主研究很长时间,亲自动手实践过后的心得,k8s集群是购买了5台阿里云服务器部署的,这个集群差不多搞了一周时间,关于k8s的知识点,我也是刚入门,这方面的知识建议参考博客园 ...
- (十)RabbitMQ消息队列-高可用集群部署实战
原文:(十)RabbitMQ消息队列-高可用集群部署实战 前几章讲到RabbitMQ单主机模式的搭建和使用,我们在实际生产环境中出于对性能还有可用性的考虑会采用集群的模式来部署RabbitMQ. Ra ...
- hbase高可用集群部署(cdh)
一.概要 本文记录hbase高可用集群部署过程,在部署hbase之前需要事先部署好hadoop集群,因为hbase的数据需要存放在hdfs上,hadoop集群的部署后续会有一篇文章记录,本文假设had ...
- RocketMQ的高可用集群部署
RocketMQ的高可用集群部署 标签(空格分隔): 消息队列 部署 1. RocketMQ 集群物理部署结构 Rocket 物理部署结构 Name Server: 单点,供Producer和Cons ...
- RabbitMQ的高可用集群部署
RabbitMQ的高可用集群部署 标签(空格分隔): 消息队列 部署 1. RabbitMQ部署的三种模式 1.1 单一模式 单机情况下不做集群, 仅仅运行一个RabbitMQ. # docker-c ...
- rocketmq高可用集群部署(RocketMQ-on-DLedger Group)
rocketmq高可用集群部署(RocketMQ-on-DLedger Group) rocketmq部署架构 rocketmq部署架构非常多,都是为了解决一些问题,越来越高可用,越来越复杂. 单ma ...
- MySQL MHA 高可用集群部署及故障切换
MySQL MHA 高可用集群部署及故障切换 1.概念 2.搭建MySQL + MHA 1.概念: a)MHA概念 : MHA(MasterHigh Availability)是一套优秀的MySQL高 ...
- Centos6.9下RocketMQ3.4.6高可用集群部署记录(双主双从+Nameserver+Console)
之前的文章已对RocketMQ做了详细介绍,这里就不再赘述了,下面是本人在测试和生产环境下RocketMQ3.4.6高可用集群的部署手册,在此分享下: 1) 基础环境 ip地址 主机名 角色 192. ...
- postgresql高可用集群部署
一.概况 1.概念 pgsql高可用集群采用postgresql+etcd+patroni+haproxy+keepalived等软件实现,以postgresql做数据库,etcd存储集群状态,pat ...
- Hadoop部署方式-高可用集群部署(High Availability)
版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客的高可用集群是建立在完全分布式基础之上的,详情请参考:https://www.cnblogs.com/yinzhengjie/p/90651 ...
随机推荐
- [后端-Flask总结]-flask学习总结
1.flask开发基础与入门: 1.1web开发基础 1.1.1 前端框架: bootstrap, j-query, angular, react 1.2 flask 路由 from flask im ...
- N63050 第十二周运维作业 ansible常用模块介绍未完成
就业和全程班本周学习内容: 二十三.Mysql数据库四 1.MySQL主从复制实现和故障排错(50分钟) 2.MySQL级联复制和主主复制架构实现(51分钟) 3.MySQL的半同步复制和复制过滤器( ...
- go对数组对象排序
1.根据时间对数组对象排序 package main import ( "fmt" "time" "github.com/ah ...
- PHP常见方法封装
1.get请求 function get_curl($url, $timeout = 5) { $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url) ...
- 粉色的猫MISC(bugku)
一 题目描述 ps:本题特别感谢树叶大佬给的一些提示以及WP!欢迎大家关注树木有点绿~~ 二 解题过程 下载附件得到zip压缩包 根据作者提示,压缩包注释应该为压缩包密码. 1.压缩包密码 一开始看 ...
- js 防抖
// 防抖 作用:防止重复触发事件 var count = 1; var container = document.getElementById('container'); function getU ...
- Spring中最常用的11个扩展点
转载自: 微信公众号 [Java后端技术] 前言 我们一说到spring,可能第一个想到的是 IOC(控制反转) 和 AOP(面向切面编程). 没错,它们是spring的基石,得益于它们的优秀设计,使 ...
- jquery随手做的一个滚动库 我称之为 idkScroll
/** * 仅做到底自动刷新功能 * options: { * page int 当前在第几页 * limit int 每页个数 * onBottom function 到底的回调 * whenEnd ...
- jboss单机环境搭建
1.操作系统:centos7 2.需要的包:apache,wildfly,postgres(要初始化),activemq 3.安装流程: 一.安装依赖包并部署服务:httpd,wildfly,mq,p ...
- Delphi 自定义窗体类名
原理就是覆盖原CreateParams函数,重写新CreateParams函数,在新CreateParams函数继承完之后马上修改Parames.WinClassName type TForm1 = ...