《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

相关文章

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Springboot3 ResponseEntity 完全使用案例

《Springboot3ResponseEntity完全使用案例》ResponseEntity是SpringBoot中控制HTTP响应的核心工具——它能让你精准定义响应状态码、响应头、响应体,相比... 目录Spring Boot 3 ResponseEntity 完全使用教程前置准备1. 项目基础依赖(M

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el

C#中Trace.Assert的使用小结

《C#中Trace.Assert的使用小结》Trace.Assert是.NET中的运行时断言检查工具,用于验证代码中的关键条件,下面就来详细的介绍一下Trace.Assert的使用,具有一定的参考价值... 目录1、 什么是 Trace.Assert?1.1 最简单的比喻1.2 基本语法2、⚡ 工作原理3

C# IPAddress 和 IPEndPoint 类的使用小结

《C#IPAddress和IPEndPoint类的使用小结》本文主要介绍了C#IPAddress和IPEndPoint类的使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录一、核心作用网络编程基础类二、IPAddress 类详解三种初始化方式1. byte 数组初始化2. l