# k8s集群自动化搭建项目

## 介绍

本项目在多个centos7.5节点上搭建k8s集群
制作了自动搭建集群的脚本,只需要集中修改一个配置文件,即可通过运行脚本完成搭建工作
集群中安装了coredns服务DNF、dashboard面板展示、EFK日志聚合管理基础服务。

- single_master文件夹
  使用kubeadm 搭建单master节点的k8s集群
- minikube 文件夹
  使用minikube搭建本地集群
- ha 文件夹
  搭建高可用高安全性的k8s集群,搭建过程比较复杂,
  搭建的集群内部使用tls加密通信,安全性高
  通过nginx实现了多个master节点的高可用,允许master节点宕机不影响集群服务能力。

## 使用minukube搭建单机开发用集群

主要参考了以下内容:
Minikube - Kubernetes本地实验环境
https://yq.aliyun.com/articles/221687 该文提供了自己编译的minikube二进制文件,替换了镜像地址,解决了镜像被墙的问题。
我是在archlinux上安装的
- 先安装virtualbox pacman -S virtualbox
- 选择带arch内核模块
- 加载内核模块 modprobe vboxdrv
- 修改配置文件使之在启动时自动加载

启动命令:

minikube start --cpus 4 --memory 4096 --disk-size "100G" --registry-mirror=https://n8m3bosn.mirror.aliyuncs.com

## 搭建单master节点的集群

1.首先设置节点的hostname和固定IP地址
hostnamectl set-hostname xxxxxx

2.修改configrc中的节点配置信息

3.选一个节点作为master节点,并登录执行脚本

4.使用1upgrade_the_kernel_allnode.sh脚本升级内核,在每个节点上都进行升级

5.使用2setup_ssh.sh设置hosts文件,设置master节点可以免密登陆其他节点

6.使用3setup_base_env_allnode.sh安装必要的软件包和进行系统设置,每个节点都要进行设置

7.使用4kubeadm_init_master.sh利用kubeadm工具进行初始化,kubeadm会将本节点设置为master节点,
  并使用ssh自动将其他节点加入到集群

8.重置的命令在kubeadm_reset.sh里面

## 多master节点高可用加密集群搭建
如果是虚拟机部署:
创建nat网络,端口转发222到22,启动sshd
scp -r -P 222 ha root@localhost:/root

1首先设置节点的hostname和固定IP地址
hostnamectl set-hostname xxxxxx

2修改configrc中的节点配置信息

3选一个节点将脚本传到/opt/k8s/work中,将附加的二进制文件也都传到该目录

按顺序执行以下脚本,脚本将自动分发文件到其他节点,自动完成集群构建

1.upgrade_the_kernel_allnode.sh              升级内核,每个节点都要执行
2.setup_base_env_allnode.sh                  安装基本软件包,配置基本系统参数
3.setup_ssh.sh                               设置hosts文件和节点ssh免密码登录
4.setup_ca_certs.sh                          生成ca加密和签名文件
5.setup_kubectl.sh                           安装kubectl,配置kubectl使用的config文件
6.setup_etcd.sh                              搭建etcd集群,etcd持久化集群的所有参数
7.setup_flannel.sh                           搭建容器网络并验证网络互通
8.setup_nginx.sh                             编译nginx,为apiserver制作反向代理
9.setup_master_api-server.sh                 部署apiserver集群并验证
10.setup_master_controller-manager.sh        部署contollermanager集群 
11.setup_master_scheduler.sh                 部署scheduler集群
12.setup_worker_docker.sh                    部署docker
13.setup_worker_kubelet.sh                   部署kubelet服务,完成后需要手动操作approve证书
14.setup_worker_kube-proxy.sh                部署kube-proxy服务
15.check_cluster.sh                          检验集群搭建结果
16.setup_coredns.sh                          安装coredns插件
configrc                                     基本配置文件
 ## nginx ingress反向代理设置
setup_nginx_ingress_controller.sh 脚本建立了新的命名空间,设置了ingress-controller
 ingress编写的例子参考example,其中暴露了dashboard服务,dashboard服务需要使用https,
 nginx配置了https,并配置了通过https访问dashboard ## app文件夹中配置安装一些应用
 dashboard、EFK、metrics-server
 后面将会陆续安装一些其他基础服务