下面给你一个在 CentOS 7/8 上使用脚本自动化部署 Kubernetes(kubeadm 方式)的完整思路和示例脚本,适合单 Master 测试/学习环境,生产环境建议再做高可用和安全加固。
pre.sh#!/bin/bash
set -e
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭 SELinux
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 关闭 swap
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
# 设置内核参数
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
EOF
sysctl --system
# 配置 yum 源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
containerd.sh#!/bin/bash
set -e
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y containerd.io
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
# 修改 sandbox 镜像
sed -i 's#registry.k8s.io/pause#registry.aliyuncs.com/google_containers/pause#' /etc/containerd/config.toml
systemctl enable containerd
systemctl restart containerd
k8s-install.sh#!/bin/bash
set -e
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0
systemctl enable kubelet
master-init.sh#!/bin/bash
set -e
kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket unix:///run/containerd/containerd.sock
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://docs.projectcalico.org/v3.26/manifests/calico.yaml
在 Master 执行:
kubeadm token create --print-join-command
Worker 节点执行输出内容,例如:
kubeadm join 192.168.1.10:6443 \
--token xxx \
--discovery-token-ca-cert-hash sha256:xxx
# 所有节点
bash pre.sh
bash containerd.sh
bash k8s-install.sh
# Master
bash master-init.sh
# Worker
kubeadm join ...
kubectl get nodes
kubectl get pods -A
journalctl -u kubelet -f
如果你需要:
告诉我你的环境和用途,我可以直接帮你写完整脚本。