shell 一键搭建 k8s 集群

部署环境:三台 CentOS7.9,一台 master、两台 node

docker version:20.10.14

k8s version:1.23.6

 master 节点:

[root@k8s-master ~]# cat deploy_k8s_master.sh
#!/bin/bash
# 1. configure resolve of IP and hostname
echo '192.168.121.50 k8s-master' >>/etc/hosts
echo '192.168.121.51 k8s-node1' >>/etc/hosts
echo '192.168.121.52 k8s-node2' >>/etc/hosts
# 2. close firewall
systemctl disable firewalld.service --now
# 3. close selinux
sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0
# 4. configure chrony
yum -y install chrony
systemctl enable chronyd --now
sed -i -e 's/^server/#&/g' -e '2a server k8s-master iburst' /etc/chrony.conf
echo "allow all" >> /etc/chrony.conf
echo "local stratum 10" >> /etc/chrony.conf
timedatectl set-ntp true
sleep 5
systemctl restart chronyd
# 5. permanent close swap partition
sed -i 's/^[^#].*swap.*/#&/g' /etc/fstab
swapoff -a
# 6. modify kernel parameter
modprobe br_netfilter
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
sysctl -p
# 7. install docker-ce
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7.9/x86_64/stable/
mv /etc/yum.repos.d/mirrors.tuna.tsinghua.edu.cn_docker-ce_linux_centos_7.9_x86_64_stable_.repo /etc/yum.repos.d/docker-ce.repo
echo 'gpgcheck=0' >>/etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce docker-ce-cli containerd.io
systemctl enable docker --now
# 8. configure docker image accelerator
tee /etc/docker/daemon.json <<-'EOF'
{
"insecure-registries" : ["0.0.0.0/0"],
"registry-mirrors": ["https://7o6gyryt.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload
systemctl restart docker
# 9. configure k8s source and install k8s
cat >/etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.tuna.tsinghua.edu.cn/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet --now
# 10. k8s-master initialization
version=$(kubelet --version |cut -d'v' -f2)
docker --version
kubelet --version
kubeadm init --kubernetes-version=${version} --apiserver-advertise-address=192.168.121.50 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16

--------------------------------------------------------------------------------------------------------------------------------------

node节点:

[root@k8s-node1 ~]# cat deploy_k8s_node.sh
#!/bin/bash
# 1. configure resolve of IP and hostname
echo '192.168.121.50 k8s-master' >>/etc/hosts
echo '192.168.121.51 k8s-node1' >>/etc/hosts
echo '192.168.121.52 k8s-node2' >>/etc/hosts
# 2. close firewall
systemctl disable firewalld.service --now
# 3. close selinux
sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0
# 4. configure chrony
yum -y install chrony
systemctl enable chronyd --now
sed -i -e 's/^server/#&/g' -e '2a server k8s-master iburst' /etc/chrony.conf
timedatectl set-ntp true
sleep 5
systemctl restart chronyd
chronyc sources
# 5. permanent close swap partition
sed -i 's/^[^#].*swap.*/#&/g' /etc/fstab
swapoff -a
# 6. modify kernel parameter
modprobe br_netfilter
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
sysctl -p
# 7. install docker-ce
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7.9/x86_64/stable/
mv /etc/yum.repos.d/mirrors.tuna.tsinghua.edu.cn_docker-ce_linux_centos_7.9_x86_64_stable_.repo /etc/yum.repos.d/docker-ce.repo
echo 'gpgcheck=0' >>/etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce docker-ce-cli containerd.io
systemctl enable docker --now
# 8. configure docker image accelerator
tee /etc/docker/daemon.json <<-'EOF'
{
"insecure-registries" : ["0.0.0.0/0"],
"registry-mirrors": ["https://7o6gyryt.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload
systemctl restart docker
# 9. configure k8s source and install k8s
cat >/etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.tuna.tsinghua.edu.cn/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet --now
# 10. check version
docker --version
kubelet --version

master节点脚本执行成功后,如下图所示

然后将绿色框选中的部分在 master 节点执行,蓝色框选中的部分在 node 节点执行

node 节点加入 master 节点成功后如图所示

 然后在 master 节点上查看,此时状态都是 NotReady( master 节点是因为缺少网络插件,node 节点是缺少网络插件对应的镜像和容器 )

 然后通过 GitHub 下载 flannel 插件( 下载地址:https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 或

https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml )

并安装这个插件( Warning 后面的表示从 1.25 以后的版本这个 flannel 插件将不能再被使用)

 安装完插件之后,node 节点就有了 flannel 插件相关的镜像和容器,并且 k8s 集群的状态都变成了 Ready

posted @ 2022-04-29 14:53  demoduan  阅读(338)  评论(0编辑  收藏  举报