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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 云原生|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


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
Kubernetes 监控 Cloud Native
云原生时代下的应用开发与部署实践
【10月更文挑战第4天】在云原生的浪潮中,开发者和运维人员面临着新的挑战和机遇。本文将通过实际案例,展示如何在云平台上高效地开发、部署和管理应用,同时确保系统的可扩展性和高可用性。我们将深入探讨容器化技术、微服务架构以及持续集成/持续部署(CI/CD)流程的实施策略,旨在为读者提供一套完整的云原生解决方案框架。
|
29天前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
115 60
|
30天前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
181 62
|
9天前
|
监控 Cloud Native 持续交付
云原生技术深度解析:重塑现代应用开发与部署范式####
本文深入探讨了云原生技术的核心概念、关键技术组件及其在现代软件开发中的重要性。通过剖析容器化、微服务架构、持续集成/持续部署(CI/CD)等关键技术,本文旨在揭示云原生技术如何促进应用的敏捷性、可扩展性和高可用性,进而推动企业数字化转型进程。不同于传统摘要仅概述内容要点,本部分将融入具体案例分析,直观展示云原生技术在实际应用中的显著成效与挑战应对策略,为读者提供更加丰富、立体的理解视角。 ####
|
20天前
|
Kubernetes Cloud Native 持续交付
云原生技术:重塑现代应用开发与部署模式####
本文深入探讨了云原生技术的核心概念、发展历程及其在现代软件开发和部署中的关键作用。通过分析云原生架构的特点,如容器化、微服务、持续集成与持续部署(CI/CD),以及它如何促进应用的可伸缩性、灵活性和效率,本文旨在为读者提供一个关于云原生技术全面而深入的理解。此外,还将探讨实施云原生策略时面临的挑战及应对策略,帮助组织更好地把握数字化转型的机遇。 ####
|
3天前
|
监控 Cloud Native 微服务
云端漫步:探索云原生应用的构建与部署
【10月更文挑战第32天】在数字时代的浪潮中,云原生技术如同一艘航船,承载着企业的梦想驶向未知的海洋。本文将带你领略云原生应用的魅力,从基础概念到实战操作,我们将一步步揭开云原生的神秘面纱,体验它如何简化开发、加速部署,并提升系统的可扩展性与可靠性。让我们一起启航,探索云原生的世界!
|
26天前
|
Cloud Native 持续交付 云计算
云端新纪元:探索云原生技术的奥秘在当今数字化时代,云计算已成为推动企业创新和增长的关键动力。随着云平台的不断成熟,云原生技术应运而生,以其独特的优势引领着一场新的技术革命。本文将深入探讨云原生的核心概念、主要特点以及它如何改变现代软件开发和部署的方式,为您揭开云原生这一神秘面纱。
云原生是一种构建和运行应用程序的方法,充分利用了云平台的弹性、分布式本质以及声明式基础设施。本文将解析云原生的十二要素,微服务架构的优势,以及容器化、持续集成与持续部署(CI/CD)等核心技术的实践应用。通过深入浅出的方式,让读者理解云原生不仅是一种技术,更是一种文化和方法论,它正在重塑软件开发流程,提高资源利用率和应用系统的可扩展性与容错性。
|
28天前
|
NoSQL 关系型数据库 Redis
高可用和性能:基于ACK部署Dify的最佳实践
本文介绍了基于阿里云容器服务ACK,部署高可用、可伸缩且具备高SLA的生产可用的Dify服务的详细解决方案。
|
1月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
68 0
|
存储 运维 Kubernetes
阿里云数字新基建系列:云原生操作系统Kubernetes-第1章(4)
阿里云数字新基建系列包括5本书,题材涉及Kubernetes、混合云架构、云数据库、CDN原理与流媒体技术、云服务器运维(Windows),囊括了领先的云技术知识与阿里云技术团队独到的实践经验,是国内IT技术图书中又一套重磅作品! 本书是阿里云容器服务产品线上实践的技术沉淀,主要包括理论篇和实践篇两部分内容。理论篇注重理论介绍,核心是Kubernetes on Cloud,即着重介绍Kubernetes和阿里云产品的结合。实践篇是疑难问题的诊断案例,希望通过案例来和读者分享Kubernetes深度问题诊断......
阿里云数字新基建系列:云原生操作系统Kubernetes-第1章(4)