以单节点为例,多节点一样部署基础环境后续添加工作节点即可
1、主机配置
hostnamectl set-hostname k8s-master
echo "172.21.131.89 k8s-master" >> /etc/hosts
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
sestatus #查看selinux 状态
2、多节点进行时间同步
ntpdate
ntpdate time1.aliyun.com
3、升级内核
导elrepo gpg key,软件验证 # rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 安装elrepoYUM源仓库 # yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm 安装kernel-ml版本,ml为长期稳定版本,1t为长期维护版本 # yum --enablerepo="elrepo-kernel" -y install kernel-lt.x86_64 设置grub2默认引导为0,就是重启后会使用最新内核 # grub2-set-default 0 重新生成grub2引导文件 # grub2-mkconfig -o /boot/grub2/grub.cfg 更新后,需要重启,使用升级的内核生效。 #reboot
重启后检查版本
#uname -r
4、配置内核转发以及过滤
添加网桥过滤及内核转发配置文件 cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 #启用 IPv6 数据包经过 iptables 的处理。 net.bridge.bridge-nf-call-iptables = 1 #启用 IPv4 数据包经过 iptables 的处理。 net.ipv4.ip_forward = 1 #启用 IPv4 数据包的转发功能。 vm.swappiness = 0 #闭交换分区的使用,使系统更加倾向于使用物理内存而非交换分区。 EOF 加载br_netfilter模块 # modprobe br_netfilter
# sysctl -p /etc/sysctl.d/k8s.conf 查看是否加载 # lsmod | grep br_netfilter br_netfilter 222560 设置开机自启
vi /etc/sysconfig/modules/br_netfilter.modules
#!/bin/bash
modprobe br_netfilter
设置权限
chmod 755 /etc/sysconfig/modules/br_netfilter.modules
5、安装ipset ipvsadm,IPVS(IP Virtual Server)是一个用于负载均衡的 Linux 内核模块,它可以用来替代 kube-proxy 默认的 iptables 方式。IPVS 提供了更高效和可扩展的负载均衡功能,特别适用于大规模的集群环境。
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
配置文件解析:
-
ip_vs
:这是 IPVS 的核心模块,用于实现 IP 负载均衡。它拦截流量并将其转发到后端的服务节点,以实现负载均衡和高可用性。 -
ip_vs_rr
:这个模块实现了基于轮询的调度算法(Round Robin),它按顺序将请求分配给后端节点,直到达到最大连接数限制。 -
ip_vs_wrr
:这个模块实现了加权轮询的调度算法(Weighted Round Robin),它根据节点的权重分配请求,可以使具有更高权重的节点处理更多的请求。 -
ip_vs_sh
:这个模块实现了源地址哈希的调度算法(Source Hash),它基于请求的源 IP 地址将请求分发到后端节点。相同的源 IP 地址将始终被分配到同一个后端节点。 -
nf_conntrack
:这个模块提供了网络连接跟踪功能,用于跟踪数据包的连接状态,以便正确地处理负载均衡过程中的网络流量。
6、关闭swap 分区
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
7、部署containerd
7.1、containerd 准备 # github 地址:https://github.com/containerd/containerd
wget https://github.com/containerd/containerd/releases/download/v1.7.3/cri-containerd-1.7.3-linux-amd64.tar.gz
tar xf cri-containerd-1.7.3-linux-amd64.tar.gz -c /
配置配置文件
mkdir /etc/contained
containerd config default > /etc/contained/config.toml
vi /etc/contained/config.toml
sandbox_image = "redistry.k8s.io/pause:3.9" #由3.8修改为3.9
设置开机自启
systemctl enable --now containerd
7.2、runc 准备(替换原有问题的runc)
github:https://github.com/opencontainers/runc/releases/tag/v1.1.9
libseccomp准备
下载部署包
tar -xvf libseccomp-2.5.4.tar.gz
yum -y install gperf
cd libseccomp-2.5.4
./configure
make
make install
find / -name "libseccomp.so"
安装runc
gtihub:https://github.com/opencontainers/runc/releases/download/v1.1.9/runc.amd64
rm -rf `which runc`
chmod +x runc.amd64
mv runc.amd64 runc
mv runc /usr/local/sbin/
8、部署K8S
8.1、K8S集群软件部署,选择一个yum 源即可
cat > /etc/yum.repos.d/k8s.repo <<EOF [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey-https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF cat > /etc/yum.repos.d/k8s.repo <<EOF [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
更新后查看是否存在1.28镜像
yum clean all
yum makecache
yum list kubeadm.x86_64 --showduplicates
yum -y install kubeadm-1.28.0-0 kubelet-1.28.0-0 kubectl-1.28.0-0
8.2、K8S软件初始化
#配置kubelet
[root@k8s-master wrap]# vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
systemctl enable kubelet
#替换证书
登陆K8S git官网下载:https://github.com/kubernetes/kubernetes/archive/refs/tags/v1.28.0.tar.gz
文件解压后修改配置文件 40 ,80 行修改证书时间
vim kubernetes-1.28.0/staging/src/k8s.io/client-go/util/cert/cert.go
安装go 环境
执行安装
tar xf go1.21.0.linux-amd64.tar.gz
vim /etc/profile
export PATH=$PATH:/usr/local/go/bin
source /etc/profile
K8S源码编译
cd kubernetes-1.28.0/
make all WHAT=cmd/kubeadm GOFLAGS=-v
ls _output/bin/
kubeadm ncpu
替换所有节点上的kubeadm
rm -rf `which kubeadm`
cp _output/bin/kubeadm /usr/bin/kubeadm
集群初始化
kubeadm init --kubernetes-version=v1.28.0 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.21.131.89 --cri-socket unix:///var/run/containerd/containerd.sock
新版本--cri-socket可以不添加 默认优先选择contained
拉取镜像失败使用:
kubeadm init --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.28.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.21.131.89
如果时间较长提前下载镜像
kubeadm config images list
kubeadm config images pull
8.3、加入工作节点
yum -y install kubeadm-1.28.0-0 kubelet-1.28.0-0 kubectl-1.28.0-0
多节点需要替换kubeadm
kubeadm join 192.168.10.140:6443 --token hd74hg.r8l1pe4tivwyjz73 --discovery-token-ca-cert-hash sha256:29a00daed8d96dfa8e913ab4c0a8c4037f1c253a20742ca8913932dd7c8b3bd1
8.4、验证集群
8.5、calico部署
calico访问链接:https://projectcalico.docs.tigera.io/about/about-calico
# kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml
# wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml
# vim custom-resources.yaml
# This section includes base Calico installation configuration.
# For more information, see: https://projectcalico.docs.tigera.io/master/reference/installation/api#operator.tigera.io/v1.Installation
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
name: default
spec:
# Configures Calico networking.
calicoNetwork:
# Note: The ipPools section cannot be modified post-install.
ipPools:
- blockSize: 26
cidr: 10.244.0.0/16 修改此行内容为初始化时定义的pod network cidr
encapsulation: VXLANCrossSubnet
natOutgoing: Enabled
nodeSelector: all()
---
# This section configures the Calico API server.
# For more information, see: https://projectcalico.docs.tigera.io/master/reference/installation/api#operator.tigera.io/v1.APIServer
apiVersion: operator.tigera.io/v1
kind: APIServer
metadata:
name: default
spec: {}
kubectl create -f custom-resources.yaml