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地址,需要解析的域名如下