K8S二进制部署高可用集群-1.22[一]
前言:
关键字:Kubernetes、KeepAlived、LVS;
本博文为原创博文,欢迎转载,但请务必注明出处;
我已经不记得我上一次写博文是什么时候了!本篇博文的主要内容是关于K8S高可用集群的二进制搭建的,这将会是一个系列性的文章,没办法,东西太多!写这个原因是,博主最近想补完K8S高可用二进制集群的搭建方法~参考了视频,参考了其它博文~结果嘛,还是老样子,搜出来的东西不好用!结论还是那样,你抄我,我抄你吧~结果是,很多地方也没说明白!也参考了一些所谓大牛的教学视频,看了下部署的代码与方法,结论嘛,那几个所谓的NB培训机构,是不是都是用同一套部署代码来教学的?连二进制可执行文件的配置项顺序也一样?其实对于那些培训机构的教学视频,博主可以这么说,看了视频,有对应的部署文件给你,你是可以按照视频教程部署出一套K8S集群的,不过,仅仅也就视频那一套,换个K8S的版本,你应该就搭建不起来了;当然,就更别说升级维护这种东西了;是视频的原因吗?即是也不是,"是"是因为那些视频忽略了太多的细节了,"不是"是因为,K8S的细节太多了,同时也涵盖了大量的其它方面的知识!当然,如果我把这种观点放在某些机构的大牛视频下,显然很影响那些大牛的声誉,所以当我在某个所谓培训机构的大牛的视频下阐述这样的观点时,我的评论给删了~当然,我相信他是很NB的,但就视频质量来说,确实就是那样嘛~~
即然写了,老样子吧,博主还是尽可能的附上细节方面的说明;看完你能得到什么?说实话,博主认为你能得多少东西,与你的知识面的丰富程度有关,实际上极可能你没什么收获。另外,这个系列的博文中,有大量的基于博主对K8S的猜测!!!所以,很有可能有大量的错误!!!如果你发现博主说错的方面,希望你可以留言正确的信息,方便其它人去了解~博主也会尽可能的去更正[放心,博主绝对不会更正,你见博主留下的坑有填过吗……]
参考了很多资料,官方的就不写出来了,主要参考的是这篇博文[kubernetes高可用集群安装(二进制安装、v1.20.2版)];其它的,如果你认为博主主要是参考你的东西而没把你列出来,你可以留言[当然,博主不这么认为,因为网上基本就这一篇能做参考]~
废话说完,可能有废话忘记说了,反正这里开始……
首、快速跳转
K8S二进制部署高可用集群-1.22 [一] 系统环境与DOCKER部署
K8S二进制部署高可用集群-1.22 [二] 负载均衡器部署
K8S二进制部署高可用集群-1.22 [三] ETCD集群部署
K8S二进制部署高可用集群-1.22 [四] KUBE-APISERVER组件与KUECTL组件
K8S二进制部署高可用集群-1.22 [五] KUBE-CONTROLLER-MANAGER组件与KUBE-SCHEDULER组件
K8S二进制部署高可用集群-1.22 [六] KUBELET组件与KUBE-PROXY组件
K8S二进制部署高可用集群-1.22 [七] CALICO插件与CoreDNS插件
K8S二进制部署高可用集群-1.22 [结] 工作节点添加与删除
一、环境与其它
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# 忘记说了,加在这里吧,网盘提供的下载文件,是使用了目前官方最新的稳定版[2021.09.25] # 本教程所用到的二进制可执行文件可以从以下网址下载 # 百度网盘:https://pan.baidu.com/s/1GItiZfff79BGLcH3ked-TQ # 提取码:6gs8 *、机器环境 [MASTER] 主节点 K8S-MASTER01 192.168.100.41[eth0] K8S-MASTER02 192.168.100.42[eth0] K8S-MASTER03 192.168.100.43[eth0] [LB] 负载均衡器 192.168.100.40[VIP] K8S-LB01 192.168.100.44[eth0] K8S-LB02 192.168.100.45[eth0] [NODE] 工作节点 K8S-NODE01 192.168.100.46[eth0] K8S-NODE02 192.168.100.44[eth0] *、方案 1、K8S集群方案 :二进制部署 2、负载均衡方案:LVS[DR模式] + KEEPALIVED *、版本 OS --> CentOS 7 # 操作系统 kernel --> 5.14.6 # 内核版本 DOCKER --> 20.10.8 # DOCKER版本[包括相关的二进制文件] KUBERNETES --> 1.22.2 # KUBERNETES版本包括相关的二进制文件] cfssl --> 1.6.0 # 二进制文件 cfssljson --> 1.6.0 # 二进制文件 etcd --> 3.4.16 # 二进制文件 etcdctl --> 3.4.16 # 二进制文件 calico --> v3.20.1 # CALICO相关镜像的版本 |
特别提示:如果你在实验过程中,直接复制本博客任意博文中的配置/代码,"空格"字符的前面将可能产生不可见的字符"M-BM-",从而造成文件不可用,这是字符编码的问题~若必需使用复制粘贴方式,请务必手动替换掉配置项中的所有空格!!!或尝试使用以下命令过滤掉所有"M-BM-"字符~
1 2 3 4 |
sed -i 's/\xc2\xa0/ /g' [文件名称] # LINUX下可使用以下命令查看不可见字符的情况 cat -A [文件名称] |
二、系统优化[CENTOS 7]
关于这部分内容,博客直接贴了,因为博主想把更多的时间花在说明K8S二进制的部署配置上;另外,这部分的内容还是比较简单的,而不简单的,其实博主也不太懂;另外特别说明,博主是升级了LINUX的内核,博主使用的内核,在百度网盘的下载包中可以找到,如果你对这部分内容有什么不了解的话,可以留言~
另外特别说明一下,关于内核参数,博主的CENTOS环境是标准的官方ISO安装的虚拟机,所以默认是没有配置任务内核参数的,如果你使用的是云服务器,或者你的虚拟机已配置了某些内核参数,请注意内核参数的冲突问题;大部分的云主机是有默认的内核优化参数的;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
1、内核升级 下载指定的[rpm]内核文件[https://elrepo.org/linux/kernel/el7/x86_64/RPMS/]; 上传至服务器并执行以下命令; yum -y install kernel-ml-5.14.6-1.el7.elrepo.x86_64.rpm [GRUB]设定所使用的内核 awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg # 查询最新内核的位置[第一项表示“0”] grub2-set-default 0 # 配置默认的内核启动项 2、时区修改及时间同步 timedatectl set-timezone Asia/Shanghai timedatectl set-local-rtc 0 timedatectl set-ntp true timedatectl 3、关闭防火墙/SELINUX/SWAP: systemctl stop firewalld && systemctl disable firewalld // 仅CETONS系统 setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disable/' /etc/selinux/config // 仅CETONS系统 vim /etc/fstab // 关闭SWAP 4、启用IPTABLES[CENTOS7默认不存在"iptables.service"] yum -y install iptables-services && systemctl start iptables && systemctl enable iptables iptables -F && service iptables save iptables -L 5、启用IPVS所必须的内核模块[为"kube-proxy"组件使用作准备] # 确保"br_netfilte、ip_vs_sh、ip_vs_wrr、ip_vs_rr、ip_vs、nf_conntrack""模块在启用状态 # 注意,当内核小于"4.19"时,"nf_conntrack"名为"nf_conntrack_ipv4" # 注意,内核"5.14"已经没有了"br_netfilte"模块了[不确定那个内核版本开始没有的] lsmod | grep -e ^ip_vs -e ^nf_conntrack -e ^br_netfilter # 启用内核模块 cat > /etc/modules-load.d/k8s-ipvs.conf </etc/sysctl.d/k8s_better.conf << EOF net.bridge.bridge-nf-call-iptables=1 # IPVS所必需的配置 net.bridge.bridge-nf-call-ip6tables=1 # 上述IPVS所必需的配置 net.ipv4.ip_forward=1 # 启用IPV4转发 net.ipv4.tcp_tw_recycle=0 # 内核"5.14"没有此参数 vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它 vm.overcommit_memory=1 # 不检查物理内存是否够用 vm.panic_on_oom=0 # 开启 OOM fs.inotify.max_user_instances=8192 fs.inotify.max_user_watches=1048576 fs.file-max=52706963 fs.nr_open=52706963 net.ipv6.conf.all.disable_ipv6=1 net.netfilter.nf_conntrack_max=2310720 EOF sysctl -p /etc/sysctl.d/k8s_better.conf # 加载指定配置[执行一下,看一下是否有报错,内核参数可能有变动] 7、更改计算机名[示例]: MASTER:--> # hostnamectl set-hostname k8s-master01 NODE :--> # hostnamectl set-hostname k8s-node01 --> # hostnamectl set-hostname k8s-node02 8、HOSTS文件解释: cat >> /etc/hosts << "EOF" 192.168.100.41 k8s-master01 192.168.100.42 k8s-master02 192.168.100.43 k8s-master03 192.168.100.46 k8s-node01 192.168.100.47 k8s-node02 EOF *、MASTER 与 NODE 检查: ip addr show # 确保MAC的唯一性 cat /sys/class/dmi/id/product_uuid # 确保PRODUCT_UUID的唯一性 |
三、DOCKER二进制部署
又忘记说了,博主将所有的可执行文件放在了"/usr/local/bin"目录下,这包括了DOCKER、ETCD、K8S、CFSSL、......等等的二进制可执行文件,如果你下载了博主百度网盘中的文件,相关的二进制可执行文件全放这里就行了~另外别忘了执行"chmod 755 -R /usr/local/bin"给予相关文件可执行;另另外,你应该不会要博客说,DOCKER应该要安装在所有的K8S集群中所有MASTER与NODE节点上这种废话吧~
DOCKER的二进制部署比较简单,仅需要创建必要目录,并且写两份配置文件即可;创建相关目录:
1 |
mkdir /etc/docker |
创建"daemon.json"配置文件[记得删除说明的注释,后同!!!!!!];
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
cat > /etc/docker/daemon.json << "EOF" { "exec-opts": [ "native.cgroupdriver=systemd" # CPU\MEN的资源管理方式,值"cgroupfs/systemd"更高效; ], "log-driver": "json-file", # 日志的格式; "log-level": "warn", # 日志等级; "log-opts": { "max-size": "1000m", # 日志的最大限制; "max-file": "3" # 日志轮转的数量; }, "registry-mirrors": [ # 额外的镜像源设定; "https://docker.mirrors.ustc.edu.cn" # 使用你习惯的国内镜像源 ], "insecure-registries": [], # 信任的HTTP镜像仓库 "selinux-enabled": false # 禁用SELINUX } EOF |
创建"docker.service"文件;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
cat > /usr/lib/systemd/system/docker.service << "EOF" [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target Wants=network-online.target [Service] Type=notify ExecStart=/usr/local/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID Restart=on-failure TimeoutSec=0 RestartSec=2 Restart=always StartLimitBurst=3 StartLimitInterval=60s LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity Delegate=yes KillMode=process [Install] WantedBy=multi-user.target EOF |
启动DOCKER服务,你应该看到服务能正常运行,否则,你应该检查DOCKER的相关配置文件,另外注意前文所提示的字符问题;
1 |
systemctl daemon-reload && systemctl enable --now docker && systemctl status docker |
DOCKER的二进制安装到这里结束~好像没特别说DOCKER的什么东西?嗯~~有什么好说的吗,这又不是DOCKER教程~
结、
至此,本节就写到这里~就一些系统的基本配置与DOCKER的安装,如果你不是很了解K8S的一些部署要求,很可能你还是需要参考一些其它文章或视频,毕竟,这是K8S的二进制部署,这要难很多,这样的文章实际上是不适合对K8S了解过浅的用户阅读的~但毕竟博主也不能细说那么多,毕竟,这些东西比起后面的难度,真的差多了~~这章就这样吧~~
可点击以下链接进入下一章;
Hello!
Good cheer to all on this beautiful day!!!!!
Good luck
2024-11-14 下午4:52谢谢博主 k8s 做可以哦
2021-12-05 下午11:18