kubeadm离线一键安装K8s集群

前言:

  1. 安装的K8s版本为 1.27.1
  2. 容器运行时使用的containerd,不是使用docker。因为K8s的1.24版本之后已经抛弃了docker,建议熟悉使用containerd,这也是趋势。

环境:
这里使用的操作系统为CentOS7.8

如何使用

  1. 下载安装包
    安装包:k8s_install.tar.gz
    下载链接:http://117.72.10.233/file/k8s_install.tar.gz
    整个离线包大小约为700M
  2. 解压后创建离线源(所有节点都要执行)
tar zxvf k8s_install.tar.gz && cd k8s_install
mv k8s.repo /etc/yum.repos.d/ && mv k8s_repo /opt/
  1. 执行安装脚本
    K8s的master节点上执行 sh k8s_install.sh [内网ip]
    K8s的node节点上执行 sh k8s_install.sh
  2. node节点加入集群
    第二步K8smaster节点执行完成后,会显示如何node节点如何加入集群的提示:类似于 kubeadm join XXXX --token XXXX 这种。复制然后在node节点上执行即可

验证

在master节点上执行kubectl get nodes显示节点状态为Ready,表面集群OK。

下面是k8s_install.sh脚本内容,可参考

k8s_install.sh

#!/bin/bash

function main() {
set -e

cat > /etc/sysctl.d/k8s_better.conf << 'EOF'
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
sysctl -p /etc/sysctl.d/k8s_better.conf
modprobe br_netfilter

cat > /etc/sysconfig/modules/ipvs.modules << 'eog'
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
eog
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules

cat > /etc/modules-load.d/containerd.conf << 'eoh'
overlay
br_netfilter
eoh
modprobe overlay
modprobe br_netfilter
yum install -y containerd.io
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
sed -i '/SystemdCgroup/s/false/true/g' /etc/containerd/config.toml
sed -i 's/sandbox_image.*/sandbox_image \= "registry.aliyuncs.com\/google_containers\/pause:3.6"/g' /etc/containerd/config.toml

systemctl enable containerd
systemctl start containerd

ctr ns create k8s.io
ctr -n k8s.io i import --platform linux/x86_64 k8s_images.tar
yum install -y kubectl-1.27.1-0 kubelet-1.27.1-0 kubeadm-1.27.1-0
echo 'KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"' > /etc/sysconfig/kubelet
systemctl enable kubelet
}

function master() {
intra_ip=$1
kubeadm init --kubernetes-version=v1.27.1 --pod-network-cidr=10.224.0.0/16 --apiserver-advertise-address=$intra_ip --image-repository registry.aliyuncs.com/google_containers

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf

kubectl apply -f calico.yaml
kubectl get node
kubectl get pod -n kube-system
}

opt=$1
if [ -z $opt ];then
  main
elif [ $# -eq 1 ];then
  main
  master $opt
else
  echo -e "\033[1;31m""Parameter is wrong""\033[0m"
  exit 1
fi
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐