#!/bin/bash
echo "更新系统并安装必要工具..."
yum update -y
yum install -y yum-utils device-mapper-persistent-data lvm2 bash-completion
echo "禁用 SELinux 和防火墙..."
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
systemctl disable --now firewalld
echo "优化系统配置..."
cat <<EOF | tee /etc/sysctl.d/k8s.conf
vm.swappiness = 0
vm.panic_on_oom = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_syncookies = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
net.ipv4.ip_forward = 1
net.ipv6.conf.all.disable_ipv6 = 1
net.netfilter.nf_conntrack_max = 2310720
fs.inotify.max_user_instances = 8192
fs.inotify.max_user_watches = 1048576
fs.file-max = 52706963
fs.nr_open = 52706963
EOF
sysctl -p /etc/sysctl.d/k8s.conf
echo "加载 br_netfilter 模块..."
modprobe br_netfilter
lsmod | grep br_netfilter
echo "安装 ipset 和 ipvsadm..."
yum -y install ipset ipvsadm
echo "配置 ipvsadm 模块加载方式..."
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules
lsmod | grep -e ip_vs -e nf_conntrack
echo "安装 Containerd..."
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y containerd.io
echo "配置 Containerd..."
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
mkdir -p /home/containerd-data
cat >> /etc/containerd/config.toml << EOF
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."swr.cn-north-4.myhuaweicloud.com"]
endpoint = ["https://swr.cn-north-4.myhuaweicloud.com"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io"]
[plugins."io.containerd.grpc.v1.cri"]
systemd_cgroup = true
root = "/home/containerd-data"
state = "/var/run/containerd"
EOF
systemctl enable --now containerd
echo "禁用 swap..."
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
echo "安装 Kubernetes 工具..."
cat <<EOF > /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 kubeadm-1.31.4
curl -LO "https://dl.k8s.io/release/v1.31.4/bin/linux/amd64/kubectl"
ll
du -sh kubectl
chmod +x kubectl
kubectl --version
kubectl -v
kubectl -V
kubectl version
curl -LO "https://dl.k8s.io/release/v1.31.4/bin/linux/amd64/kubelet"
chmod +x kubelet
sudo mv kubelet /usr/bin/
kubelet --version
sudo tee /usr/lib/systemd/system/kubelet.service > /dev/null <<EOF
[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/
After=network.target
[Service]
ExecStart=/usr/bin/kubelet
Restart=always
RestartSec=10
LimitNOFILE=1048576
TasksMax=infinity
LimitNPROC=infinity
LimitCORE=infinity
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl start kubelet
sudo systemctl enable kubelet
sudo mkdir -p /var/lib/kubelet
sudo tee /var/lib/kubelet/config.yaml > /dev/null <<EOF
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous:
enabled: false
authorization:
mode: Webhook
clusterDNS:
- 10.96.0.10
clusterDomain: cluster.local
cgroupDriver: systemd
containerRuntime: remote
containerRuntimeEndpoint: unix:///var/run/containerd/containerd.sock
kubeletCgroups: /kubelet
cpuManagerReconcilePeriod: 5s
EOF
sudo chown root:root /var/lib/kubelet/config.yaml
sudo chmod 644 /var/lib/kubelet/config.yaml
sudo systemctl restart kubelet
sudo systemctl status kubelet
journalctl -u kubelet -f
echo "初始化 Kubernetes 集群..."
kubeadm config images list
kubeadm config images pull --kubernetes-version v1.31.4 --image-repository registry.aliyuncs.com/google_containers --cri-socket unix:///var/run/containerd/containerd.sock
ctr -n k8s.io image tag registry.aliyuncs.com/google_containers/coredns:v1.11.3 registry.k8s.io/coredns:v1.11.3
ctr -n k8s.io image tag registry.aliyuncs.com/google_containers/etcd:3.5.15-0 registry.k8s.io/etcd:3.5.15-0
ctr -n k8s.io image tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.31.4 registry.k8s.io/kube-apiserver:v1.31.4
ctr -n k8s.io image tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.31.4 registry.k8s.io/kube-controller-manager:v1.31.4
ctr -n k8s.io image tag registry.aliyuncs.com/google_containers/kube-proxy:v1.31.4 registry.k8s.io/kube-proxy:v1.31.4
ctr -n k8s.io image tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.31.4 registry.k8s.io/kube-scheduler:v1.31.4
ctr -n k8s.io image tag registry.aliyuncs.com/google_containers/pause:3.10 registry.k8s.io/pause:3.10
ctr -n k8s.io image list
crictl images|grep 1.31.4
ctr -n k8s.io image list|grep 1.31.4
kubeadm init --kubernetes-version v1.31.4 --image-repository registry.aliyuncs.com/google_containers --cri-socket unix:///run/containerd/containerd.sock --v=6
echo "配置 kubectl..."
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
echo "部署 Calico 3.26.1 网络插件..."
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/calico.yaml -O
sed -i 's|docker.io/calico/cni:v3.26.0|swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/cni:v3.26.1|g' calico.yaml
sed -i 's|docker.io/calico/node:v3.26.0|swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/node:v3.26.1|g' calico.yaml
sed -i 's|docker.io/calico/kube-controllers:v3.26.0|swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/kube-controllers:v3.26.1|g' calico.yaml
kubectl apply -f calico.yaml
echo "去除控制平面污点..."
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
echo "验证安装..."
kubectl get nodes
kubectl get pods -n kube-system -o wide
cat >> /root/.bashrc <<EOF
export CRICTL_SOCKET=/var/run/containerd/containerd.sock
source <(crictl completion bash)
source <(kubectl completion bash)
# env.sh
export KUBECONFIG=~/.kube/config # 设置 kubeconfig 的路径
export KUBEVERSION=v1.31.4 # 设置 Kubernetes 版本
#设置k8s集群证书通信
export KUBECONFIG=/etc/kubernetes/admin.conf
EOF
source /root/.bashrc
echo "Kubernetes 单节点集群部署完成!"
