当前位置: 首页 > 工具软件 > kubespray > 使用案例 >

kubespray部署高可用K8s集群

罗伟志
2023-12-01

目录

kubespray是什么

安装注意事项及缺点

安装要求

实验环境

安装

配置SSH免密登录

依赖安装-参考

安装

安装失败回滚操作

配置文件说明

拓展

总结


kubespray是什么

Kubespray底层采用的是kubeadm,采用了ansilbe的模式,可以一键实现k8s的集群模式部署,同时还能集成各种网络插件、dasborad、elk等,配置的灵活性很高,可以针对不同的集群需求,无论测试集群、生产集群还是虚拟机、云主机,都能提供非常丰富的配置

安装注意事项及缺点

  • 对网络环境要求高,需要科学上网环境,否则安装容易失败
  • 只要在一台主机上执行安装命令即可实现集群安装
  • 安装前可修改配置文件,实现docker目录、pod子网规划及网络组件选择
     

安装要求

  • 所有主机均能通过免密钥登录
  • Ansible v2.7.8及以上
  • python-netaddr
  • Jinja 2.9及以上
  • 关闭firewalld
  • 最新版本的kubespray需python3.5及以上版本
  • 生产环境中在/etc/docker/中添加对应harbor的私有证书

实验环境

主机备注
172.16.11.161kubespray安装,node1
172.16.11.162node2
172.16.11.163node3

安装

以下配置均只在172.16.11.161节点执行即可

配置SSH免密登录

# 确保本机也可以 ssh 连接,否则下面部署失败
ssh-keygen -t rsa -N ""
ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.11.161
ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.11.162
ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.11.163

依赖安装-参考

# 安装 epel
yum -y install  epel-release && yum clean all && yum makecache
# 安装 git epel python-netaddr
# ansible在requirement.txt里另外安装
yum install -y python-netaddr git


# 安装python3.6 pip3
#安装IUS软件源
#新的IUS软件源:https://repo.ius.io/ius-release-el7.rpm
yum install -y https://centos7.iuscommunity.org/ius-release.rpm 
yum install -y python36u python36u-devel python36u-pip

#创建python3 pip3链接符
ln -s /usr/bin/python3.6 /usr/bin/python3 && ln -s /usr/bin/pip3.6 /usr/bin/pip3

#扩展
##升级pip版本
pip3 install --upgrade pip3.6


安装

###下载kubespray
###注意:master分支为最新版本,不同版本支持不同的k8s版本
###可查看inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
###查看kube-version版本号
###如2.10支持的K8s版本为1.14
###2.9支持的K8s版本为1.13
###具体的安装方法根据不同版本分支查看文档
git clone https://github.com/kubernetes-incubator/kubespray 


###安装依赖包
###要求python3.5及以上版本
cd ${kubespray_home}
pip3 install -U -r requirements.txt 

###配置要安装的主机
cp -rfp inventory/sample inventory/mycluster
declare -a IPS=(172.16.11.161 172.16.11.162 172.16.11.163)
CONFIG_FILE=inventory/mycluster/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

###查看集群配置
#如版本:最新k8s版本为1.15.0
cat inventory/mycluster/group_vars/all/all.yml
cat inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml

###集群安装
ansible-playbook -i inventory/mycluster/hosts.yml --become --become-user=root cluster.yml

安装失败回滚操作

由于网络环境或主机环境原因,安装过程中可能会有报错导致中断(概率还是挺大的),所以安装失败时还要进行清除环境操作,具体如下

#删除配置
ansible-playbook -i inventory/mycluster/hosts.yml --become --become-user=root reset.yml
#删除docker
yum -y remove docker*
rm -rf /etc/docker/  #可保留harbor的证书文件
rm -rf /etc/systemd/system/docker.service*

配置文件说明

  • inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
    • kube_version,k8s版本等配置信息
  • inventory/mycluster/group_vars/all/all.yml
  • roles/download/defaults/main.yml

gcr.io镜像国内被墙解决思路小结

  • kubeadm config images list 查看集群所用镜像
#参考:https://www.cnblogs.com/ltxdzh/p/10113194.html
#先执行download tag
ansible-playbook -i inventory/mycluster/hosts.yml --become --become-user=root cluster.yml -t download -b -v -k
#遇到下载的镜像会报错停下,然后手动在一台配置了docker proxy的机器上从pull官方镜像,打上tag后push到本地镜像仓库

配置http代理解决被墙

### 代理服务器
1) 可以自建v2ray代理服务器
2)购买代理服务器
vim inventory/mycluster/group_vars/all/all.yml
### 增加配置 http_proxy代理
http_proxy: "代理服务器IP"
https_proxy: "代理服务器IP"

配置参数说明

k8s-cluster.yml
kube_version: v1.13.6  --k8s版本
kube_image_repo: "gcr.io/google-containers"  --镜像仓库地址,gcr.io国内被墙,可以选择阿里云的镜像地址
kube_network_plugin: kube-router  --网络部署方案,可以是flannel、calico等等
kube_service_addresses: 10.233.0.0/18  --cluster ip地址范围
kube_pods_subnet: 10.233.64.0/18  --节点地址分配
kube_network_node_prefix: 24  --pod ip的掩码
kube_proxy_mode: ipvs  --采cluster_name: cluster.local  --域名后缀
用ipvs模式
dns_mode: coredns  --采用coredns
container_manager: docker  --选择docker作为引擎
etcd_deployment_type: docker  --etcd采用docker方式部署
kubelet_deployment_type: host  --kubelet采用二进制方式部署
podsecuritypolicy_enabled: false  --psp支持
nvidia_accelerator_enabled: true  --开启GPU支持

./k8s-cluster/addons.yml ##保持默认即可
dashboard_enabled: true  --安装dashboard
helm_enabled: false  --helm安装
registry_enabled: false  --镜像仓库安装。我们使用harbor作为镜像仓库,这里不开启
local_volume_provisioner_enabled: false  -- local storageclass支持
cephfs_provisioner_enabled: false  --cephfs storageclass支持
ingress_nginx_enabled: true  --ingress支持
cert_manager_enabled: true  --证书管理支持

./all/all.yml ##根据需要开启
cloud_provider: vsphere  --开启cloud_provider支持

./all/docker.yml  ##根据需要修改
docker_daemon_graph: "/var/lib/docker" --指定docker工作目录
docker_log_opts: "--log-opt max-size=50m --log-opt max-file=5"  --限制Json.log大小及数量

拓展

升级k8s

ansible-playbook upgrade-cluster.yml -b -i inventory/mycluster/hosts.ini -e kube_version=vX.XX.XX -vvv

增加节点

增加节点(有两种方式)
### a
配置deploy节点到新增节点的免密登录
inventory/inventory.cfg下增加节点信息
ansible-playbook -i inventory/inventory.cfg scale.yml
### b
配置deploy节点到新增节点的免密登录
inventory/inventory.cfg下增加节点信息
ansible-playbook -i inventory/inventory.cfg cluster.yml

删除节点

ansible-playbook -i /tools/kubespray/inventory/inventory.cfg /tools/kubespray/remove-node.yml --extra-vars "node=node4,node5"

总结

kubespray可以做为学习部署工具使用,但由于其对网络要求较高,即时配了http代理科学上网,部署过程中也较容易出错,且必须按步骤要求一步步操作,其部署本质上还是基于kubeadm+ansible的方式实现,所以,作为生产部署的工具,个人还是更倾向于kubeadm,当然,这个仁者见仁~就由各位看官自行判断

喜欢 的加个收藏 ,有问题可以共同交流进步~

 类似资料: