下载最新发行版本,解压
wget https://github.com/kubernetes-sigs/kubespray/archive/refs/tags/v2.18.1.tar.gz
tar -zxvf v2.18.1.tar.gz
先阅读下此页面kubespray readme
支持的docker版本
18.09, 19.03 和 20.10.推荐使用20.10.
cri-o版本支持 kube_version=1.20.x, crio_version=1.20
一些前置条件
- 最低要求的版本为Kubernetes v1.21
- Ansible版本需要v2.9.x, Jinja 2.11+ 需要python-netaddr 网络组件
- 目标服务器必须可联网,或者使用离线模式
- 目标服务器必须配置允许ipv4 forwarding
- ansible 清单中的服务器必须已配置ssh key
- 必须关闭防火墙
- 使用root用户执行,如果为非root必须指定ansible_become参数,可以使用sudo提权执行
- master节点内存至少1500MB node节点内存需要1024MB
而我们要做的就是安装python3.6,python36自带pip3
yum install -y python36
然后使用pip3安装ansible jinja 网络组件
pip3 install -r requirement.txt
然后还要在当前机器配置ssh-key对其它机器进行免密登入
ssh-keygen -t ed25519
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@10.210.13.19
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@10.210.13.17
安装完成后拷贝示例程序
cp -rfp inventory/sample inventory/mycluster
使用shell定义数组变量并赋值给对应脚本生成 hosts.yaml清单文件
contrib此目录下还有其它的的清单生成器,比如离线安装的,某些云的安装
declare -a IPS=(10.10.1.3 10.10.1.4 10.10.1.5)
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
我们查看生成的清单,我们稍微对它做个调整将本机改为local,正常情况下需要再来一台机器做为ansible主机
并将node3加入控制面,不然出来的是双主集群
all:
hosts:
node1:
ansible_connection: local
ip: 10.210.13.4
access_ip: 10.210.13.4
node2:
ansible_host: 10.210.13.17
ip: 10.210.13.17
access_ip: 10.210.13.17
node3:
ansible_host: 10.210.13.19
ip: 10.210.13.19
access_ip: 10.210.13.19
children:
kube_control_plane:
hosts:
node1:
node2:
node3:
kube_node:
hosts:
node1:
node2:
node3:
etcd:
hosts:
node1:
node2:
node3:
k8s_cluster:
children:
kube_control_plane:
kube_node:
calico_rr:
hosts: {}
然后接着配置代理,修改all.yml中的
vi inventory/mycluster/group_vars/all/all.yml
http_proxy: "socks5://user:name@xxx:xxx"
https_proxy: "socks5://user:name@xxx:xxx"
修改etcd安装方式,是物理机上还是docker,我们改为docker,默认是host,不知道为什么使用host会报集群不健康
vim inventory/mycluster/group_vars/etcd.yml
etcd_deployment_type: docker
其它更多的配置大家可以自行查看这两个文档,比如,版本选择,网络的选择,子网的配置,证书的配置等等
cat inventory/mycluster/group_vars/all/all.yml
cat inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
至于每个组件的配置可以参看各自role中的main.yml。
接着就可以启动安装脚本了
ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml
在安装过程中遇到的一些坑总结如下:
1、etcd默认使用host模式安装完成后,一直提示集群不健康。最后也没有进行排查,直接还docker模式
2、安装过程中总是出现一种现象,同一个包,两个节点拉取到了但是其中有个节点拉取不到,也不会从其它节点拷贝,最后报错退出,然后执行手工scp拷贝后重启,虽然是幂等的,但是这个很头疼。
最后结果如下,由于我没改清单导致这个是双主集群
[root@istio-master kubespray-2.18.1]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
istio-master Ready control-plane,master 3h35m v1.22.8
istio-node1 Ready control-plane,master 3h34m v1.22.8
istio-node2 Ready <none> 3h33m v1.22.8
后续:
kubespray提供的playbook,更多详情请查看官网。
- cluster.yml 用于集群创建
- upgrade-cluster.yml 用于集群更新
- scale.yml 用于集群扩展
- reset.yml 用于集群重置
- remove-node.yml 用于移除节点