《Kubernetes部署篇:基于docker使用kubeasz工具二进制部署高可用K8S集群(互联网方案一)》

您所在的位置:网站首页 K8s部署工具 《Kubernetes部署篇:基于docker使用kubeasz工具二进制部署高可用K8S集群(互联网方案一)》

《Kubernetes部署篇:基于docker使用kubeasz工具二进制部署高可用K8S集群(互联网方案一)》

2023-12-04 02:27| 来源: 网络整理| 查看: 265

文章目录 一、部署背景简介二、部署工具介绍三、部署方案介绍四、部署环境信息五、部署资源下载六、部署准备工作6.1、系统内核升级6.2、设置主机名6.3、环境初始化6.4、安装基础包6.5、ssh多机互信6.6、配置时间同步6.7、安装ansible 七、部署操作步骤7.1、下载项目源码、二进制及离线镜像7.2、创建集群配置实例7.3、个性化配置7.4、执行一键安装 八、验证集群及组件状态8.1、验证k8s集群状态8.2、验证calico网络状态8.2、验证etcd集群状态8.4、验证各组件状态 总结:整理不易,如果对你有帮助,可否点赞关注一下?

一、部署背景简介

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

二、部署工具介绍

说明:使用kubeasz-3.1.1,详情请右键点击打开超链接。

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

注意1:确保各节点时区设置一致、时间同步。如果你的环境没有提供NTP 时间同步,推荐集成安装chrony 注意2:确保在干净的系统上开始安装,不要使用曾经装过kubeadm或其他k8s发行版的环境。 注意3:建议操作系统升级到新的稳定内核。 注意4:在公有云上创建多主集群,请结合阅读在公有云上部署kubeasz。

三、部署方案介绍

根据网络环境及部署需求,综合有如下四种部署方案: 方案一:基于docker使用kubeasz工具在线部署二进制高可用kubernetes集群 方案一:基于containerd使用kubeasz工具在线部署二进制高可用kubernetes集群 方案三:基于docker使用kubeasz工具离线部署二进制高可用kubernetes集群 方案四:基于containerd使用kubeasz工具离线部署二进制高可用kubernetes集群

四、部署环境信息

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

IP地址主机名操作系统内核版本K8S版本角色192.168.1.11k8s-sdjw-ansible-190centos7.6.18105.4.13ansible-client192.168.1.12k8s-sdjw-ansible-191centos7.6.18105.4.13v1.22.2控制节点192.168.1.19k8s-sdjw-test-192centos7.6.18105.4.13v1.22.2控制节点192.168.1.20k8s-sdjw-test-193centos7.6.18105.4.13v1.22.2工作节点192.168.1.21k8s-sdjw-test-194centos7.6.18105.4.13v1.22.2工作节点 五、部署资源下载

说明:当前kubespray-3.1.1版本默认安装的是K8S版本为v1.22.2,方便大家,特意找了一台能pull镜像及文件的服务器下载好了相关部署二进制文件、系统环境依赖包及镜像。

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

资源信息列表如下: 在这里插入图片描述 说明:如果你是从我这里下载资源的,建议将kubeasz/kubeasz目录mv到/etc目录下,直接根据自己环境信息和部署需求,对/etc/kubeasz/clusters/mycluster目录下的config.yml和hosts文件进行修改。

六、部署准备工作 6.1、系统内核升级

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

6.2、设置主机名

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

[root@localhost ~]# hostnamectl set-hostname k8s-sdjw-ansible-190 [root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-191 [root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-192 [root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-193 [root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-194 [root@localhost ~]# hostnamectl set-hostname k8s-sdjw-test-198 6.3、环境初始化

说明:当前操作需在 所有主机上执行,环境初始化内容包括: 关闭防火墙、关闭selinux、关闭swap、内核参数。 配置完成后需再次重启服务器,内核参数vm.swappiness重启才生效。 在这里插入图片描述

6.4、安装基础包

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

6.5、ssh多机互信

说明:当前操作只需在 ansible-主控端主机上执行,即当前环境192.168.1.190主机

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

[root@k8s-sdjw-ansible-190 basic-env]# ./ssh_key.sh root 192.168.1.191 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22 [root@k8s-sdjw-ansible-190 basic-env]# ./ssh_key.sh root 192.168.1.192 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22 [root@k8s-sdjw-ansible-190 basic-env]# ./ssh_key.sh root 192.168.1.193 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22 [root@k8s-sdjw-ansible-190 basic-env]# ./ssh_key.sh root 192.168.1.198 123456 /root/.ssh/id_rsa.pub /root/.ssh/id_rsa 22

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

6.6、配置时间同步

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

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

说明:你也可以使用chrony工具来实现时间同步。

6.7、安装ansible

说明:当前操作只需在 ansible-主控端主机上执行,即当前环境192.168.1.190主机。

# 注意pip 21.0以后不再支持python2和python3.5,需要如下安装 # To install pip for Python 2.7 install it from https://bootstrap.pypa.io/2.7/ : [root@k8s-sdjw-ansible-190 ~]# curl -O https://bootstrap.pypa.io/pip/2.7/get-pip.py [root@k8s-sdjw-ansible-190 ~]# python get-pip.py [root@k8s-sdjw-ansible-190 ~]# python -m pip install --upgrade "pip < 21.0" # pip安装ansible(国内如果安装太慢可以直接用pip阿里云加速) [root@k8s-sdjw-ansible-190 basic-env]# pip install ansible -i https://mirrors.aliyun.com/pypi/simple/

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

七、部署操作步骤 7.1、下载项目源码、二进制及离线镜像

说明:当前操作只需在 ansible-主控端主机上执行,即当前环境192.168.1.190主机。

1、下载项目源码、二进制及离线镜像 说明:如果你的主机无法从github上下载ezdown文件,你可以从这个地址下载ezdown

# 下载工具脚本ezdown,举例使用kubeasz版本3.1.1 [root@k8s-sdjw-ansible-190 kubeasz]# export release=3.1.1 [root@k8s-sdjw-ansible-190 kubeasz]# wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown [root@k8s-sdjw-ansible-190 kubeasz]# chmod +x ./ezdown # 使用工具脚本下载 [root@k8s-sdjw-ansible-190 kubeasz]# ./ezdown -D [root@k8s-sdjw-ansible-190 kubeasz]# ./ezdown -P [root@k8s-sdjw-ansible-190 kubeasz]# ./ezdown -R

查看命令帮助,如下图所示: 在这里插入图片描述 说明:上述脚本运行成功后,所有文件(kubeasz代码、二进制、离线镜像)均已整理好放入目录/etc/kubeasz,/etc/kubeasz包 kubeasz版本为 ${release} 的发布代码,/etc/kubeasz/bin 包含 k8s/etcd/docker/cni 等二进制文件,/etc/kubeasz/down 包含集群安装时需要的离线容器镜像,/etc/kubeasz/down/packages 包含集群安装时需要的系统基础软件,如下图所示:

#离线文件不包括: 管理端ansible安装,但可以使用容器化方式运行kubeasz安装命令 其他更多kubernetes插件镜像

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

7.2、创建集群配置实例

1、创建集群配置实例

[root@k8s-sdjw-ansible-190 kubeasz]# pwd /etc/kubeasz [root@k8s-sdjw-ansible-190 kubeasz]# ./ezctl new mycluster

如下图所示: 在这里插入图片描述 说明:然后根据提示配置/etc/kubeasz/clusters/mycluster/hosts 和 /etc/kubeasz/clusters/mycluster/config.yml;根据前面节点规划修改hosts文件和其他集群层面的主要配置选项;其他集群组件等配置项可以在config.yml文件中修改。

7.3、个性化配置

说明:hosts和config.yml文件需要根据自己部署需求和实际环境情况进行修改。

1、修改/etc/kubeasz/clusters/mycluster/hosts文件 说明:hosts文件的信息,主要是 [etcd] 、[kube_master]、[kube_node] 等信息

[root@k8s-sdjw-ansible-190 kubeasz]# vim /etc/kubeasz/clusters/mycluster/hosts [etcd] 192.168.1.191 #此处必须修改 192.168.1.192 #此处必须修改 192.168.1.193 #此处必须修改 [kube_master] 192.168.1.191 #此处必须修改 192.168.1.192 #此处必须修改 [kube_node] 192.168.1.193 #此处必须修改 192.168.1.198 #此处必须修改 [harbor] [ex_lb] [chrony] [all:vars] SECURE_PORT="6443" #默认不修改 CONTAINER_RUNTIME="docker" #此处修改,根据实际情况修改,默认为docker CLUSTER_NETWORK="calico" #此处修改,根据实际情况修改,默认为flannel PROXY_MODE="ipvs" #此处不修改 SERVICE_CIDR="10.96.0.0/16" #此处修改,根据实际情况修改 CLUSTER_CIDR="10.48.0.0/16" #此处修改,根据实际情况修改 NODE_PORT_RANGE="30000-40000" #此处修改,根据实际情况修改 CLUSTER_DNS_DOMAIN="cluster.local" #此处不修改 bin_dir="/opt/kube/bin" #默认不修改 base_dir="/etc/kubeasz" #此处不修改 cluster_dir="{{ base_dir }}/clusters/mycluster" #此处不修改,自动生成无需修改 ca_dir="/etc/kubernetes/ssl" #此处不修改

2、修改/etc/kubeasz/clusters/mycluster/config.yml文件 说明:config.yml 文件的信息,主要是CLUSTER_NAME 等信息

[root@k8s-sdjw-ansible-190 kubeasz]# vim /etc/kubeasz/clusters/mycluster/config.yml CALICO_IPV4POOL_IPIP: "always" #默认不修改 IP_AUTODETECTION_METHOD: "interface=ens.*" #网卡自动发现,选择此模式 DOCKER_STORAGE_DIR: "/data/k8s/docker" #根据实际情况填写,建议选择磁盘空间最大分区下目录 INSECURE_REG: '["127.0.0.1/8"]' #私有仓库地址,根据实际情况填写,我这里没有搭建私有仓库,就默认没有修改 ETCD_DATA_DIR: "/data/k8s/etcd" #根据实际情况填写,建议选择磁盘空间最大分区下目录 KUBELET_ROOT_DIR: "/data/k8s/kubelet" #根据实际情况填写,建议选择磁盘空间最大分区下目录 dns_install: "yes" #这里必须安装,使用本地dns,解析速度快 metricsserver_install: "yes" #这里选择安装,根据实际情况修改 dashboard_install: "no" #这里选择不安装,根据实际情况修改 ingress_install: "no" #这里选择不安装,根据实际情况修改 prom_install: "no" #这里选择不安装,根据实际情况修改 nfs_provisioner_install: "no" #这里选择不安装,根据实际情况修改 7.4、执行一键安装

说明:当前操作只需在 ansible-主控端主机上执行,即当前环境192.168.1.190主机。

[root@k8s-sdjw-ansible-190 kubeasz]# pwd /etc/kubeasz [root@k8s-sdjw-ansible-190 kubeasz]# ./ezctl setup mycluster all

一键部署全程无报错,如下图所示: 在这里插入图片描述

八、验证集群及组件状态 8.1、验证k8s集群状态

说明:controller-manager Unhealthy Get “https://127.0.0.1:10257/healthz”: dial tcp 127.0.0.1:10257: connect: connection refused 在这里插入图片描述 说明:出现这个报错是因为/etc/systemd/system/kube-controller-manager.servic配置文件种定义的配置–bind-address=192.168.1.192绑定的地址是192.168.1.192,不是127.0.0.1,由于后面需要搭建prometheus监控系统,如果设置为127.0.0.1,则无法监控到controller-manager这个组件,如果设置为0.0.0.0,则有点不太安全,所以你可以忽略它,如果你无法忽略它,则建议改成0.0.0.0。

根据上述图可以看出kube-controller-manager部署在192.168.1.191和192.168.1.192主机上,分别修改如下配置:

[root@k8s-sdjw-test-191 ~]# vi /etc/systemd/system/kube-controller-manager.service --bind-address=0.0.0.0 \ [root@k8s-sdjw-test-191 ~]# systemctl daemon-reload [root@k8s-sdjw-test-191 ~]# systemctl restart kube-controller-manager [root@k8s-sdjw-test-192 ~]# vi /etc/systemd/system/kube-controller-manager.service --bind-address=0.0.0.0 \ [root@k8s-sdjw-test-192 ~]# systemctl daemon-reload [root@k8s-sdjw-test-192 ~]# systemctl restart kube-controller-manager

如下图所示,则表明成功解决 在这里插入图片描述 注意: 你也可以在ansible-主控端上查看k8s集群状态,即192.168.1.190主机上,如下图所示: 在这里插入图片描述

8.2、验证calico网络状态

验证calico网络状态

[root@k8s-sdjw-test-191 ~]# /opt/kube/bin/calicoctl node status [root@k8s-sdjw-test-191 ~]# route -n [root@k8s-sdjw-test-191 ~]# netstat -antlp|grep ESTABLISHED|grep 179 [root@k8s-sdjw-test-191 ~]# ip a

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

8.2、验证etcd集群状态

验证etcd集群状态,三台 etcd 的输出均为 healthy 时表示集群服务正常。

#1、systemctl status etcd 查看服务状态 #2、journalctl -u etcd 查看运行日志 # 3、在任一 etcd 集群节点上执行如下命令 # 根据hosts中配置设置shell变量 $NODE_IPS export NODE_IPS="192.168.1.191 192.168.1.192 192.168.1.193" for ip in ${NODE_IPS}; do ETCDCTL_API=3 /opt/kube/bin/etcdctl \ --endpoints=https://${ip}:2379 \ --cacert=/etc/kubernetes/ssl/ca.pem \ --cert=/etc/kubernetes/ssl/etcd.pem \ --key=/etc/kubernetes/ssl/etcd-key.pem \ endpoint health; done

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

8.4、验证各组件状态

如下所示:

# 查看进程状态 systemctl status kube-apiserver systemctl status kube-controller-manager systemctl status kube-scheduler # 查看进程运行日志 journalctl -u kube-apiserver journalctl -u kube-controller-manager journalctl -u kube-scheduler 总结:整理不易,如果对你有帮助,可否点赞关注一下?

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



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3