本章程安装k8s 1.30版本为例。
1、环境配置
k8s 自1.24版本起,移除了dockershim了,1.30使用了containerd运行部署,containerd部署文档参考centos安装containerd-CSDN博客
k8s部署环境可参考容器运行时 | Kubernetes
1.1、修改主机名称
#!/bin/sh
hostnamectl set-hostname master
hostnamectl status
1.2、禁止交换分区
#!/bin/shsudo swapoff -a# 在 /etc/fstab 中注释掉 swap 配置
sed -ri 's/.*swap.*/#&/' /etc/fstab
1.3、禁用防火墙
#!/bin/shsystemctl stop ufw
systemctl disable ufw
1.4、转发IPV4
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
#!/bin/shcat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOFsudo modprobe overlay
sudo modprobe br_netfilter# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF# 应用 sysctl 参数而不重新启动
sudo sysctl --system
1.5、安装ipvs管理工具
#!/bin/shapt install ipvsadm
2、安装kubectl+kubelet+kubeadm
参考k8s官网说明文档
安装脚本
#1、更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包:
sudo apt-get update
# apt-transport-https 可能是一个虚拟包(dummy package);如果是的话,你可以跳过安装这个包
sudo apt-get install -y apt-transport-https ca-certificates curl gpg#2、下载用于 Kubernetes 软件包仓库的公共签名密钥。所有仓库都使用相同的签名密钥,因此你可以忽略URL中的版本:
# 如果 `/etc/apt/keyrings` 目录不存在,则应在 curl 命令之前创建它,请阅读下面的注释。
# sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg#3、添加 Kubernetes apt 仓库。 请注意,此仓库仅包含适用于 Kubernetes 1.30 的软件包
# 此操作会覆盖 /etc/apt/sources.list.d/kubernetes.list 中现存的所有配置。
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list#4、更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:
sudo apt-get update
sudo apt-get install -y kubelet='1.30.3-1.1' kubeadm='1.30.3-1.1' kubectl='1.30.3-1.1'
sudo apt-mark hold kubelet kubeadm kubectl
3、版本修改
#解除版本
apt-mark unhold kubelet kubeadm kubectl
#安装新版本
apt-get update
apt-get install -y kubelet='1.29.6-1.1' kubeadm='1.29.6-1.1' kubectl='1.29.6-1.1'
#锁定版本
apt-mark hold kubelet kubeadm kubectl
4、集群初始化
使用kubeadm init 命令进行初始化集群
#/bin/sh
kubeadm init --config kubeadm-init.yaml
其中kubeadm-init.yaml为集群参数配置文件
配置文件可先使用默认命令导出来后,再根据项目需要调整,再通过初始化命令进行初始化集群。
#/bin/sh#导出默认模版
kubeadm config print init-defaults > kubeadm-init-defaults.yaml
修改的yaml文件为
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 1.2.3.4 #填写本机IPbindPort: 6443
nodeRegistration:criSocket: unix:///var/run/containerd/containerd.sockimagePullPolicy: IfNotPresentname: nodetaints: null
---
apiServer:timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:local:dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers #registry.k8s.io
kind: ClusterConfiguration
kubernetesVersion: 1.30.0
networking:dnsDomain: cluster.localserviceSubnet: 10.96.0.0/12
scheduler: {}---
kind: KubeProxyConfiguration
apiVersion: kubeproxy.config.k8s.io/v1alpha1
mode: ipvs
iptables:masqueradeAll: false---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd
#证 书 轮 训
rotateCertificates: true
#单 节 点 最 大 pod数 ( 默 认 110)
maxPods: 220
#驱 逐 pod阈 值
evictionHard:memory.available: "500Mi"nodefs.available: "1Gi"imagefs.available: "1Gi"
evictionMinimumReclaim:memory.available: "0Mi"nodefs.available: "500Mi"
安装成功打印日志
将k8s配置文年复制到当前用户的 home 目录中
#/bin/shmkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/configexport KUBECONFIG=/etc/kubernetes/admin.conf
5、安装flannel网络插件
注意flannel与k8s初始化脚本的网段要相同
# 下载Flannel的YAML配置文件
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml# 修改Flannel的YAML配置文件中的网络前缀,以匹配你的网络环境
# 例如,如果你的Pod网络是10.244.0.0/16,则需要将flannel的网络前缀设置为这个值
# 注意:这一步通常是可选的,因为Flannel可以自动检测网络前缀。# 应用Flannel的配置文件
kubectl apply -f kube-flannel.yml# 确保Flannel的Pod正在运行
kubectl get pods -n kube-system
6、检查集群是否启动成功
#重启containerd
systemctl restart containerd#获取集群信息kubectl get pods -A -o wide
7、集群初始化失败回退操作
可以进行reset清除文件,可参考官网
#!/bin/shkubeadm resetrm -rf /etc/cni
rm -rf /etc/kubernetes
rm -rf /run/secrets/kubernetes.io
rm -rf /run/calico
rm -rf /var/lib/etcd
rm -rf /var/lib/cni
rm -rf /var/lib/kubelet
rm -rf /var/log/containers
rm -rf /var/log/pods
rm -rf /var/run/calico
rm -rf $HOME/.kubeipvsadm --clear