第三章 kubeadm快速部署kubernetes1.24.x集群
1 kubernetes集群环境准备
1.1 主机操作系统说明
- 操作系统版本7.9、对默认操作系统内核进行升级
1.2 主机配置
1.2.1 主机名配置
由于本次使用3台主机完成kubernetes集群部署,其中1台为master节点,其中两台为worker节点;
master节点 # hostnamectl set-hostname k8s-master01 worker节点 # hostnamectl set-hostname k8s-worker01 # hostnamectl set-hostname k8s-worker02
1.2.2主机地址配置,将主机配置成静态地址
# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=f50073c6-e9ab-407f-a85f-94fd77b2b8d7 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.1.7 PREFIX=24 GATEWAY=192.168.1.1 DNS1=8.8.8.8
1.2.3 配置hosts文件
# vim /etc/hosts 192.168.1.7 k8s-master01 192.168.1.8 k8s-worker01 192.168.1.9 k8s-master02
1.2.4 防火墙配置
# systemctl disable firewalld
# systemctl stop firewalld
# firewall-cmd --state
1.2.5 SELINUX配置
# setenforce 0 # sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
1.2.6 时间同步配置
# crontab -l 0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com
1.2.7 升级操作系统内核
所有主机都需要操作 导入elrepo gpg key # rpm --import https://www.elrepo.ory/RPM-GPG-KEY-elrepo.org 安装elrepo YUM源仓库 # yum -y install http://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm 安装kernel-ml版本,ml为长期稳定版本,lt为长期维护版本,可以通过kernel.org进行查看 # yum --enablerepo="elrepo-kernel" install -y kernel-lt.x86_64 设置grub2默认引导为0 #grub2-set-default 0 重新生成grub2引导文件 # grub2-mkconfig -o /boot/grub2/grub.cfg 更新后,需要重启,使用升级的内核生效。 # reboot 重启后,需要验证内核是否为更新对应的版本 # uname -r
1.2.8 配置内核转发机网桥过滤
添加网桥过滤及内核转发配置文件 # cat /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 vm.swappiness = 0
加载br_netfilter模块
# modprobe br_netfilter
查看是否加载
# lsmod | grep br_netfilte
1.2.9 安装ipset及ipvsadm
安装ipset和ipvsadm
# yum -y install ipset ipvsadm
配置ipvsadm模块加载方式 添加需要加载的模块 # 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 >EOF 授权、运行、检查是否加载 # chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules# lsmod | grep -e ip_vs -e nf_conntrack
1.2.10 关闭SWAP分区
#永久关闭swap分区,需要重启操作系统 # swapoff -a # vim /etc/fstab 将swap挂载行进行注释
1.3 docker准备
1.3.1 Docker安装YUM源准备
# step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3 sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo # Step 4: 更新并安装Docker-CE sudo yum makecache fast sudo yum -y install docker-ce # Step 4: 开启Docker服务 sudo service docker start # 注意: # 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。 # vim /etc/yum.repos.d/docker-ce.repo # 将[docker-ce-test]下方的enabled=0修改为enabled=1 # # 安装指定版本的Docker-CE: # Step 1: 查找Docker-CE的版本: # yum list docker-ce.x86_64 --showduplicates | sort -r # Loading mirror speeds from cached hostfile # Loaded plugins: branch, fastestmirror, langpacks # docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable # docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable # docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable # Available Packages # Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos) # sudo yum -y install docker-ce-[VERSION]
1.3.2 修改cgroup方式
在/etc/docker/daemon.json添加如下内容 # vim /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"] } # systemctl restart docker # docker info
1.3.3 cri-dockerd安装
1.3.3.1 golang环境准备
wget https://storage.googleapis.com/golang/getgo/installer_linux chmod +x ./installer_linux ./installer_linux source ~/.bash_profile
1.3.3.2 下载cri-dockerd源码包
git clone https://github.com/Mirantis/cri-dockerd.git
安装
cd cri-dockerd mkdir bin go build -o bin/cri-dockerd mkdir -p /usr/local/bin install -o root -g root -m 0755 bin/cri-dockerd /usr/local/bin/cri-dockerd cp -a packaging/systemd/* /etc/systemd/system sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service systemctl daemon-reload systemctl enable cri-docker.service systemctl enable --now cri-docker.socket
1.4 kubernetes1.24.x集群部署
1.4.1 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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF setenforce 0
默认安装 yum install -y kubelet kubeadm kubectl
systemctl enable kubelet
查看指定版本 # yum list kubeadm.x86_64 --showduplicates |sort -r # yum list kubelet.x86_64 --showduplicates |sort -r # yum list kubectl.x86_64 --showduplicates |sort -r
安装指定版本 # yum -y install kubeadm-1.24.x-0 kubelet-1.24.x-0 kubectl-1.24.x-0
# systemctl enable kubelet
1.4.2 配置kubelet
vim /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
1.4.3 集群镜像准备
# kubeadm config images list --kubernetes-version=v1.24.x
拉去镜像,此步需要上外网,或是通过可以访问goole的机器将镜像拉取下来后,在进行初始化
# cat image_download.sh #!/bin/bash images_list=' 镜像列表' for i in $images_list do docker pull $i done #镜像导出 docker save -o k8s-1-24-x.tar $images_list 将导出的镜像导入的k8smaster节点 docker load -i k8s-1-24-x.tar
1.4.4 集群初始化
kubeadm init \ --kubernetes-version v1.24.7 \ --pod-network-cidr=10.244.0.0/16 \ --apiserver-advertise-address=192.168.1.7 \ --cri-socket unix:///var/run/cri-dockerd.sock
1.5 集群网络准备
安装参考网址:https://projectcalico.docs.tigera.io/about/about-calico
1.5.1 安装calico和自定义资源定义
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.5/manifests/tigera-operator.yaml
1.5.2 通过创建必要的自定义资源来安装 Calico
wget https://raw.githubusercontent.com/projectcalico/calico/v3.24.5/manifests/custom-resources.yaml
1.5.3 修改文件第13行,修改为使用kubeadm init --pod-network-cidr对应的IP地址段
# vim custom-resources.yaml ipPools: - blocksize: 26 cidr: 10.224.0.0./16 encapsulation:
当node无法正常运行时,可以考虑在此文件中添加相关内容
nodeAddressAutodetectionV4: interface: ens.*
应用资源清单文件
# kubectl apply -f custom-resources.yaml
不积跬步,无以至千里;不积小流,无以成江海。