ubuntu 18.04.5上shell脚本离线一键部署k8s-v1.18.5

注意事项(单master存在单点故障,生产环境慎用)

  1. 三台ubuntu18.04.5系统,主机名不要相同,保证时间相同
  2. 在内网机器中,需要单独找一台部署机来执行脚本,保证部署机器与要部署三台节点正常通信
  3. 修改4个文件的IP数组,start.sh./scripts/deploy-machine-node.sh./scripts/nodex.txt./scripts/install-kuboard.sh
  4. 默认IP数组中的第一个IP为master节点, 例如:ipgroup=(192.168.10.128 192.168.10.129 192.168.10.130), 那么192.168.10.128 就是master IP, 192.168.10.129和192.168.10.130就是node IP
  5. 选择kuboard作为k8s容器集群web端的管理工具
  6. 其中三个文件夹需要介绍一下,一个是deb文件夹,一个是master-images文件,一个是node-images文件夹,deb里存放的是docker-cekubectlkubeletkubeadm软件的安装依赖包,master-images存放的是master节点的需要镜像,node-images存放的是node节点需要的镜像

项目架构图:

在这里插入图片描述

项目的目录结构如下:

在这里插入图片描述

目录树结构:

shupe@LAPTOP-QSG1JBV6 MINGW64 /d/gitworkdir
$ tree deploy-k8s/
deploy-k8s/
|-- 1.png
|-- README.md
|-- deb
|   |-- conntrack_1%3a1.4.4+snapshot20161117-6ubuntu2_amd64.deb
|   |-- containerd.io_1.3.7-1_amd64.deb
|   |-- cri-tools_1.13.0-01_amd64.deb
|   |-- docker-ce-cli_19.03.12~3-0~ubuntu-bionic_amd64.deb
|   |-- docker-ce_19.03.12~3-0~ubuntu-bionic_amd64.deb
|   |-- kubeadm_1.18.5-00_amd64.deb
|   |-- kubectl_1.18.5-00_amd64.deb
|   |-- kubelet_1.18.5-00_amd64.deb
|   |-- kubernetes-cni_0.8.7-00_amd64.deb
|   |-- libltdl7_2.4.6-14_amd64.deb
|   `-- socat_1.7.3.2-2ubuntu2_amd64.deb
|-- master-images
|   |-- coredns-1.6.7.docker
|   |-- eipwork-kuboard-v3.docker
|   |-- etcd-3.4.3-0.docker
|   |-- flannel-v0.13.0.docker
|   |-- kube-apiserver-v1.18.5.docker
|   |-- kube-controll-manager-v1.18.5.docker
|   |-- kube-proxy-v1.18.5.docker
|   |-- kube-scheduler-v1.18.5.docker
|   |-- kuboard-agent-v3.0.0.docker
|   |-- kuboard-agent-v3.docker
|   |-- kuboard-v2.0.5.4.docker
|   |-- metrics-server-v0.3.7.docker
|   `-- pause-3.2.docker
|-- node-images
|   |-- flannel-v0.13.0.docker
|   |-- kube-proxy-v1.18.5.docker
|   |-- kuboard-agent-v3.0.0.docker
|   |-- kuboard-agent-v3.docker
|   |-- metrics-server-v0.3.7.docker
|   `-- pause-3.2.docker
|-- scripts
|   |-- deploy-machine-node.sh
|   |-- init.sh
|   |-- install-docker.sh
|   |-- install-kubeadm.sh
|   |-- install-kuboard.sh
|   |-- k8snode1modifyhostname.sh
|   |-- k8snode2modifyhostname.sh
|   |-- k8snode3modifyhostname.sh
|   |-- load-images.sh
|   |-- loginkuboardtoken.sh
|   |-- node.txt
|   `-- prepare-environment.sh
|-- start.sh
`-- yaml
    |-- kube-flannel.yaml
    |-- kuboard-v2.yaml
    `-- metrics-server.yaml

5 directories, 50 files

我们先来看一下start.sh 脚本的内容:

#!/bin/bash
#date:15-01-2021

nodegroup=(k8snode1 k8snode2 k8snode3)
ipgroup=(192.168.10.128 192.168.10.129 192.168.10.130)

## 往k8s节点服务器导入镜像
funcDeployImages(){
for(( i=0;i<${#ipgroup[@]};i++))
do
	if [ $i == 0 ];then
		# master 节点
		scp ./master-images/*.docker root@${ipgroup[$i]}:/root
		ssh root@${ipgroup[$i]} -t -t "bash /root/load-images.sh"
	else
		# node 节点
		scp ./node-images/*.docker root@${ipgroup[$i]}:/root
		ssh root@${ipgroup[$i]} -t -t "bash /root/load-images.sh"
	fi
done
}

## 设置部署机到k8s节点机器的免密登录
funcNoPasswordLogin(){
echo -e "\033[31下面请按回车键:\033[0m"
ssh-keygen -t rsa
echo  -e "\033[31m下面需要输入 yes 和对应主机的密码 \033[0m"
for(( i=0;i<${#ipgroup[@]};i++))
do
	ssh-copy-id ${ipgroup[$i]}
done
}


# 为k8snode1、k8snode2、k8snode3修改主机名、主机名和IP映射、安装Docker
funcThreeNodeInit(){
for((i=0;i<${#ipgroup[@]};i++))
do
	scp ./deb/*.deb ./scripts/* ./yaml/* root@${ipgroup[$i]}:/root
	ssh root@${ipgroup[$i]} -t -t "bash /root/prepare-environment.sh"
	ssh root@${ipgroup[$i]} -t -t "bash /root/install-docker.sh"
	echo "line 43 $i: $i"
	if [[ $i == 0 ]]; then
		ssh root@${ipgroup[$i]} -t -t "bash /root/k8snode1modifyhostname.sh"
	elif [[ $i == 1 ]]; then
		ssh root@${ipgroup[$i]} -t -t "bash /root/k8snode2modifyhostname.sh"
	else
		ssh root@${ipgroup[$i]} -t -t "bash /root/k8snode3modifyhostname.sh"
	fi
done
}

# 三节点通过deb包离线安装kubectl、kubelet、kubeadm
funcInstallDeb(){
for((i=0;i<${#ipgroup[$i]};i++))
do
	ssh root@${ipgroup[$i]} -t -t "bash /root/install-kubeadm.sh"
done
}

# 初始化k8snode1作为master节点
funcInitMaster(){
    ssh root@${ipgroup[0]} -t -t "bash /root/init.sh"
    # 启动kuboard
    ssh root@${ipgroup[0]} -t -t "bash /root/install-kuboard.sh"
}

funcLoginKuboardToken(){
    ssh root@${ipgroup[0]} -t -t "bash /root/loginkuboardtoken.sh"
}

# main function
main(){
    # 部署机器到k8s节点做免密
    funcNoPasswordLogin
    # 初始化三节点的系统配置
    funcThreeNodeInit
    # 往k8s节点导入镜像
    funcDeployImages
    # 安装kubectl、kubelet、kubeadm
    funcInstallDeb
    # kubeadm初始化master节点
    funcInitMaster
    sleep 30
    # 打印登录kuboard的token
    funcLoginKuboardToken
    
}

main

执行前,需要把这个项目脚本的文件全部下载完整!!!
资源链接在这里:https://download.csdn.net/download/weixin_48505120/14919345

执行脚本

bash -xv  start.sh
  1. 执行完成后会输出一条命令,就是kubeadm join ...,需要在另外两个node节点执行该命令,稍等片刻
    就可以在master节点上执行 kubectl get nodes
  2. kuboard访问在master节点的IP+32567 端口,登录的token保存在master机器的/root/token.txt

如果该篇文章对您有一点点帮助,请点个赞👍吧!

Logo

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

更多推荐