k8s自动化安装脚本(kubeadm-1.21.1)

介绍

  1. 重构k8s的部署方式,添加私有仓库的部署及相关离线安装包的方式
  2. 通过kubeadm进行一键式部署k8s集群,根据不同的启动方式,可部署单节点、一主多从、多主多从高可用的k8s集群

软件架构

  1. 通过部署包中的Run.sh进行统一入口,进行初始化环境(部署节点)
  2. ansible+shell实现自动获取host文件中的相关信息进行自动化部署

安装教程

  1. 需要提前准备多台主机,因本次环境,采用一主多从,本环境是为了学习环境中快速部署k8s集群
  2. 采用kubeadn安装,采用本地yum仓库,版本是:1.21.1
  3. 安装docker的yum源是基于Centos7.5/7.6,版本是:19.03.14
  4. 安装ansible时,使用离线安装,版本:2.9.27

更新内容

2023-02-10

  1. 处理内核参数有几率加载失败的情况
  2. 重构初始化环境的脚本,减少初始化时出现的错误
    • 如果失败,重新执行即可
  3. 重写设置主机名的角色,默认删除后覆盖/etc/hosts文件
  4. 新增nfs服务的安装,可以通过storageClassName: nfs-storage字段添加pvc
    • nfs目前只支持单节点部署,不支持自动化对应外部nfs
    • 对接外部nfs需要手动修改对应的yaml即可,后续详细介绍

2022-10-20

  1. 添加kubeadm自动部署高可用版本,新增haproxy+keepalived
  2. 修复dashboard权限问题,添加ingress的部署方式(默认安装,通过)
  3. 部署包已更新至下述链接

2022-08-06

  1. 时间太久,忘记了。。。
准备部署包

https://download.csdn.net/download/qq_44246980/85695007

新版本未成功上传

操作步骤

环境准备

作用IP地址操作系统配置
k8s-master01192.168.1.13CentOS7最低配置2C2G
k8s-master02192.168.1.14CentOS7最低配置2C2G
k8s-master02192.168.1.15CentOS7最低配置2C2G
k8s-node01192.168.1.16CentOS7最低配置2C2G
ansible192.168.1.140CentOS7最低配置1C1G

结构

在这里插入图片描述

  1. node节点可以填写多个,根据实际情况确认,但是不能超出单master节点的限制
  2. master节点至少是三个少一个都不是高可用版本
  3. keepalived需要提前确认好vip
  4. 建议机器处于同一网段中,或者同一局域网内
备注
  1. 建议单独找一台机器用于部署ansible服务,可以不接受
  2. 但是需要确保机器资源充足,且相关的端口不会冲突(38081【yum】、38082【registry】)
  3. 相关的网络关系需要提前确认
  4. 三台master节点,可以是2n+1台,目前因本地环境,只测试了三台master其他节点尚未涉足

解压部署包

#上传部署包(xshell)
cd /opt                      #目录随意
yum -y install lrzsz 
rz install_k8s_kubeadm_20230210.tar.gz
#解压
tar -xvf install_k8s_kubeadm_20230210.tar.gz

修改host文件

#部署机器,初始脚本、安装包镜像
[deploy_server]
192.168.1.21 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 

#多主多从
[kubernetes_master]
192.168.1.22 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-master01"
192.168.1.23 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-master02"
192.168.1.24 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-master03"

#可添加多个
[kubernetes_node]
#192.168.1.22 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-node02"
#192.168.1.23 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-node02"


[nfs]
192.168.1.22 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22

#双节点
[haproxy_keepalived]
192.168.1.22 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-master01"
192.168.1.23 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-master02"


#不填写,则不安装镜像仓库
[docker_repositry]
#192.168.1.136 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-node01"

[nodes:children]
kubernetes_master
kubernetes_node


[all:vars]
#脚本解析主机信息,层级默认只能添加3个,即3个master,3个node
Number="3"
master_vip="192.168.1.120"              #keepalived使用的vip
add_node_hosts="no"                     #添加主机信息(yes=合并,no=删除后新建[覆盖])


#布尔值true or false
Basic_enable="true"                     #安装基础软件包
set_host_enable="true"                  #设置主机名注入/etc/hosts文件
######################################################################################
k8s_nfs_enable="false"                  #安装nfs-client服务
prometheus_enable="false"               #安装Prometheus服务
dashboard_enable="false"                #安装dashboard服务
ingress_enable="false"                  #安装ingress服务

  1. 一主多从需要把kubernetes_master里只添加一个地址
  2. 多主多从需要把kubernetes_master里添加三个地址,脚本只支持添加三个master节点
  3. 多主多从同时需要把haproxy_keepalived角色填写

初始化环境

[root@registry]# cd /opt/deploy_install_k8s
[root@registry]# ls 
host  images  init  playbook  Run.sh  yum
[root@ansible install_k8s_kubeadm]# sh Run.sh 
1) 初始化环境(ansible))
2) 安装k8s集群[一主多从](1.21.1)
3) 安装k8s集群[多主多从](1.21.1)
4) 添加k8s node节点(1.21.1) 
5) 更新k8s certs,续费10年(1.21.1) 
----------------------------------------------------------------------------
请输入对应的数字编号:1
请输入部署机的地址(192.168.1.100):
 【ansible 2022-10-21 02:24:39】 start install docker 
 【ansible 2022-10-21 02:25:22】 docker安装成功 
 {
   "registry-mirrors": ["https://geuj9lut.mirror.aliyuncs.com"]
 }
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
-----------------------------------------------------------------------------------------  
 【nginx.tar】 load repository success  
69715584ec78: Loading layer [==================================================>]  5.885MB/5.885MB
ad10b481abe7: Loading layer [==================================================>]  818.7kB/818.7kB
aa4330046b37: Loading layer [==================================================>]  20.08MB/20.08MB
f640be0d5aad: Loading layer [==================================================>]  4.096kB/4.096kB
aeccf26589a7: Loading layer [==================================================>]  2.048kB/2.048kB
Loaded image: registry.bcbx.com:38082/bcbx_registry:v1.0.0
 【repositry.tar】 load repository success  
-----------------------------------------------------------------------------------------  
 【ansible 2022-10-21 02:25:30】 start the image yum_repo success 
-----------------------------------------------------------------------------------------  
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
 【ansible 2022-10-21 02:25:33】 使用离线安装包,安装ansible,请等待!!! 
 【ansible 2022-10-21 02:25:33】 Check the offline installation package 
 【ansible 2022-10-21 02:25:47】 Ansible is installed successfully 
 【ansible 2022-10-21 02:25:47】  Ansible.cfg配置文件修改成功 
-----------------------------------------------------------------------------------------  
-----------------------------------------------------------------------------------------  
Error response from daemon: Cannot restart container registry: driver failed programming external connectivity on endpoint registry (33ab68e2ce671900016e9cf1f1d37f1d2c11d7d787826127a59f7e6f9763c161):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 38082 -j DNAT --to-destination 172.17.0.3:5000 ! -i docker0: iptables: No chain/target/match by that name.
 (exit status 1))
-----------------------------------------------------------------------------------------  
#部署机的地址,通过脚本过去的地址,确认无误后直接回车即可

出现上述错误,则重新执行一下
直接结果如下
在这里插入图片描述

  1. 安装docker服务
  2. 安装ansible服务,修改配置
  3. 准备离线yum仓库
  4. 准备离线registry仓库,相关挂载点是:/var/images/

验证ansible配置

[root@registry install_k8s_kubeadm]# sh Run.sh ping 
192.168.1.192 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
[root@registry install_k8s_kubeadm]# 

安装k8s集群

[root@registry deploy_install_k8s]# sh Run.sh 
1) 初始化环境(ansible))
2) 安装k8s集群[一主多从](1.21.1)
3) 安装k8s集群[多主多从](1.21.1)
4) 添加k8s node节点(1.21.1) 
5) 更新k8s certs,续费10年(1.21.1) 
----------------------------------------------------------------------------
请输入对应的数字编号:2
#host文件需要提前修改
#确认host中用户名、密码、ip正确且网络连接正常后,回车,等待执行脚本结束

执行结果如下:
在这里插入图片描述

登录master的节点

在这里插入图片描述

添加node节点

  1. 在host文件下的kubernetes_node分组下添加新增的需要新增的节点,并把之前已添加的节点删除
  2. 修改后执行Run.sh脚本,选择4,添加node节点
  3. 脚本正常执行完毕后,检查各个节点的/etc/hosts文件,如果确认对应的域名解析,需要手动添加对应的主机关系

组件安装

请添加图片描述

  1. 默认不安装,手动修改后安装,可以在按照k8s集群后进行安装使用
  2. 也可以在安装集群的是否安装

安装方式

[root@k8s-node01 install_k8s_kubeadm]# sh Run.sh  install
  1. 需要前修改上述图片中的布尔值,改为true时,开始执行安装

访问dashboard

获取登陆token
kubectl  -n kubernetes-dashboard describe secrets `kubectl  -n kubernetes-dashboard get secrets |grep kubernetes-dashboard-token|awk '{print $1}'`

访问prometheus

服务访问

请添加图片描述请添加图片描述

访问prometheus

请添加图片描述

ingress-nginx

请添加图片描述

使用方式,自行百度

证书查看

kubeadm 命令查看

#可以通过 kubeadm alpha certs check-expiration 命令查看相关证书是否过期。
#注:该命令仅在 v.15 之后的版本可用
kubeadm alpha certs check-expiration
# k8s v1.21.1
kubeadm certs  check-expiration

在这里插入图片描述

openssl 命令查看

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '

在这里插入图片描述

更新证书

Kubenetes通过脚本自动更新证书有效期脚本来源

[root@k8s-master install_k8s_kubeadm]# sh Run.sh
1) 初始化环境(ansible))
2) 安装k8s集群[一主多从](1.21.1)
3) 安装k8s集群[多主多从](1.21.1)
4) 添加k8s node节点(1.21.1) 
5) 更新k8s certs,续费10年(1.21.1) 
----------------------------------------------------------------------------
请输入对应的数字编号:5

在这里插入图片描述

验证证书有效期

在这里插入图片描述

部署包地址

链接:https://pan.baidu.com/s/1c20RSSKlZ7CtkqHild2ByQ?pwd=cv0n

总结

  1. 上述则是当前部署中可运行正常的服务
  2. 执行sh Run.sh init,则可以调试脚本,对应的启动文件,修改,则可以进行调试
  3. 执行sh Run.sh install,修改host文件,则可以进行安装组件
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北城 半夏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值