《Kubernetes部署篇:基于docker使用kubespray工具部署高可用K8S集群(国内互联网方案二)》

本文主要是介绍《Kubernetes部署篇:基于docker使用kubespray工具部署高可用K8S集群(国内互联网方案二)》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、部署背景简介
  • 二、部署工具介绍
  • 三、部署方案介绍
  • 四、部署环境信息
  • 五、部署资源下载
  • 六、部署准备工作
    • 6.1、系统内核升级
    • 6.2、设置主机名
    • 6.3、环境初始化
    • 6.4、ssh多机互信
    • 6.5、安装基础包
    • 6.6、配置时间同步
    • 6.7、部署docker服务
  • 七、部署操作步骤
    • 7.1、上传部署文件
    • 7.2、下载解压源码
    • 7.3、个性化配置
    • 7.4、修改calico网络模式(可选)
    • 7.5、生成inventory配置
    • 7.5、执行一键部署
    • 7.6、查看集群信息
  • 总结:整理不易,如果对你有帮助,可否点赞关注一下?


一、部署背景简介

根据公司业务场景的不同,你可能需要部署几套或几十套K8S高可用集群,面对繁琐的部署步骤,你可能望而却步,急需自动化的K8S部署工具,kubespray就可以很好的解决你的问题。


二、部署工具介绍

说明:使用kubespray-v2.18.1,详情请右键点击打开超链接。

当前kubespray工具版本要求如下:

1、Kubernetes的最低要求版本是v1.20,如果需要部署其它版本K8S,请使用kubespray其它版本。
2、Ansible v2.9.x、Jinja 2.11+ 和 python-netaddr 安装在将运行Ansible命令的机器上,目前实验性支持 Ansible 2.10.x。
3、目标服务器必须能够访问 Internet才能拉取docker镜像,否则,需要额外的配置。
4、目标服务器配置为允许IPv4转发。
5、如果对pod和服务使用IPv6,则目标服务器配置为允许IPv6 转发。
6、防火墙不受管理,您需要像以前那样实施自己的规则。为了避免在部署过程中出现任何问题,您应该禁用防火墙。
7、如果kubespray是从非root用户帐户运行的,则应在目标服务器中配置正确的权限提升方法。然后应指定ansible_become标志或命令参数。–become or -b


三、部署方案介绍

说明:根据国内网络情况及实际部署环境,综合有如下四种部署方案:
方案一:基于docker使用kubespray工具在线部署高可用kubernetes集群(国内互联网环境)
方案二:基于containerd使用kubespray工具在线部署高可用kubernetes集群(国内互联网环境)
方案三:基于docker使用kubespray工具离线部署高可用kubernetes集群(国内专网环境)
方案四:基于containerd使用kubespray工具离线部署高可用kubernetes集群(国内专网环境)


四、部署环境信息

说明:由于服务器资源有限,演示环境共五台服务器,按如下规划进行部署。

IP地址主机名操作系统内核版本K8S版本角色
192.168.1.11k8s-sdjw-ansible-11centos7.6.18105.4.13ansible-client
192.168.1.12k8s-sdjw-test-12centos7.6.18105.4.13v1.22.8控制节点
192.168.1.19k8s-sdjw-test-19centos7.6.18105.4.13v1.22.8控制节点
192.168.1.20k8s-sdjw-test-20centos7.6.18105.4.13v1.22.8工作节点
192.168.1.21k8s-sdjw-test-21centos7.6.18105.4.13v1.22.8工作节点
192.168.1.22k8s-sdjw-test-22centos7.6.18105.4.13v1.22.8工作节点

五、部署资源下载

说明:当前kubespray-v2.18.1版本默认安装的是K8S版本为v1.22.8,方便大家,特意找了一台能pull镜像及文件的服务器下载好了相关部署安装包及镜像。

基于docker使用kubespray工具部署高可用K8S集群(国内互联网方案二)部署资源包

资源信息如下:
在这里插入图片描述


六、部署准备工作

6.1、系统内核升级

说明:当前操作需在 所有主机上执行,执行更新后 必须重启服务器
在这里插入图片描述
如下所示:
在这里插入图片描述


6.2、设置主机名

说明:当前操作需在 所有主机上执行,请根据部署环境信息中的主机名 分别对部署主机进行主机名设置

[root@localhost ~]# hostnamectl set-hostname k8s-sdjw-ansible-11
[root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-12
[root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-19
[root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-20
[root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-21
[root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-22

6.3、环境初始化

说明:当前操作需在 所有主机上执行,环境初始化内容包括: 关闭防火墙、关闭selinux、关闭swap、内核参数 配置完成后需再次重启服务器,内核参数vm.swappiness才生效。
在这里插入图片描述
注意事项:如果服务器默认开启dnsmasq服务,请关闭dnsmasq(否则可能导致容器无法解析域名),命令如下:

[root@localhost ~]# service dnsmasq stop && systemctl disable dnsmasq

6.4、ssh多机互信

说明:当前操作只需在 ansible-client主机上执行。

1、使用ssh-keygen工具生成秘钥
在这里插入图片描述
2、执行脚本

[root@k8s-sdjw-ansible-11 basic-env]# yum install expect -y
[root@k8s-sdjw-ansible-11 basic-env]# ./ssh_key.sh root 192.168.1.12 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22
[root@k8s-sdjw-ansible-11 basic-env]# ./ssh_key.sh root 192.168.1.19 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22
[root@k8s-sdjw-ansible-11 basic-env]# ./ssh_key.sh root 192.168.1.20 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22
[root@k8s-sdjw-ansible-11 basic-env]# ./ssh_key.sh root 192.168.1.21 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22
[root@k8s-sdjw-ansible-11 basic-env]# ./ssh_key.sh root 192.168.1.22 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22

如下图所示:
在这里插入图片描述


6.5、安装基础包

说明:当前操作需在 所有主机上执行。注意sshpass、expect 、rsync、ntpdate为必须要安装的包。
在这里插入图片描述


6.6、配置时间同步

说明:配置时间同步操作需在 所有主机上执行。,如果你有自己的时间同步服务器,可配置为自己的时间服务器地址。

crontab -e
*/2 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null

6.7、部署docker服务

说明:当前操作只需在 ansible-client主机上执行。这里使用的部署资源包里的docker部署工具来部署docker服务,你也可以按照自己的方法来部署docker服务。
在这里插入图片描述
如上所示,则表明docker部署成功。


七、部署操作步骤

7.1、上传部署文件

说明:将提前准备好的镜像及安装文件上传到 服务器集群所有主机,包括ansible-client主机上,如果不修改默认download_cache_dir变量值,则目录路径必须为/tmp/kubespray_cache。,如果你使用的是我提供的资源包,解压后,将kubespray_cache移至/tmp目录下即可。如下所示:
在这里插入图片描述


7.2、下载解压源码

说明:我提供的资源包里包含kubespray-2.18.1.zip,也是在github上下载的,你可以自己手动从github下载。

[root@k8s-sdjw-ansible-11 ~]# wget https://github.com/dongchengjueshen110/kubespray/archive/refs/tags/v2.18.1.zip
[root@k8s-sdjw-ansible-11 ~]# unzip v2.18.1.zip

7.3、个性化配置

说明:配置文件都生成好了,虽然可以直接用,但并不能完全满足大家的个性化需求,比如用docker还是containerd,docker的工作目录是否用默认的/var/lib/docker等等。

1、copy一份demo配置,准备自定义
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# cp -rpf inventory/sample inventory/mycluster2、默认使用containerd修改为docker
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# vim inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
container_manager: docker3、修改docker数据存储目录
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# vim inventory/mycluster/group_vars/all/docker.yml
docker_daemon_graph: "/data/docker"4、k8s集群配置(包括设置容器运行时、svc网段、pod网段等)
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# vim inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
kube_version: v1.22.8
kube_service_addresses: 10.233.0.0/18
kube_pods_subnet: 10.233.64.0/185、修改etcd部署类型为host(当前kubespray-v2.18.1版本etcd安装模式默认为host)
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# vim inventory/mycluster/group_vars/etcd.yml
etcd_deployment_type: host6、附加组件(可选操作)
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# vim inventory/mycluster/group_vars/k8s_cluster/addons.yml
# 代理,默认是false
ingress_nginx_enabled: true
# 界面(可选),这里是默认注释的状态,取消注释即可
dashboard_enabled: true6、修改镜像下载方式
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# vim roles/download/defaults/main.yml
download_force_cache: true  #表示下载镜像源及文件会先从本地缓存目录中下载,即/tmp/kubespray_cache目录

7.4、修改calico网络模式(可选)

说明:calico有两种网络模式,IPIP和BGP两种,kubespray-v2.18.1默认使用calico的IPIP网络模式,这两种网络模式对比请参考:《Kubernetes部署篇:calico两种网络模式》。IPIP和BGP两种网络模式,官方建议K8S集群节点小于100个。由于当前节点节点主机网络都在同一网段内,所以使用BGP网络模式,原生hostgw,效率高。

修改内容如下所示:

#1、添加BGp模式
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# vim inventory/mycluster/group_vars/k8s_cluster/k8s-net-calico.yml
calico_ipip_mode: 'Never'  #定义何时使用网路模式,Never为BGP模式;Always为ipip模式,如果主机跨网段,设置为CrossSubnet
calico_ip_auto_method: "interface=ens.*" #ens.*表示网卡名称,根据实际情况填写#2、选择工作模式,建议设置为Always,表示支持BGP和IPIP
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# vim ./roles/network_plugin/calico/defaults/main.yml
calico_ipv4pool_ipip: "Always"   #支持BGP,IPIP

说明:相比IPIP模式,BGP模式下不需要tunl0设备参与报文传输,我们从路由表信息就能看出差别,如下所示

1、网络模式IPIP,路由信息如下:
在这里插入图片描述
2、网络模式BGP,路由信息如下:
在这里插入图片描述


7.5、生成inventory配置

说明:如果当前机器已经通过系统包安装了ansible,通过安装的其他python包pip install -r requirements.txt将转到与/usr/local/lib/python2.7/dist-packagesAnsible不同的目录树,此,ansible-playbook命令将失败,并显示ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path,这里采用docker来安装ansbile环境,并通过绑定挂载的方式将目录及ssh密钥放入容器,从而避免ansible环境冲突问题。

1、下载镜像
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# docker pull quay.io/kubespray/kubespray:v2.17.12、使用绑定挂载将目录和ssh密钥放入容器
[root@k8s-sdjw-ansible-11 kubespray-2.18.1]# docker run --rm -it  --mount type=bind,source="${HOME}"/.ssh/id_rsa,dst=/root/.ssh/id_rsa  --mount type=bind,source=/data/kubernetes-tools/kubespray-2.18.1,dst=/kubespray --mount type=bind,source=/tmp/kubespray_cache,dst=/tmp/kubespray_cache quay.io/kubespray/kubespray:v2.17.1 bash
root@6a97c8fa970c:/kubespray#3、使用真实的hostname,(否则会自动把你的hostname改成node1/node2...这种)
root@6a97c8fa970c:/kubespray# export USE_REAL_HOSTNAME=true3、指定配置文件位置
root@6a97c8fa970c:/kubespray# export CONFIG_FILE=inventory/mycluster/hosts.yaml4、定义ip列表(你的服务器内网ip地址列表,3台及以上,前两台默认为master节点)
root@6a97c8fa970c:/kubespray# declare -a IPS=(192.168.1.12 192.168.1.19 192.168.1.20 192.168.1.21 192.168.1.22)5、生成配置文件
root@6a97c8fa970c:/kubespray# python3 contrib/inventory_builder/inventory.py ${IPS[@]}

操作步骤如下所示:
在这里插入图片描述
查看主机名,确认USE_REAL_HOSTNAME=true生效

root@6a97c8fa970c:/kubespray# cat inventory/mycluster/hosts.yaml

如下所示:
在这里插入图片描述


7.5、执行一键部署

说明:下面操作 必须在容器里面执行

root@3764bbeab762:/kubespray# ansible-playbook -i inventory/mycluster/hosts.yaml  --become --become-user=root cluster.yml
或带详细日志
root@3764bbeab762:/kubespray# ansible-playbook -i inventory/mycluster/hosts.yaml  --become --become-user=root cluster.yml -vvvv

如下所示,即表明部署成功。
在这里插入图片描述


7.6、查看集群信息

说明: 在master节点主机上执行kubectl命令

1.查看节点状态
在这里插入图片描述
2.查看pod信息
在这里插入图片描述
3.查看集群各组件状态
在这里插入图片描述


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:企业级K8s集群运维实战

这篇关于《Kubernetes部署篇:基于docker使用kubespray工具部署高可用K8S集群(国内互联网方案二)》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/834365

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p