前言
在本篇技术文章中,我将分享在Kubernetes集群中进行配置和初始化的完整过程。这个过程涵盖了从配置主机到k8s集群各组件安装和集群的初始化和网络插件的安装以及mogdb的部署。
下图是从官方Kubernetes文档:++https://kubernetes.io/docs/concepts/overview/components/++
中提取的一个架构示意图。
它主要从云服务提供商的视角展示了Kubernetes集群的基本架构。图中详细描绘了云服务API与Kubernetes集群中的控制平面(Control Plane和工作节点(Node之间的关系。值得注意的是,这个架构图专门省略了一些第三方实现的组件,如容器运行时接口(CRI)、容器网络接口(CNI)和容器存储接口(CSI)
● kube-apiserver:扮演着至关重要的角色,它对外暴露了Kubernetes API并作为整个系统的前端控制层。这个组件被设计成可水平扩展的,即可以通过增加更多实例来提升其处理能力。
● etcd:作为Kubernetes集群的后端存储,负责存储集群的配置信息和各种资源状态。对Kubernetes集群的 etcd数据进行持续备份至关重要,以确保数据的安全和一致性。etcd在数据变更时能迅速通知集群中的相关组件。
●kube-scheduler:负责新创建的Pod的调度。当集群中出现尚未分配给任何节点的新Pod时,kube-scheduler 会基于节点的当前负载、应用的高可用性、性能要求和数据亲和性等因素来决定最合适的节点。
●kube-controller-manager:运行各种控制器,处理集群中的常规任务。为了减少复杂性,虽然逻辑上每个控制器是独立的进程,但它们都被编译成一个单独的可执行文件,并在同一个进程中运行。这些控制器包括节点控制器(Node Controller)、副本控制器(Replication Controller)、端点控制器(Endpoints Controller)、服务账户和令牌控制器(Service Account & Token Controllers)等
Kubernetes 中的三大关键插件分别负责运行时、网络和存储管理,它们是容器运行时接口(Container Runtime Interface, CRI)、容器网络接口(Container Network Interface, CNI)和容器存储接口(Container Storage Interface, CSI)。需要注意的是,CRI和CNI 是每个Kubernetes集群必需部署的基础组件,而CSI 则根据需求而定,通常在运行有状态服务时才会用到。
一、环境准备
此次用到的是一主两从的Kubernetes高可用架构
1、配置主机文件
[root@master01 ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.211.55.20 master01
10.211.55.21 node01
10.211.55.22 node02
10.211.55.20 master-lb # 如果不是高可用集群,该IP为Master01的IP
2、CentOS7安装yum源:
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、设置Kubernetes yum源:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
移除某些yum源:
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
4、必备工具安装
yum install wget jq psmisc vim net-tools telnet yum-utils device-mapper-persistent-data lvm2 git -y
5、关闭不需要的功能
所有节点关闭防火墙、selinux、dnsmasq、swap。
systemctl disable --now firewalld
systemctl disable --now dnsmasq
systemctl disable --now NetworkManager
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
关闭swap分区
swapoff -a && sysctl -w vm.swappiness=0
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
6、服务器同步时间
所有节点安装安装ntpdate
rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
yum install ntpdate -y
同步时间
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' >/etc/timezone
ntpdate time2.aliyun.com
将时间同步加入到crontab:
*/5 * * * * /usr/sbin/ntpdate time2.aliyun.com
7、配置系统限制
#所有节点执行
ulimit -SHn 65535
vim /etc/security/limits.conf
# 末尾添加如下内容
* soft nofile 655360
* hard nofile 131072
* soft nproc 655350
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited
8、配置SSH免密钥登录
Master01节点免密钥登录其他节点,安装过程中生成配置文件和证书均在Master01上操作,集群管理也在Master01上操作,阿里云或者AWS上需要单独一台kubectl服务器。密钥配置如下:
ssh-keygen -t rsa
for i in master01 node01 node02;do ssh-copy-id -i .ssh/id_rsa.pub $i;done
9、下载安装源码文件
cd /root/ ; git clone https://github.com/dotbalo/k8s-ha-install.git
10、系统升级
#CentOS7需要升级,CentOS8可以按需升级系统
yum update -y --exclude=kernel* && reboot
内核升级
CentOS7 需要升级内核至4.18+,本地升级的版本为4.19
cd /root
wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm
wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-4.19.12-1.el7.elrepo.x86_64.rpm
所有节点安装内核
cd /root && yum localinstall -y kernel-ml*
所有节点更改内核启动顺序
grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
检查默认内核是不是4.19
grubby --default-kernel
/boot/vmlinuz-4.19.12-1.el7.elrepo.x86_64
所有节点重启,然后检查内核是不是4.19
reboot
uname -a
Linux node02 4.19.12-1.el7.elrepo.x86_64 #1 SMP Fri Dec 21 11:06:36 EST 2018 x86_64 x86_64 x86_64 GNU/Linux
11、安装ipvsadm
所有节点安装ipvsadm:
yum install ipvsadm ipset sysstat conntrack libseccomp -y
所有节点配置ipvs模块,在内核4.19+版本nf_conntrack_ipv4已经改为nf_conntrack, 4.18以下使用nf_conntrack_ipv4即可:
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
配置ipvs.conf
vim /etc/modules-load.d/ipvs.conf
# 加入以下内容
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
服务生效
systemctl enable --now systemd-modules-load.service
12、配置Kubernetes集群所需的内核参数
开启一些k8s集群中必须的内核参数,所有节点配置k8s内核:
cat <<EOF > /