kubeadm方式部署:
Kubernetes 1.27.2版本集群部署环境准备1 Master + 2 Node
主机:hostnamectl set-hostname k8s-master
节点1:hostnamectl set-hostname k8s-node01
节点2:hostnamectl set-hostname k8s-node02
配置/etc/hosts:
192.168.1.16 k8s-master
192.168.1.17 k8s-node01
192.168.1.18 k8s-node02
关闭防火墙:
systemctl disable firewalld
systemctl stop firewalld
firewall-cmd --state
关闭selinux:
setenforce 0
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
安装配置时间同步:
yum install -y ntpdate
crontab -e
0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com
crontab -l
升级操作系统内核:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
#使用长期维护版
yum --enablerepo="elrepo-kernel" -y install kernel-lt.x86_64
grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
#查看版本:
uname -r
配置内核转发及网桥过滤
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
#加载br_netfilter模块
modprobe br_netfilter
#查看是否加载,没加载kubeinit会报错
lsmod | grep br_netfilter
#安装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
关闭交换分区:
swapoff -a
永久关闭:
vi /etc/fstab
#注释掉下面那句:
# /dev/mapper/centos-swap swap swap defaults 0 0
安装containerd:
wget https://github.com/containerd/containerd/releases/download/v1.7.0/cri-containerd-cni-1.7.0-linux-amd64.tar.gz
tar xf cri-containerd-cni-1.7.0-linux-amd64.tar.gz -C /
mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml #这个文件要配置,后面有说,不然kubeadm init会报错
sed -i '/SystemdCgroup/s/false/true/g' /etc/containerd/config.toml
sed -i '/sandbox_image/s/registry.k8s.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml
没有上面SystemCgroup=ture会造成下面的报错:

systemctl enable --now containerd
安装runc:
wget https://github.com/opencontainers/runc/releases/download/v1.1.5/libseccomp-2.5.4.tar.gz
tar xf libseccomp-2.5.4.tar.gz
cd libseccomp-2.5.4/
yum install gperf -y
yum install -y gcc #系统最小化安装没有的话要安装这个gcc编译器
./configure
make && make install
find / -name "libseccomp.so"
wget https://github.com/opencontainers/runc/releases/download/v1.1.5/runc.amd64
chmod +x runc.amd64
which runc
mv runc.amd64 /usr/local/sbin/runc #覆盖到上个命令找到的那个路径
runc #能看到帮助信息证明成功
#安装k8s集群:
#配置源【每台机】
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
yum -y install kubeadm-1.27.2-0 kubelet-1.27.2-0 kubectl-1.27.2-0
#master中:
vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
systemctl enable kubelet
kubeadm init --kubernetes-version=v1.27.2 --pod-network-cidr=10.244.0.0/16
--apiserver-advertise-address=192.168.1.16 --cri-socket unix:///var/run/containerd/containerd.sock
#完成安装之后,会提示在master配置几条命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
#其它节点添加到master,分别是 token和证书哈希值,每个都不一样的:
kubeadm join 192.168.1.16:6443 --token elnlr1.qgdi7mi15p320zan \
--discovery-token-ca-cert-hash sha256:e38e8225fa0f54849f78674d2be0f736f8e1c74bf5e141526a83fca57d7ff7dc
部署colia插件:
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/tigera-operator.yaml
wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/custom-resources.yaml
#修改文件中的cidr值:部署的kubeadm init中的--pod-network-cidr地址
vi custom-resources.yaml
kubectl create -f custom-resources.yaml
#查看部署信息
kubectl get pods -n calico-system
验证集群部署是否成功:
#部署nginx,并把端口80端口暴露出来
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
#查看暴露的信息:例如暴露80端口对应的是31933
kubectl get pod,svc
#获得信息:service/nginx NodePort 10.106.27.19 80:31933/TCP 77m
#访问地址,会获得web服务器响应
curl 192.168.1.16:31933

浏览器访问其它群集节点:

部署查考地址