k8s自动化安装脚本(kubeadm)

文章目录

    • 介绍
      • 安装教程
        • 更新内容
        • 准备部署包
    • 操作步骤
      • 环境准备
        • 结构
        • 备注
        • 解压部署包
        • 修改host文件
        • 初始化环境
        • 验证ansible配置
        • 安装k8s集群
        • 登录master的节点
      • 添加node节点
      • 证书查看
        • kubeadm 命令查看
        • openssl 命令查看
        • 更新证书
        • 验证证书有效期
      • 部署包地址
    • 总结

介绍

通过ansible脚本自动化部署k8s基础集群

安装教程

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

更新内容

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

准备部署包

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

  1. 链接是之前的版本,无法更新,请勿下载
  2. 文章末尾准备了对应的部署包链接

操作步骤

环境准备

作用 IP地址 操作系统 配置
k8s-master01 192.168.1.21 CentOS7 最低配置2C2G
k8s-master02 192.168.1.22 CentOS7 最低配置2C2G
k8s-master02 192.168.1.23 CentOS7 最低配置2C2G
k8s-node01 192.168.1.24 CentOS7 最低配置2C2G
ansible 192.168.1.11 CentOS7 最低配置1C1G

结构

k8s自动化安装脚本(kubeadm)_第1张图片

  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_20221021.tar.gz
#解压
tar -xvf install_k8s_kubeadm_20221021.tar.gz

修改host文件

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

[kubernetes_master]
192.168.1.21 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-master01"
192.168.1.22 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-master02"
192.168.1.23 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-master03"


[kubernetes_node]
#192.168.1.21 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-node01"
#192.168.1.22 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-node02"


#双节点
[haproxy_keepalived]
192.168.1.21 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-master01"
192.168.1.22 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"

#布尔值true or false
Basic_enable="true"                  #安装基础软件包
prometheus_enable="true"             #安装Prometheus服务
dashboard_enable="true"              #安装dashboard服务
ingress_enable="false"               #安装ingress服务

初始化环境

[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.
-----------------------------------------------------------------------------------------  
2edcec3590a4: Loading layer [==================================================>]  83.86MB/83.86MB
1a81690c9021: Loading layer [==================================================>]  109.6MB/109.6MB
9ee0b2399822: Loading layer [==================================================>]  3.072kB/3.072kB
eb197da1306a: Loading layer [==================================================>]  4.096kB/4.096kB
dbcac2c2be14: Loading layer [==================================================>]  3.584kB/3.584kB
c3c42edd6aa8: Loading layer [==================================================>]  7.168kB/7.168kB
Loaded image: registry.bcbx.com:38082/bcbx_nginx:v1.0.0
 【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))
-----------------------------------------------------------------------------------------  
#部署机的地址,通过脚本过去的地址,确认无误后直接回车即可

出现上述错误,则重新执行一下
直接结果如下
k8s自动化安装脚本(kubeadm)_第2张图片

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

验证ansible配置

[root@k8s-master 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@k8s-master install_k8s_kubeadm]# 

安装k8s集群

[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) 
----------------------------------------------------------------------------
请输入对应的数字编号:2
#host文件需要提前修改
#确认host中用户名、密码、ip正确且网络连接正常后,回车,等待执行脚本结束

执行结果如下:
k8s自动化安装脚本(kubeadm)_第3张图片

登录master的节点

k8s自动化安装脚本(kubeadm)_第4张图片
浏览器访问Prometheus
http://IP:30090
k8s自动化安装脚本(kubeadm)_第5张图片

添加node节点

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

证书查看

kubeadm 命令查看

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

k8s自动化安装脚本(kubeadm)_第6张图片

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

k8s自动化安装脚本(kubeadm)_第7张图片

验证证书有效期

k8s自动化安装脚本(kubeadm)_第8张图片

部署包地址

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

总结

  1. 上述则是当前部署中可运行正常的服务
  2. 执行Run.sh 输入init,则可以调试脚本,对应的启动文件,修改,则可以进行调试(playbook/tools/test.yaml)

你可能感兴趣的:(k8s,自动化,自动化,kubernetes)