k8s-1.28.15 kubeadm方式部署

kubeadm方式部署

系统

  • CentOS 7
  • RockyLinux9

部分镜像无法拉取(重要)

可改由 m.daocloud.io 拉取。

例如 quay.io/tigera/operator , 可crictl pull m.daocloud.io/quay.io/tigera/operator:v1.34.5

再添加标签, ctr -n k8s.io i tag m.daocloud.io/quay.io/tigera/operator::v1.34.5 quay.io/tigera/operator::v1.34.5

阿里云源配置(可选)

cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF

禁用swap(必须)

  • 一次性禁用
  swapoff -a
  • 永久禁用
sed -i.bak '/swap/s/^/#/' /etc/fstab

建议两者都执行,这样后续的步骤可继续执行,不需要重启,下次服务器重启也不会因swap而受影响。

配置hosts

# master 和 slave 节点都需要
cat /etc/hosts
>>>>>
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.31.45 rockylinux9
192.168.31.151 centos7

安装kubelet、kubeadm、kubectl

yum install -y kubelet kubeadm kubectl
systemctl enable --now kubelet

查看目前源支持哪些版本

yum list --showduplicates kubeadm

加载 br_netfilter 内核模块

kubeadm 在执行预检检查时发现 /proc/sys/net/bridge/bridge-nf-call-iptables 文件不存在。

这个文件是用于控制 Netfilter 是否处理桥接流量的重要配置文件。

modprobe br_netfilter

echo "br_netfilter" | sudo tee -a /etc/modules-load.d/k8s.conf

启用 IPv4 数据包转发,调整br_netfilter内核参数,调整命名空间内核参数

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
user.max_user_namespaces=28633
EOF

sudo sysctl --system

开启ipvs(非必须)

ipvs已经加入到了内核的主干,不需要额外下载软件包。

# 重启后能自动加载
cat > /etc/modules-load.d/ipvs.conf <<EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
EOF
# 立即生效
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh

yum install -y ipset ipvsadm

安装containerd

  • 下载 containerd,解压到 /usr/local,其中的二进制文件会直接放到 /usr/local/bin 路径下。
wget https://github.com/containerd/containerd/releases/download/v1.7.3/containerd-1.7.3-linux-amd64.tar.gz
tar Cxzvf /usr/local containerd-1.7.3-linux-amd64.tar.gz
  • 配置 systemd 托管服务。
wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -O /etc/systemd/system/containerd.service
systemctl damon-reload
systemctl enable containerd --now
  • 配置containerd,重启服务
mkdir -p /etc/containerd
# containerd生成默认配置
containerd config default > /etc/containerd/config.toml
sed -i "s/SystemdCgroup = false/SystemdCgroup = true/" /etc/containerd/config.toml
systemctl restart containerd
  • 下载runc,将二进制文件放到 /usr/local/sbin/runc ,并设置755权限。
wget https://github.com/opencontainers/runc/releases/download/v1.1.9/runc.amd64
install -m 755 runc.amd64 /usr/local/sbin/runc
  • 安装cni plugins
wget http://github.com/containernetworking/plugins/releases/download/v1.6.0/cni-plugins-linux-amd64-v1.6.0.tgz
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.6.0.tgz
  • 安装 CLIcontainerd 交互(此步骤非必须)
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.28.0/crictl-v1.28.0-linux-amd64.tar.gz
tar -zxvf crictl-v1.28.0-linux-amd64.tar.gz
install -m 755 crictl /usr/local/bin/crictl

# 配置crictl(因为crictl默认连接到 unix:///var/run/dockershim.sock)
cat <<EOF | tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
EOF

crictl --runtime-endpoint=unix:///run/containerd/containerd.sock  version

命令补全(非必须)

yum -y install bash-completion
source /etc/profile.d/bash_completion.sh
echo "source <(kubectl completion bash)" >> ~/.bash_profile
# 或者 kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl
source ~/.bash_profile 

kubeadm初始化集群

  • 生成集群初始化默认的使用的配置文件
kubeadm config print init-defaults --component-configs KubeletConfiguration >> kubeadm.yml
  • 拉取组件镜像
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
# 或
kubeadm config images pull --image-repository k8s-gcr.m.daocloud.io
  • kubeadm init 初始化集群
kubeadm init --config kubeadm.yml
  • 配置 ~/.kube/config 以便使用 kubectl 访问集群
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 如初始化遇到问题,需要重置
kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/*
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/*
rm -rf $HOME/.kube/config

安装helm

  • 使用官方提供的shell脚本进行一键自动安装。
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
  • 配置自动补全
helm completion bash | sudo tee /etc/bash_completion.d/helm

安装网络组件

  • 安装 calico 插件
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/custom-resources.yaml
  • 检查是否启动成功
kubectl get pods -n tigera-operator
kubectl get pods -n calico-system

# 上述检查正常后,可以看到coredns的正常运行
kubctl get pods -n kube-system

如需强制删除pod

kubectl delete pod ????? -n ????? --force --grace-period=0
posted @   ヾ(o◕∀◕)ノヾ  阅读(83)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示