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
- 安装 CLI 与 containerd 交互(此步骤非必须)
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
本文来自博客园,作者:ヾ(o◕∀◕)ノヾ,转载请注明原文链接:https://www.cnblogs.com/Jupiter-blog/p/18599228
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?