《Kubernetes部署篇:基于docker使用kubeasz工具二进制部署高可用K8S集群(互联网方案一)》 |
您所在的位置:网站首页 › K8s部署工具 › 《Kubernetes部署篇:基于docker使用kubeasz工具二进制部署高可用K8S集群(互联网方案一)》 |
文章目录
一、部署背景简介二、部署工具介绍三、部署方案介绍四、部署环境信息五、部署资源下载六、部署准备工作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集群(国内互联网方案一)部署资源包 资源信息列表如下: 说明:当前操作需在 所有主机上执行,执行更新后 必须重启服务器。 说明:当前操作需在 所有主机上执行,请根据部署环境信息中的主机名 分别对部署主机进行主机名设置。 [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重启才生效。 说明:当前操作需在 所有主机上执行。注意sshpass、expect 、rsync、ntpdate为必须要安装的包。 说明:当前操作只需在 ansible-主控端主机上执行,即当前环境192.168.1.190主机 1、使用ssh-keygen工具生成秘钥 如下图所示: 说明:配置时间同步操作需在 所有主机上执行。,如果你有自己的时间同步服务器,可配置为自己的时间服务器地址。 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/ 如下图所示: 说明:当前操作只需在 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 查看命令帮助,如下图所示: 如下图所示: 1、创建集群配置实例 [root@k8s-sdjw-ansible-190 kubeasz]# pwd /etc/kubeasz [root@k8s-sdjw-ansible-190 kubeasz]# ./ezctl new mycluster 如下图所示: 说明: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 一键部署全程无报错,如下图所示: 说明:controller-manager Unhealthy Get “https://127.0.0.1:10257/healthz”: dial tcp 127.0.0.1:10257: connect: connection refused 根据上述图可以看出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 如下图所示,则表明成功解决 验证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 如下图所示: 验证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 如下图所示: 如下所示: # 查看进程状态 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 |