kubespray部署高可用K8s集群
官方推荐安装方式:Installing Kubernetes with deployment tools | Kuberneteskubespray下载地址:GitHub - kubernetes-sigs/kubespray: Deploy a Production Ready Kubernetes Cluster#介绍Kubespray底层采用的是kubeadm,采用了ansilbe的模式,可
·
目录
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.161 | kubespray安装,node1 |
172.16.11.162 | node2 |
172.16.11.163 | node3 |
安装
以下配置均只在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
- kube_image_repo: "gcr.io/google-containers",镜像下载地址及版本等相关配置
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,当然,这个仁者见仁~就由各位看官自行判断
喜欢 的加个收藏 ,有问题可以共同交流进步~
更多推荐
已为社区贡献11条内容
所有评论(0)