【云原生Kubernetes系列第四篇】二进制部署多master集群Kubernetes(k8s)v1.20( 一生不缺浪漫,唯独装不下遗憾)(一)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 【云原生Kubernetes系列第四篇】二进制部署多master集群Kubernetes(k8s)v1.20( 一生不缺浪漫,唯独装不下遗憾)(一)

前言


搭建多master集群Kubernetes之前先要完成单节点部署,单节点部署参照上一篇博客【云原生Kubernetes系列第三篇】二进制部署单节点Kubernetes(k8s)v1.20


一、多master集群概述


1.1 node如何找到master


node节点的kubelet.kubeconfig和kube-proxy.kubeconfig文件写明了apiserver的端口号和master节点的IP地址,从而找到master节点,当我们在部署集群的时候,就要有两个master,但是一个集群中只能有一个主,该如何指定呢?我们可以使用VIP地址。


1.2 如何配置master集群

我们可以把master集群当做nginx服务器群,node节点是客户端,客户端想要找到服务器需要通过负载均衡器实现转发,我们可以安装一个调度器,调度器使用LVS、nginx、haproxy都可以,为了简单我们安装nginx做负载均衡器,再考虑负载均衡器的高可用,搭建两台nginx服务器实现调度器的高可用。


1.3 集群架构


多master一般装两到三台,三台比两台更有保障,同时会有一个选举机制,需要使用奇数台,两台master可仅仅满足高可用和负载


#scheduler.sh文件中定义了多节点的选举机制
--leader-elect=true:当该组件启动多个时,自动启动 leader 选举


k8s中Controller-Manager和Scheduler的选主逻辑:k8s中的etcd是整个集群所有状态信息的存储,涉及数据的读写和多个etcd之间数据的同步,对数据的一致性要求严格,所以>使用较复杂的 raft 算法来选择用于提交数据的主节点。而 apiserver 作为集群入口,本身是无状态的web服务器,多个 apiserver 服务之间直接负载请求并不需要做选主。Controller-Manager 和 Scheduler 作为任务类型的组件,比如 controller-manager 内置的 k8s 各种资源对象的控制器实时的 watch apiserver 获取对象最新的变化事件做期望状>态和实际状态调整,调度器watch未绑定节点的pod做节点选择,显然多个这些任务同时工作是完全没有必要的,所以 controller-manager 和 scheduler 也是需要选主的,但是选主逻辑和 etcd 不一样的,这里只需要保证从多个 controller-manager 和 scheduler 之间选出一个 leader 进入工作状态即可,而无需考虑它们之间的数据一致和同步。


二、多master集群部署过程


2.1 实验环境

主机

IP地址 组件
k8s集群master01 192.168.109.131 kube-apiserver kube-controller-manager kube-scheduler

k8s集群master02

192.168.109.134


k8s集群node01

192.168.109.132

kubelet kube-proxy docker

k8s集群node02 192.168.109.133

kubelet kube-proxy docker

etcd集群节点1 192.168.109.131 etcd
etcd集群节点2 192.168.109.132 etcd
etcd集群节点3 192.168.109.133 etcd
负载均衡nginx+keepalive01(master) 192.168.109.135


负载均衡nginx+keepalive02(backup) 192.168.109.137


VIP 192.168.109.200


考虑到电脑性能,我将etcd部署在master和node节点上,master集群实现高可用,并且我这边只搭建两个node节点


2.2 操作系统初始化配置

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
#-X清除自定义的规则
#关闭selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
#关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab 
#根据规划设置主机名
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02
#在master添加hosts
cat >> /etc/hosts << EOF
192.168.109.131 master01
192.168.109.134 master02
192.168.109.132 node01
192.168.109.133 node02
EOF
#调整内核参数
cat > /etc/sysctl.d/k8s.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
sysctl --system
#时间同步
yum install ntpdate -y
ntpdate time.windows.com


2.3 配置master02节点

#我们直接将master01的文件复制到master02,不在重复安装
[root@master01 opt]# scp -r kubernetes/ master02:/opt
#创建软连接到系统,便于识别
[root@master02 bin]# ln -s /opt/kubernetes/bin/* /usr/local/bin/
[root@master02 cfg]# vim kube-apiserver 
--bind-address=192.168.109.134  #修改
--advertise-address=192.168.109.134  #修改
#将master01的etcd证书复制过去
[root@master01 opt]# scp -r etcd/ master02:/opt
#将master01中kubectl的配置文件复制过去
[root@master01 ~]# scp -r .kube/ master02:/root
#此时master02可以查看到node
[root@master02 opt]# kubectl get node
NAME              STATUS   ROLES    AGE     VERSION
192.168.109.132   Ready    <none>   7h11m   v1.20.11
192.168.109.133   Ready    <none>   7h1m    v1.20.11
#将master01节点的服务复制谷片区
[root@master01 ~]# cd /usr/lib/systemd/system
[root@master01 system]# ls kube*
kube-apiserver.service           kube-scheduler.service
kube-controller-manager.service
[root@master01 system]# scp kube* master02:`pwd`
#master02开启服务
ls kube*
systemctl start kube-apiserver.service kube-scheduler.service kube-controller-manager.service
systemctl enable kube-apiserver.service kube-scheduler.service kube-controller-manager.service
systemctl status kube-apiserver.service kube-scheduler.service kube-controller-manager.service







相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
11天前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
104 60
|
12天前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
109 62
|
10天前
|
NoSQL 关系型数据库 Redis
高可用和性能:基于ACK部署Dify的最佳实践
本文介绍了基于阿里云容器服务ACK,部署高可用、可伸缩且具备高SLA的生产可用的Dify服务的详细解决方案。
|
11天前
|
Cloud Native 持续交付 开发者
探索云原生技术:构建高效、灵活的应用架构
【10月更文挑战第6天】 在当今数字化浪潮中,企业面临着日益复杂的业务需求和快速变化的市场环境。为了保持竞争力,他们需要构建高效、灵活且可扩展的应用程序架构。本文将探讨云原生技术如何帮助企业实现这一目标,并分析其核心概念与优势。通过深入剖析云原生技术的各个方面,我们将揭示其在现代应用开发和部署中的重要性,并提供一些实用的建议和最佳实践。
39 2
|
1天前
|
运维 Cloud Native 持续交付
云原生架构的演进与实践####
【10月更文挑战第16天】 云原生,这一概念自提出以来,便以其独特的魅力和无限的可能性,引领着现代软件开发与部署的新浪潮。本文旨在探讨云原生架构的核心理念、关键技术及其在实际项目中的应用实践,揭示其如何帮助企业实现更高效、更灵活、更可靠的IT系统构建与管理。通过深入剖析容器化、微服务、持续集成/持续部署(CI/CD)等核心技术,结合具体案例,本文将展现云原生架构如何赋能企业数字化转型,推动业务创新与发展。 ####
79 47
|
1天前
|
运维 Cloud Native 安全
深入探索云原生架构
【10月更文挑战第12天】
11 2
|
2天前
|
负载均衡 监控 Cloud Native
云原生架构下的微服务治理策略与实践####
在数字化转型加速的今天,云原生技术以其高效、灵活、可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生环境下微服务治理的策略与实践路径,旨在为读者提供一个系统性的微服务治理框架,涵盖从服务设计、部署、监控到运维的全生命周期管理,助力企业在云端构建更加稳定、高效的业务系统。 ####
|
15天前
|
运维 Cloud Native 安全
云原生架构:企业数字化转型的新引擎##
【10月更文挑战第2天】 在当今数字化浪潮中,云原生架构以其独特的优势成为企业实现高效、灵活和创新的核心驱动力。本文深入探讨了云原生的概念、核心技术如容器化、微服务和DevOps等,并分析了这些技术如何共同作用,推动企业在云平台上实现快速迭代、弹性扩展和资源优化。同时,文章还阐述了云原生在实际应用中面临的挑战及相应的解决策略,为企业的数字化转型提供全面而深入的指导。 ##
41 17
|
2天前
|
Cloud Native API 持续交付
利用云原生技术优化微服务架构
【10月更文挑战第13天】云原生技术通过容器化、动态编排、服务网格和声明式API,优化了微服务架构的可伸缩性、可靠性和灵活性。本文介绍了云原生技术的核心概念、优势及实施步骤,探讨了其在自动扩展、CI/CD、服务发现和弹性设计等方面的应用,并提供了实战技巧。
|
3天前
|
运维 监控 Cloud Native
云原生架构下,微服务治理的艺术与实践####
【10月更文挑战第14天】 在数字化转型的大潮中,云原生技术以其高效、灵活与可扩展性成为企业IT架构的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务治理的策略与实践,揭示了如何通过精细化管理提升系统的响应速度、稳定性和可维护性。不同于传统的摘要概述,本文摘要旨在直接触及读者关注的核心——即如何在复杂多变的云环境中,实现微服务的高效协同与治理,为读者提供一个清晰的行动指南。 ####
11 1