离线一键部署k8s
ubuntu 18.04.5上shell脚本离线一键部署k8s-v1.18.5注意事项(单master存在单点故障,生产环境慎用)三台ubuntu18.04.5系统,主机名不要相同,保证时间相同在内网机器中,需要单独找一台部署机来执行脚本,保证部署机器与要部署三台节点正常通信修改4个文件的IP数组,start.sh、./scripts/deploy-machine-node.sh、./script
·
ubuntu 18.04.5
上shell脚本离线一键部署k8s-v1.18.5
注意事项(单master存在单点故障,生产环境慎用)
- 三台
ubuntu18.04.5
系统,主机名不要相同,保证时间相同 - 在内网机器中,需要单独找一台部署机来执行脚本,保证部署机器与要部署三台节点正常通信
- 修改4个文件的
IP
数组,start.sh
、./scripts/deploy-machine-node.sh
、./scripts/nodex.txt
、./scripts/install-kuboard.sh
- 默认
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 - 选择
kuboard
作为k8s
容器集群web端的管理工具 - 其中三个文件夹需要介绍一下,一个是
deb
文件夹,一个是master-images
文件,一个是node-images
文件夹,deb里存放的是docker-ce
、kubectl
、kubelet
、kubeadm
软件的安装依赖包,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
- 执行完成后会输出一条命令,就是
kubeadm join ...
,需要在另外两个node节点执行该命令,稍等片刻
就可以在master节点上执行kubectl get nodes
kuboard
访问在master节点的IP+32567 端口
,登录的token保存在master机器的/root/token.txt
中
如果该篇文章对您有一点点帮助,请点个赞👍吧!
更多推荐
已为社区贡献8条内容
所有评论(0)