云原生|kubernetes|kubeadm部署高可用集群(一)使用外部etcd集群(一)

简介: 云原生|kubernetes|kubeadm部署高可用集群(一)使用外部etcd集群

前言:


kubernetes的集群部署方式之一是使用kubeadm,该方式部署的集群性质比较接近shell里的一键安装部署脚本,各个组件耦合度非常高,比如etcd组件,kube-apiserver组件并不能高可用,因此,在2018年之前,kubernetes官方并不建议也不能将kubeadm用于生产环境,只是一个快速搭建测试集群的工具。

在2018年之后,通过官方以及社区的不断改进,kubeadm能够实现组件的解耦进而实现了kubernetes集群关键组件的可高用,因此,kubeadm和二进制集群部署方式成为了两大主流方式。

从现如今的角度来看,二进制部署集群仍然是一个首选方案,因为kubeadm部署方式里的关于kube-controller-manage和kube-scheduler 这两个次级关键组件仍不能实现高可用,但不得不说中小规模的kubernetes集群kubeadm这个部署工具仍然是适用的。

我们在使用kubeadm部署集群的时候,如果不做特别的指定,那么,这个集群将会使用其内部的静态pod来创建etcd,因此,此etcd将会是一个单实例模式,而这样的集群显然是不适合在实际的生产活动中使用的,因此,本文将分享如何解耦kubeadm里的etcd,直接使用外部的etcd集群来部署一个高可用的kubernetes集群。

注1:kubernetes集群的组件大体有kube-controller-manage ,kube-apiserver ,kube-scheduler,etcd,kube-proxy这么几个核心的关键组件,其中,为了保证生产环境的稳定可靠,也是为了应对集群的大流量冲击,etcd和kube-apiserver应该是高可用集群模式也必须是高可用集群模式。

注2:静态pod,特指集群内部的运行关键组件的专有pod,此pod一般不需要人为干预,只是作为集群的一个组件形式存在,是在集群初始化的时候生成的pod,例如下面这些pod,统一称为静态pod

[root@master bin]# kubectl get po -A
NAMESPACE     NAME                             READY   STATUS    RESTARTS   AGE
kube-system   coredns-7f6cbbb7b8-4vrj7         1/1     Running   0          42m
kube-system   coredns-7f6cbbb7b8-9x2kg         1/1     Running   0          42m
kube-system   kube-apiserver-master            1/1     Running   0          43m
kube-system   kube-controller-manager-master   1/1     Running   0          43m
kube-system   kube-proxy-kvq2z                 1/1     Running   0          41m
kube-system   kube-proxy-rwtbz                 1/1     Running   0          42m
kube-system   kube-proxy-wp2ft                 1/1     Running   0          42m
kube-system   kube-scheduler-master            1/1     Running   0          43m

OK,下面就开始讲述如何在kubeadm中使用外部etcd集群。

一,环境介绍


image.png

image.png

image.png

主机名的定义:

[root@master ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.217.19 master k8s-master
192.168.217.20 node1 k8s-node1
192.168.217.21 node2 k8s-node2

集群基础环境的安装见我的博客:

云原生|kubernetes|kubeadm五分钟内部署完成集群(完全离线部署---适用于centos7全系列)_晚风_END的博客-CSDN博客

二,etcd集群二进制部署


image.png

centos7操作系统 ---ansible剧本离线快速部署etcd集群_晚风_END的博客-CSDN博客_etcd离线安装

这里在强调一下,ansible_offlie.tar.gz 进入解压目录后 rpm -ivh *  即可,剩下的按照上面我写的博客操作即可。

ansible-deployment-etcd-3.3.tar对应etcd-v3.3.13-linux-amd64.tar

ansible-deployment-etcd-3.4.tar对应etcd-v3.4.9-linux-amd64.tar ,etcd安装包如果不想麻烦就放到root根目录下即可。

etcd集群部署完成后的最终测试:

[root@node2 ~]# ETCDCTL_API=3 /opt/etcd/bin/etcdctl --endpoints=https://192.168.217.19:2379,https://192.168.217.20:2379,https://192.168.217.21:2379 --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem  member list -w table
+------------------+---------+--------+-----------------------------+-----------------------------+------------+
|        ID        | STATUS  |  NAME  |         PEER ADDRS          |        CLIENT ADDRS         | IS LEARNER |
+------------------+---------+--------+-----------------------------+-----------------------------+------------+
|  97c1c1003e0d4bf | started | etcd-1 | https://192.168.217.19:2380 | https://192.168.217.19:2379 |      false |
| ef2fee107aafca91 | started | etcd-2 | https://192.168.217.20:2380 | https://192.168.217.20:2379 |      false |
| f5b8cb45a0dcf520 | started | etcd-3 | https://192.168.217.21:2380 | https://192.168.217.21:2379 |      false |
+------------------+---------+--------+-----------------------------+-----------------------------+------------+
[root@node2 ~]# etcd_search member list -w table
+------------------+---------+--------+-----------------------------+-----------------------------+------------+
|        ID        | STATUS  |  NAME  |         PEER ADDRS          |        CLIENT ADDRS         | IS LEARNER |
+------------------+---------+--------+-----------------------------+-----------------------------+------------+
|  97c1c1003e0d4bf | started | etcd-1 | https://192.168.217.19:2380 | https://192.168.217.19:2379 |      false |
| ef2fee107aafca91 | started | etcd-2 | https://192.168.217.20:2380 | https://192.168.217.20:2379 |      false |
| f5b8cb45a0dcf520 | started | etcd-3 | https://192.168.217.21:2380 | https://192.168.217.21:2379 |      false |
+------------------+---------+--------+-----------------------------+-----------------------------+------------+

三,kubernetes集群正式部署:


config配置文件形式初始化集群(在19服务器上执行):

需要更改的地方:

advertiseAddress: 192.168.217.19  修改成你自己的要作为master节点的IP地址

name:master   修改成你自己要作为master节点的主机名

hostnameOverride: "k8s-master" 修改成你自己要作为master节点的hosts文件内定义的主机名

dns: {} 这里表示使用默认也就是coredns,如果想显式定义可修改为:

1. dns:
2. type:coreDNS

有多少etcd节点就写多少个,一样的格式,etcd的证书路径后面处理:

    - https://192.168.217.19:2379
    - https://192.168.217.20:2379
    - https://192.168.217.21:2379
    caFile: /etc/kubernetes/pki/etcd/ca.pem
    certFile: /etc/kubernetes/pki/etcd/apiserver-etcd-client.pem
    keyFile: /etc/kubernetes/pki/etcd/apiserver-etcd-client-key.pem
[root@master ~]# ls -al /opt/etcd/ssl/
total 16
drwxr-xr-x 2 root root   78 Oct 21 15:21 .
drwxr-xr-x 5 root root   39 Oct 21 15:21 ..
-rw-r--r-- 1 root root 1675 Oct 21 15:21 ca-key.pem
-rw-r--r-- 1 root root 1265 Oct 21 15:21 ca.pem
-rw-r--r-- 1 root root 1679 Oct 21 15:21 server-key.pem
-rw-r--r-- 1 root root 1338 Oct 21 15:21 server.pem


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
存储 关系型数据库 分布式数据库
|
存储 Kubernetes 开发工具
使用ArgoCD管理Kubernetes部署指南
ArgoCD 是一款基于 Kubernetes 的声明式 GitOps 持续交付工具,通过自动同步 Git 存储库中的配置与 Kubernetes 集群状态,确保一致性与可靠性。它支持实时同步、声明式设置、自动修复和丰富的用户界面,极大简化了复杂应用的部署管理。结合 Helm Charts,ArgoCD 提供模块化、可重用的部署流程,显著减少人工开销和配置错误。对于云原生企业,ArgoCD 能优化部署策略,提升效率与安全性,是实现自动化与一致性的理想选择。
1206 0
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
1468 33
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
1033 19
|
存储 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:高可用-无感切换篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,单位成本仅0.8元人民币。PolarDB通过VotingDisk实现秒级故障切换,RPO=0,提供高可用性。PolarDB还推出国产轻量版,兼具高性能与低成本,满足多样化需求。
|
存储 测试技术 对象存储
使用容器服务ACK快速部署QwQ-32B模型并实现推理智能路由
阿里云最新发布的QwQ-32B模型,通过强化学习大幅度提升了模型推理能力。QwQ-32B模型拥有320亿参数,其性能可以与DeepSeek-R1 671B媲美。
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
1028 12
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
684 10
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
1043 5

推荐镜像

更多