1 初始化操作
修改机器名称
hostnamectl set-hostname node/master
更改/etc/hosts
192.168.10.67 node01
v1.28需要使用cri-dockerd界面
shell如下
#!/bin/bash
set -x
echo "请修改你的hostname和hosts文件"
# 检查root权限
if [ "$(id -u)" != "0" ]; then
echo "请使用root用户执行此脚本"
exit 1
fi
# 全局配置
K8S_VERSION="1.28.0"
CRI_DOCKER_VERSION="0.3.10"
POD_CIDR="10.244.0.0/16"
SERVICE_CIDR="10.96.0.0/12"
ADVERTISE_ADDR=$(hostname -I | awk '{print $1}')
IMAGE_REPO="registry.aliyuncs.com/google_containers"
CRI_SOCKET="unix:///var/run/cri-dockerd.sock"
# 系统初始化配置
init_system() {
# 禁用SELinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 禁用swap
swapoff -a
sed -i '/ swap /s/^/#/g' /etc/fstab
# 加载内核模块
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
# 设置内核参数
cat <<EOF | 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
EOF
sysctl --system
}
# 安装基础工具
install_tools() {
# 配置阿里云yum源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release
yum -y install wget net-tools iftop htop iotop yum-utils device-mapper-persistent-data lvm2
}
# 安装Docker
install_docker() {
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce-20.10.24 docker-ce-cli-20.10.24 containerd.io
# 配置Docker
mkdir -p /etc/docker
cat <<EOF | tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"registry-mirrors": [
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.udayun.com/",
"https://docker.xuanyuan.me/",
"https://docker.wanpeng.top",
"https://docker.rainbond.cc",
"https://xdark.top"
],
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
systemctl enable docker
systemctl start docker
}
# 安装CRI-Docker
install_cri_docker() {
if [ ! -f /usr/local/bin/cri-dockerd ] ; then
curl -LO https://github.com/Mirantis/cri-dockerd/releases/download/v${CRI_DOCKER_VERSION}/cri-dockerd-${CRI_DOCKER_VERSION}.amd64.tgz
tar xvf cri-dockerd-${CRI_DOCKER_VERSION}.amd64.tgz
mv cri-dockerd/cri-dockerd /usr/local/bin/
cat <<EOF | tee /usr/lib/systemd/system/cri-docker.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target docker.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --container-runtime-endpoint unix:///var/run/cri-dockerd.sock --network-plugin=cni --cni-conf-dir=/etc/cni/net.d
ExecReload=/bin/kill -s HUP \$MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
[Install]
WantedBy=multi-user.target
EOF
fi
systemctl daemon-reload
systemctl enable cri-docker.service
systemctl start cri-docker.service
}
# 安装Kubernetes组件
install_k8s() {
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet-${K8S_VERSION}-0 kubeadm-${K8S_VERSION}-0 kubectl-${K8S_VERSION}-0 --disableexcludes=kubernetes
systemctl enable kubelet
}
# 预拉取镜像
pull_images() {
local images=(
"kube-apiserver:v${K8S_VERSION}"
"kube-controller-manager:v${K8S_VERSION}"
"kube-scheduler:v${K8S_VERSION}"
"kube-proxy:v${K8S_VERSION}"
"etcd:3.5.9-0"
"coredns:v1.10.1"
"pause:3.6"
)
for image in "${images[@]}"; do
docker pull ${IMAGE_REPO}/${image}
docker tag ${IMAGE_REPO}/${image} registry.k8s.io/${image}
done
}
# 初始化Master节点
init_master() {
kubeadm init \
--image-repository ${IMAGE_REPO} \
--kubernetes-version v${K8S_VERSION} \
--pod-network-cidr=${POD_CIDR} \
--service-cidr=${SERVICE_CIDR} \
--cri-socket ${CRI_SOCKET} \
--apiserver-advertise-address=${ADVERTISE_ADDR}
# 配置kubectl
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://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
docker pull calico/node:v3.26.1
docker pull calico/cni:v3.26.1
docker pull calico/kube-controllers:v3.26.1
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
# 输出加入命令
echo "Master节点初始化完成!"
JOIN_CMD=$(kubeadm token create --print-join-command)
echo "工作节点加入命令:"
echo "$JOIN_CMD --cri-socket ${CRI_SOCKET}"
}
# 加入集群
join_cluster() {
if [ -z "$JOIN_CMD" ]; then
echo "请输入Master节点生成的加入命令:"
read JOIN_CMD
fi
echo "正在加入集群..."
$JOIN_CMD --cri-socket ${CRI_SOCKET}
}
# 主执行逻辑
main() {
init_system
install_tools
install_docker
install_cri_docker
install_k8s
pull_images
echo "请选择安装模式:"
echo "1) 初始化Master节点"
echo "2) 加入现有集群"
if [ $# -gt 0 ] ; then
if [ "$1" == master ] ; then
init_master
else
join_cluster
fi
else
read -p "请输入选择(1/2): " choice
case $choice in
1) init_master ;;
2) join_cluster ;;
*) echo "无效选择" && exit 1 ;;
esac
fi
echo "安装完成!"
kubectl get nodes
}
main
生成join-cmd命令
kubeadm token create --ttl 87600h --print-join-command
join
kubeadm join 192.168.230.138:6443 --token g0xz04.4d7flxqulg4xqj3m --discovery-token-ca-cert-hash sha256:a89b89b565ac767641e2cdc7098eada3abcbe26f3a76c4588da23fb869f7cdea --cri-socket unix:///var/run/cri-dockerd.sock
清理node
kubectl delete node node02
docker ps -a | awk '{print $1 }' | xargs docker rm -f
kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock
1. 安装 bash-completion
在 CentOS/RHEL 系统上执行:
sudo yum install -y bash-completion
2. 配置 kubectl 自动补全
# 临时生效(当前会话)
source <(kubectl completion bash)
# 永久生效(写入 bashrc)
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc
作者:严锋 创建时间:2025-05-05 18:02
最后编辑:严锋 更新时间:2025-05-09 15:48
最后编辑:严锋 更新时间:2025-05-09 15:48