paint-brush
使用 Kubeadm 设置和管理 Kubernetes 集群经过@humalect
2,119 讀數
2,119 讀數

使用 Kubeadm 设置和管理 Kubernetes 集群

经过 Humalect Inc11m2023/08/09
Read on Terminal Reader

太長; 讀書

本 Kubeadm 教程涵盖了使用 Kubeadm 命令创建和管理 Kubernetes 集群的基础知识。它解释了自托管 Kubernetes、优点和缺点,然后深入探讨了 Kubeadm 的目的。它提供了示例并详细介绍了最常见的 20 个 Kubeadm 命令,包括初始化控制平面、加入工作节点、重置集群、升级版本和管理组件。本教程还概述了使用 Kubeadm 创建 Kubernetes 集群、处理集群组件,并强调了最佳实践,例如使用 Kubeadm 自动扩展生产集群、定期备份 etcd 以及有效监控节点。
featured image - 使用 Kubeadm 设置和管理 Kubernetes 集群
Humalect Inc HackerNoon profile picture
0-item
1-item

在本 Kubeadm 教程中,我们将探讨您需要了解的有关 Kubeadm 命令的所有信息,以及如何使用它们在Kubernetes (K8s) 中创建集群和管理集群组件。

您不仅将学习如何使用 Kubeadm 创建自己的 Kubernetes 集群,还将掌握管理集群组件的艺术,并发现 Kubeadm 的最佳实践。


加入我们进入 Kubeadm 世界的激动人心的旅程,在这里您将释放轻松编排容器的能力。


让我们一起潜入 Kubeadm 专家吧!在深入了解kubeadm之前,我们先来了解一下自托管 Kubernetes (K8s) 到底是什么?


内容概述

  • 什么是自托管 Kubernetes? - 优点和缺点
  • 什么是 Kubeadm?
  • Kubeadm 示例
  • 前 20 个最常见的 Kubeadm 命令
  • 如何使用 Kubeadm 创建 Kubernetes 集群
  • 如何使用 Kubeadm 管理集群组件
  • Kubeadm 最佳实践


什么是自托管 Kubernetes? - 优点和缺点

自托管 Kubernetes,也称为“裸机”或“本地”Kubernetes 部署,是指直接在物理机或虚拟机上运行 Kubernetes,而不依赖于云提供商提供的托管 Kubernetes 服务(例如 AWS 的 EKS) )。


以下是自托管 Kubernetes 的一些优点和缺点:


自托管 Kubernetes 的优点

1. 完全控制和定制

通过自托管 Kubernetes,您可以完全控制集群配置、网络和基础设施。这允许您根据您的特定要求和基础设施功能自定义和优化集群。

2. 成本效益

与使用经常产生额外费用的托管 Kubernetes 服务相比,自托管 Kubernetes 更具成本效益,尤其是对于长期部署。自托管允许您利用现有硬件资源并避免托管服务的管理费用。 (并节省大量金钱)

3. 安全与合规性

自托管 Kubernetes 使您可以直接控制安全措施,例如网络策略、加密、访问控制和合规性要求。这使您能够根据组织的需求和监管标准实施最佳的 Kubernetes 安全实践。 (log4j,敲响警钟吗?)

4. 资源分配

自托管 Kubernetes 允许您将资源专门分配给您的集群,而无需与其他租户共享。这可以实现更好的资源利用率,并避免共享环境中的资源争用可能引起的潜在性能问题。


自托管 Kubernetes 的缺点

1. 基础设施管理

自托管 Kubernetes 需要管理和维护底层基础设施的专业知识。


您负责供应、配置和监控集群的服务器、网络、存储和其他组件。这可能非常耗时,并且需要专门的资源和额外的招聘。

2. 可扩展性和弹性

与提供自动扩展功能的托管服务相比,扩展自托管 Kubernetes 集群可能更加复杂。


您需要提前规划和调配资源来处理峰值负载,并且添加或删除节点可能需要手动干预。

3. 操作复杂性

自托管 Kubernetes 引入了额外的操作复杂性,例如管理升级、补丁、备份和高可用性。这些任务需要仔细规划、测试和协调,以确保对集群和应用程序的干扰最小化,否则会增加生产停机时间。


什么是 Kubeadm?

Kubeadm 是一个命令行工具,可以简化设置和管理 Kubernetes 集群的过程,使技术社区成员更轻松地深入容器编排的世界。


kubeadm视为您值得信赖的助手,负责处理集群设置的具体细节,让您能够专注于大局。


它可以自动执行复杂的任务,例如配置基本组件、生成证书以及确保您的集群遵循最佳实践。


Kubeadm 示例

让我们看一些示例和命令,以更好地理解kubeadm工作原理。

1. 初始化控制平面

示例命令 #1:` kubeadm init `

下面介绍如何使用上述命令。

kubeadm init --pod-network-cidr=192.168.0.0/16


该命令初始化主节点上的控制平面。它生成必要的证书,设置 API 服务器、etcd 和其他重要组件。


` --pod-network-cidr ` 标志指定集群中 pod 网络的 IP 地址范围。

2. 加入Worker节点

示例命令 #2:` kubeadm join `


kubeadm join <master-node-ip>:<master-node-port> --token <token> --discovery-token-ca-cert-hash <hash>


此命令将工作节点加入集群。您需要提供主节点的 IP 和端口,以及令牌和发现令牌 CA 证书哈希,这些可以在控制平面初始化期间获取。

3. 重置集群

命令:` kubeadm reset `


kubeadm reset --force


此命令会重置集群,删除所有已安装的组件并将节点返回到 Kubernetes 之前的状态。 ` --force`标志确保彻底重置。

4、升级Kubernetes版本

命令:` kubeadm upgrade `


以下是如何使用上述kubeadm命令。

kubeadm upgrade plan


此命令可帮助您升级 Kubernetes 版本。它检查可用的升级并提供升级控制平面组件的计划。


前 20 个最常见的 Kubeadm 命令

以下是常用 kubeadm 命令的列表,后面是相关示例。

1.kubeadm初始化

kubeadm init --pod-network-cidr=192.168.0.0/16


在上面的示例中,该命令初始化主节点上的控制平面,生成证书并设置必要的组件。 ` --pod-network-cidr ` 标志指定 pod 网络 IP 地址范围。

2.kubeadm加入

kubeadm join <master-node-ip>:<master-node-port> --token <token> --discovery-token-ca-cert-hash <hash>


上述命令通过使用令牌和发现令牌 CA 证书哈希连接到指定的主节点,将工作节点加入集群。

3.kubeadm重置

kubeadm reset --force


上述命令会重置节点,删除所有已安装的 Kubernetes 组件并将其返回到 Kubernetes 之前的状态。 ` --force`标志确保彻底重置。

4.kubeadm升级

kubeadm upgrade plan


上述命令提供升级计划,检查控制平面组件的可用升级。

5.kubeadm 代币

kubeadm token create


此 kubeadm 命令管理用于将节点加入集群的身份验证令牌。此示例生成一个新令牌。

6.kubeadm配置

kubeadm config print init-defaults


上述命令管理 kubeadm 配置文件。此示例打印集群初始化的默认配置。

7.kubeadm版本

kubeadm version


上面的命令打印 kubeadm 的版本。

8. kubeadm 配置镜像

kubeadm config images list


使用上述命令打印当前 Kubernetes 版本所需的镜像列表。

此命令可帮助您确定手动容器映像管理所需的容器映像。将 ` list`替换为 ` pull`以拉取配置映像。

9. kubeadm 令牌创建

kubeadm token create --print-join-command


上述命令生成一个新令牌,可用于将节点加入集群。 ` --print-join-command ` 标志显示要在工作节点上执行的连接命令。

10. kubeadm 代币列表

kubeadm token list


上面的命令列出了活动令牌及其关联的创建时间和到期时间。

11.kubeadm 令牌删除

kubeadm token delete <token_value>


使用上述命令删除特定令牌,使其无法用于节点连接。

12.kubeadm配置迁移

kubeadm config migrate --old-config kubeadm.conf --new-config kubeadm.yaml


上述命令将配置文件从旧版本迁移到新版本,实现配置的平滑升级。

13. kubeadm 证书


kubeadm certs check-expirationkubeadm certs certificate-key


上述命令检查控制平面组件使用的证书的过期状态,并为即将过期的证书提供警告。第二个命令生成密钥。

14.kubeadm初始化阶段

kubeadm init phase kubelet-start --config config.yaml


上面的命令从 InitConfiguration 文件创建一个带有 kubelet 标志的动态环境文件。

15. kubeadm加入阶段

kubeadm join phase control-plane-prepare


上述命令在工作节点加入控制平面期间执行特定阶段。此示例运行“控制平面准备”阶段,该阶段准备工作节点成为控制平面节点。

16. kubeadm kubeconfig

kubeadm kubeconfig user --client-name=foo --config=bar

使用上述命令使用 kubeadm 配置文件 bar 为名为foo的附加用户输出kubeconfig文件。

17.kubeadm重置阶段

kubeadm reset phase preflight


上述命令执行节点重置过程中的特定阶段。此示例运行“ preflight ”阶段,该阶段在删除 Kubernetes 组件之前执行预重置检查。

18.kubeadm升级计划

kubeadm upgrade plan


上述命令显示控制平面组件的升级计划,显示可用版本以及升级所需的任何操作。

19. kubeadm升级应用

kubeadm upgrade apply v1.22.2


使用上述命令将特定的 Kubernetes 版本应用到控制平面,将其组件升级到指定版本。

20.kubeadm升级节点

kubeadm upgrade node


此命令升级工作节点上的kubeletkube-proxy以匹配控制平面的版本。


如何使用 Kubeadm 创建 Kubernetes 集群

要使用kubeadm创建 Kubernetes 集群,您需要确保您的环境满足必要的先决条件。

以下是有关如何使用kubeadm创建 Kubernetes 集群的分步指南,包括先决条件、详细说明、示例和命令。

先决条件

  1. 两台或多台运行受支持的 Linux 发行版(例如 Ubuntu、CentOS 或 Red Hat Enterprise Linux)并安装了 Docker 的计算机。

  2. 建议每台机器 2 GiB 或更多 RAM;任何不足都会为您的软件留下有限的空间。

  3. 禁用所有计算机上的交换空间。

  4. 为每台计算机设置唯一的主机名、MAC 地址和 Product_uuid。

  5. 集群中的所有机器都具有完整的网络连接。您可以连接到公共或专用网络。

  6. 在防火墙中打开必要的端口(例如,6443、2379-2380、10250、10251、10252)。


第 1 步:安装 Docker 和 Kubernetes 工具

在所有计算机上,使用适用于您的 Linux 发行版的Docker 指南安装Docker

在所有机器上使用以下命令安装“ kubeadm ”、“ kubelet ”和“ kubectl ”:


sudo apt-get update && sudo apt-get install -y apt-transport-https curlcurl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.listsudo apt-get updatesudo apt-get install -y kubelet kubeadm kubectlsudo apt-mark hold kubelet kubeadm kubectl


步骤2:初始化Kubernetes控制平面

在所需的控制平面节点上,使用kubeadm init命令初始化集群:

sudo kubeadm init --pod-network-cidr=192.168.0.0/16


注意:如果您计划使用不同的 Pod 网络,请调整 ` --pod-network-cidr ` 标志。

初始化完成后,该命令将输出带有令牌和哈希的“ kubeadm join ”命令。确保复制此命令,因为稍后将使用它将工作节点加入集群。


步骤 3:为kubectl设置集群配置

在控制平面节点上,创建必要的目录并复制kubeconfig文件:


mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config


第 4 步:部署 Pod 网络插件

在控制平面节点上,部署 Pod 网络插件。例如,您可以使用 Calico:

kubectl apply -f https://docs.projectcalico.org/v3.21/manifests/calico.yaml


步骤5:加入集群中的Worker节点

在每个工作节点上,运行在控制平面初始化期间(从步骤 2 开始)生成的“ kubeadm join ”命令。该命令通常如下所示:

sudo kubeadm join <control_plane_IP>:6443 --token <token> --discovery-token-ca-cert-hash <hash>


步骤 6:验证集群

在控制平面节点上,使用kubectl检查集群的状态:

kubectl get nodes


恭喜!您已使用“ kubeadm ”成功创建了 Kubernetes 集群。您现在可以在集群上部署和管理应用程序。


如何使用kubeadm管理集群组件

要使用kubeadm管理集群组件,您可以使用各种命令来执行任务,例如升级集群、添加或删除节点以及管理控制平面。

这是有关如何使用kubeadm管理集群组件的分步指南,包括带有代码注释的详细命令。


步骤一:升级集群

检查控制平面节点上当前 Kubernetes 版本:

kubectl version --short


在所有节点上升级` kubeadm 、` kubelet和` kubectl以匹配所需的Kubernetes版本:

# Upgrade kubeadmsudo apt-get updatesudo apt-get install -y kubeadm=<desired_version># Upgrade kubelet and kubectlsudo apt-get updatesudo apt-get install -y kubelet=<desired_version> kubectl=<desired_version># Hold the packages to prevent automatic upgradessudo apt-mark hold kubeadm kubelet kubectl


在控制平面节点上,启动升级过程:

sudo kubeadm upgrade plansudo kubeadm upgrade apply <desired_version>

Upgrade the kubelet configuration on all nodes:

sudo kubeadm upgrade node


验证升级状态:

kubectl get nodeskubectl version --short


步骤2:添加工作节点

在控制平面节点上,生成新的kubeadm join命令:

sudo kubeadm token create --print-join-command


在工作节点上,运行kubeadm join命令将它们加入集群:

sudo kubeadm join <control_plane_IP>:6443 --token <token> --discovery-token-ca-cert-hash <hash>


验证新工作节点的状态:

kubectl get nodes


步骤 3:删除节点

排空要删除的节点:

kubectl drain <node_name> --ignore-daemonsets


在控制平面节点上,删除该节点:

sudo kubeadm reset


在控制平面节点上,从集群中删除该节点:

kubectl delete node <node_name>


步骤 4:管理控制平面组件

升级控制平面节点上的控制平面组件:

sudo apt-get update sudo apt-get install -y kubeadm=<desired_version> kubelet=<desired_version> kubectl=<desired_version> sudo kubeadm upgrade plan sudo kubeadm upgrade apply <desired_version> sudo systemctl restart kubelet


验证升级状态:

kubectl get nodes kubectl version --short

Drain the control plane node you want to remove:

kubectl drain <control_plane_node> --ignore-daemonsets


在控制平面节点上,使用以下kubeadm命令删除控制平面组件。

sudo kubeadm reset


在控制平面节点上,从集群中删除控制平面节点:

kubectl delete node <control_plane_node>


注意:使用kubeadm管理集群组件需要谨慎,因为它可能会影响集群的稳定性和可用性。确保您有备份计划并遵循官方 Kubernetes 文档,获取针对您的设置和要求的详细说明。


Kubeadm 最佳实践

当用于其预期目的时,Kubeadm 是一个出色的工具。为了使用正确的工具来完成工作并充分利用 kubeadm,请记住以下三个最佳实践。


仅将 kubeadm 用于需要自动缩放的生产集群

一般来说,kubeadm 不应该用于生产集群,因为它缺乏节点和集群自动缩放功能。这是因为节点自动缩放需要控制底层基础设施和硬件,而 kubeadm 将其委托给其他工具。


定期备份etcd

Kubeadm 默认情况下没有用于存储集群状态的多 etcd 集群。定期备份 etcd,以防出现问题。


跟踪机器/节点

Kubeadm 无法关闭未使用的机器。

因此,为了使用kubeadm优化 Kubernetes 集群的成本,您需要使用外部解决方案来跟踪工作节点及其资源利用率。




也发布在这里。


本文的主图是由HackerNoon 的 AI 图像生成器通过提示“容器”生成的