文章 86
评论 0
浏览 124461
k8s的playbook部署脚本

k8s的playbook部署脚本

ansible-k8s脚本使用说明

适用系统centos7 x86架构

本脚本采用anisble-playbook进行编写,全程实现离线二进制安装k8s集群,可以进行简单自定义配置,集群规模可自行进行设置,本脚本只适合k8s学习人员快速搭建二进制集群,内部添加了一些k8s集群的常用插件,nfs存储类插件,velero备份插件,dashboard插件,loki日志收集插件,calico网络插件,ingress-nginx插件,kube-prometheus监控项目集成,如果有其他感觉好用的插件作者可以根据情况帮助集成,添加到脚本当中。

不合适在生产环境使用!!!!不合适在生产环境使用!!!!不合适在生产环境使用!!!!

如有疑问联系方式微信:18586178046

使用说明如下

1.下载离线包

链接:https://pan.baidu.com/s/1k45Mj7MgsjJubUKOszoM5A
提取码:mjt5
分享失效请联系作者

[21:56:30 root@centos7 ~]#ll
total 3404968
-rw-r--r-- 1 root root  541179502 May  3 21:56 ansible-k8s.tar.gz
-rw-r--r-- 1 root root 2945504446 May  3 21:56 nexus-lixian.tar.gz

下载后会得到2个压缩包,请上传到服务器

  • ansible-k8s.tar.gz:k8s的playbook脚本包
  • nexus-lixian.tar.gz:离线镜像仓库以及yum仓库安装包

2.部署离线镜像仓库以及yum仓库

这里使用nexus服务实现镜像仓库以及yum仓库,默认镜像仓库与yum仓库为匿名可访问

nexus的部署后访问账户密码为:admin 123456

部署过程如下

#解压
tar xf nexus-lixian.tar.gz
#进入目录执行安装脚本install_nexus.sh
#安装位置可自定义,设置变量为root_dir‘
./install_nexus.sh
#执行即可安装完成
[22:04:18 root@centos7 ~]#netstat -ntlp | grep java
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      1848/java           
tcp        0      0 127.0.0.1:27065         0.0.0.0:*               LISTEN      1848/java           
tcp        0      0 0.0.0.0:5000            0.0.0.0:*               LISTEN      1848/java

说明:

  • 镜像仓库端口为5000,协议为http,仓库中以放置所需部署集群的所有镜像
  • yum仓库端口8081,仓库中以放置部署时所需的rpm包

3.部署k8s

解压脚本包

tar xf ansible-k8s.tar.gz
#进入包目录
cd ansible-k8s/
ls
bin  config  k8s-start  playbooks  roles  tools

部署ansible,以及提供离线安装脚本

cd tools/     #必须进入此目录,否则会报错
./install_ansible.sh  
#执行后会部署ansible完成

修改集群部署配置

其余目录无需修改,用户只需要修改config文件夹下的config.yml与hosts文件即可全部有中文注释

ls
bin  config  k8s-start  playbooks  roles  tools
cd config/
ls
ansible.cfg  config.yml  hosts
#必须修改的配置
[22:10:29 root@centos7 config]#cat hosts
# etcd集群 (1,3,5,...)
[etcd]
192.168.10.11 ansible_connection=ssh ansible_user=root ansible_password=123456 
# k8s集群master节点
[kube_master]
192.168.10.11 ansible_connection=ssh ansible_user=root ansible_password=123456  
# k8s集群work节点
[kube_node]
192.168.10.12 ansible_connection=ssh ansible_user=root ansible_password=123456 
192.168.10.13 ansible_connection=ssh ansible_user=root ansible_password=123456
#变量配置
[all:vars]
#时间服务器
NTP_IP="192.168.10.254"
#YUM仓库地址,填写离线nexus的IP地址端口默认8081
yum_repo="192.168.10.71:8081"
#镜像服务器地址,填写离线nexus的IP地址端口默认5000
registries="192.168.10.71:5000"
# 二进制文件存放目录,k8s与etcd
bin_dir="/root/ansible-k8s/bin"
  • yum_repo,registries:端口无需变化,只需要把地址替换成部署nexus服务的服务器IP地址即可
  • bin_dir:这个指定你解压ansible-k8s的文件绝对路径
  • ansible_user:远程连接用户
  • ansible_password:远程连接用户密码
  • [etcd]:测试环境只需要部署一个即可如果部署多个最后好部署3个,会自己组成集群
  • [kube-master]:根据自己集群情况
  • [kube-master]:根据自己集群情况

注意:之前前需要进行额外配置,如果远程连接用户不是root需要配置sudo免密,并且在ssh配置文件中配置

#配置sudo免密,如果连接的用户是root无需配置
[19:38:02 root@node-1 ~]#cat /etc/sudoers
ansible ALL=(ALL)   NOPASSWD:ALL  #授权那个用户拥有sudo的免密,设置为自己的连接用户
#配置ssh客户端,必须配置
[22:19:17 root@centos7 config]#cat /etc/ssh/ssh_config
StrictHostKeyChecking no

以上全部配置完成就可以开始安装了

测试主机连通性

[22:20:52 root@centos7 ansible-k8s]#pwd
/root/ansible-k8s
[22:20:56 root@centos7 ansible-k8s]#./k8s-start ping
#测试如果没有报错即可进行以下安装步骤

升级主机内核

[22:21:44 root@centos7 ansible-k8s]#./k8s-start kernel
#升级完成后会进行主机重启,会出现报错,等待主机重启后执行下面的操作即可

系统初始化

会部署本地kube-apiserver代理,容器运行时如果不修改默认是containerd,可以改为docker,需要在配置文件config.yml设置

[22:27:09 root@centos7 ansible-k8s]#./k8s-start init
#执行时有些步骤会报错,无需在意,只要不是异常中断即可进行下面步骤

生成集群所需的所有证书

[22:25:53 root@centos7 ansible-k8s]#./k8s-start cert
#执行完成后所有证书会归档到ansible主机的/opt/k8s/cert目录下面

部署etcd服务

[22:26:26 root@centos7 ansible-k8s]#./k8s-start etcd
#部署完成后进行测试,登录etcd主机执行命令,部署几个etcd下面会看到几个etcd,正常请进行下面步骤
[22:27:33 root@node-1 ~]#etcdctl mem list
7fca27f10e52f6f0, started, etcd-192.168.10.11, https://192.168.10.11:2380, https://192.168.10.11:2379

部署kube-master

[22:31:49 root@centos7 ansible-k8s]#./k8s-start kube-master
#执行完成后测试,下面这种情况表示正常,可以进行下面步骤
[22:33:27 root@centos7 ansible-k8s]#kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok                  
controller-manager   Healthy   ok                  
etcd-0               Healthy   {"health":"true"}

部署kube-node

[22:33:53 root@centos7 ansible-k8s]#./k8s-start kube-node
#部署过程如果没有报错,稍等几分钟进行测试验证,你部署几个node在下面会看到几个,如果正常进行下面呢步骤
[22:35:16 root@centos7 ansible-k8s]#kubectl get node
NAME            STATUS     ROLES    AGE   VERSION
192.168.10.11   NotReady   <none>   1s    v1.18.20
192.168.10.12   NotReady   <none>   1s    v1.18.20
192.168.10.13   NotReady   <none>   2s    v1.18.20

报错解决方法

#执行这条命令,之后在运行部署脚本
[22:35:16 root@centos7 ansible-k8s]#rm -rf /opt/k8s/cert/k8s/bootstrap*
#在此运行部署脚本,如果在此报错,请重复此步骤,如果连续报错3次以上请买彩票
[22:33:53 root@centos7 ansible-k8s]#./k8s-start kube-node

部署calico网络插件

calico可以进行自定义配置,部署完成网络插件集群即可正常使用,下面的插件可根据需求部署

[22:35:16 root@centos7 ansible-k8s]#./k8s-start network
#运行完成后,验证,所有Pod状态应该为1/1 running
[22:41:42 root@centos7 ansible-k8s]#kubectl get pod -n kube-system
NAME                                      READY   STATUS    RESTARTS   AGE
calico-kube-controllers-56cff6dc8-wwqqb   1/1     Running   1          45s
calico-node-74jdr                         1/1     Running   0          45s
calico-node-s6gtt                         1/1     Running   0          45s
calico-node-t4grg                         1/1     Running   0          45s
calico-typha-6d6878bdcb-lvnkt             1/1     Running   0          45s
coredns-65dbd957cf-bckjw                  1/1     Running   0          45s
metrics-server-7dbc9dfcb5-rsbmm           1/1     Running   0          45s
#查看资源使用情况
[22:43:01 root@centos7 ansible-k8s]#kubectl top node
NAME            CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
192.168.10.11   549m         27%    1633Mi          20%       
192.168.10.12   41m          2%     804Mi           10%       
192.168.10.13   35m          1%     765Mi           9%

部署dashboard插件

[22:42:19 root@centos7 ansible-k8s]#./k8s-start plug dashboard
#验证,全是running表示正常
[22:43:26 root@centos7 ~]#kubectl get pod -n kubernetes-dashboard 
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-58b94fffdf-qpwzc   1/1     Running   0          38s
kubernetes-dashboard-674ffb6dfd-hzfcf        1/1     Running   0          38s

不修改配置文件的情况下使用https://node节点IP:30001即可访问web控制台,token在ansible的/opt/k8s/yaml/dashboard/token获取,使用这个token登录即可

部署nfs的CSI插件

部署前必须配置config.yml配置文件,需提前部署nfs之后进行配置

[22:45:30 root@centos7 ansible-k8s]#./k8s-start plug nfs
#部署完成后验证
[22:47:25 root@centos7 ansible-k8s]#kubectl get pod -n kube-system | grep nfs
nfs-client-provisioner-86d7758cd8-ljs5h   1/1     Running   0          13s

配置

NFS_SERVER: "192.168.10.254" #NFS服务器地址
NFS_PATH: "/data1/nfs/test/" #NFS共享目录
NFS_HA: "false"                #是否启用高可用true/false
NFS_defult: "true"            #是否设置为默认存储类true/false

部署ingress控制器

我这里使用的nginx-ingress,必须先修改配置文件后执行

[22:51:41 root@centos7 ansible-k8s]#./k8s-start plug ingress
#验证
[22:51:06 root@centos7 ansible-k8s]#kubectl get pod -n ingress-nginx 
NAME                             READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-ltb4n   1/1     Running   0          24s
#验证
[22:53:05 root@centos7 ansible-k8s]#kubectl get ingress -n  kubernetes-dashboard 
NAME                   CLASS    HOSTS   ADDRESS         PORTS   AGE
kubernetes-dashboard   <none>   *       172.10.141.23   80      10m

修改配置

#k8s的ingress-nginx插件
ingress_host:  #部署到那几个node节点可以写多个,节点IP
- 192.168.10.13

部署完成后提供了一个dashboard的示例,使用部署ingress的节点IP地址即可直接访问web控制台https://192.168.10.13/dashboard/即可访问

部署velero备份插件

需要提前部署minio,并且修改配置文件才可以部署

[22:54:38 root@centos7 ansible-k8s]#./k8s-start plug velero
#验证
[22:55:57 root@centos7 ansible-k8s]#kubectl get pod -n velero 
NAME                      READY   STATUS    RESTARTS   AGE
restic-45vgw              1/1     Running   0          11s
restic-7v9sg              1/1     Running   0          11s
restic-dr6t8              1/1     Running   0          11s
velero-56f6fd4c5d-nnw9f   1/1     Running   0          13s
#测试
[22:56:14 root@centos7 ~]#velero create backup test-1 --include-namespaces=kube-system
[22:56:29 root@centos7 ~]#velero backup describe test-1
Phase:  Completed   #状态为这个表示插件可以正常使用

部署loki日志收集插件

不修改配置即可部署,默认不启用数据持久化

[22:57:49 root@centos7 ansible-k8s]#./k8s-start plug loki
#验证
[23:00:09 root@centos7 ansible-k8s]#kubectl get pod -n loki 
NAME                            READY   STATUS    RESTARTS   AGE
journalbeat-dynamic-bjv48       1/1     Running   0          99s
journalbeat-dynamic-p842t       1/1     Running   0          99s
journalbeat-dynamic-xptvz       1/1     Running   0          99s
kube-eventer-88b585467-th7dn    1/1     Running   0          98s
loki-0                          1/1     Running   0          100s
loki-grafana-5f95bbbd77-s5k2w   1/1     Running   0          100s
loki-promtail-c72ff             1/1     Running   0          100s
loki-promtail-hbddf             1/1     Running   0          100s
loki-promtail-s9tjh             1/1     Running   0          100s

会自动在ansible主机生成说明文档/opt/k8s/helm/loki-stack/admin,如果登录以及如果配置文件都有说明

部署kube-prometheus监控

不修改配置即可部署,默认不启用数据持久化

[23:02:12 root@centos7 ansible-k8s]#./k8s-start plug prometheus
#验证
[23:03:03 root@centos7 ansible-k8s]#kubectl get pod -n monitoring 
NAME                                   READY   STATUS    RESTARTS   AGE
alertmanager-main-0                    1/2     Running   0          9s
blackox-exporter-54d5fbdcd5-z8qwp      1/1     Running   0          12s
grafana-77fc44cfd9-f92jg               1/1     Running   0          13s
kube-state-metrics-db5dd9575-62nwf     3/3     Running   0          12s
node-exporter-5dcpd                    2/2     Running   0          12s
node-exporter-75wts                    2/2     Running   0          12s
node-exporter-gr5kw                    2/2     Running   0          12s
prometheus-adapter-57c796d465-8n27b    1/1     Running   0          14s
prometheus-operator-6f4b87868b-pnrxl   2/2     Running   0          15s

部署完成后会采集集群所有服务的监控指标

登录需要配置hosts的解析,需要全部解析到ingress部署的主机IP地址,需要解析的域名如下


标题:k8s的playbook部署脚本
作者:Carey
地址:HTTPS://zhangzhuo.ltd/articles/2022/05/03/1651591413533.html

生而为人

取消