Kubernetes教程

Kubernetes安装

使用kubeadm安装Kubernetes

安装kubeadm

在安装Kubernetes之前,你需要准备一台兼容的Linux主机,并满足以下要求:

1、内存要求:每台机器需要至少2 GB的RAM,如果低于这个数字可能会影响应用程序的内存运行。

2、CPU要求:每台机器需要至少2个核心的CPU。

3、网络连接:所有集群中的机器都需要能够彼此相互连接,可以通过公网或内网连接。

4、唯一标识:节点之间的主机名、MAC地址和product_uuid必须是唯一的,不能有重复的。你可以使用命令ip link或ifconfig -a来获取网络接口的MAC地址,使用sudo cat /sys/class/dmi/id/product_uuid命令来校验product_uuid。请确保这些值在每个节点上都是唯一的。

5、开启端口:你需要开启机器上特定的端口才能正常使用Kubernetes,请参考相关文档了解具体的端口配置。

6、禁用交换分区:为了保证Kubernetes的正常工作,你需要禁用交换分区。可以使用命令sudo swapoff -a。

检查网络适配器

如果你的主机有多个网络适配器,并且默认路由无法访问Kubernetes组件,我们建议你提前添加IP路由规则,以确保Kubernetes集群可以通过相应的适配器进行连接。

要检查所需的端口是否开放,可以运行以下命令:

1、控制平面组件(API服务器、控制器管理器、调度器)通常使用6443、2379和2380端口。你可以使用telnet或nc命令检查这些端口是否能够连接。例如,telnet IP地址 6443将尝试连接到指定IP地址的6443端口。

2、kubelet进程默认使用10250端口进行节点之间的通信。你可以使用telnet或nc命令检查这个端口是否可达。

3、容器网络接口(CNI)插件可能会使用其他端口,具体取决于你所选择的插件。你可以查阅相关文档或配置文件来确定需要开放的端口。

根据你的需要和配置,确保这些端口可以正常访问和连接,以便Kubernetes集群的各个组件可以通信。

检查所需端口

启用这些必要的端口后才能使 Kubernetes 的各组件相互通信。 可以使用 netcat 之类的工具来检查端口是否启用,例如:nc 127.0.0.1 6443。使用的 Pod 网络插件也可能需要开启某些特定端口。

安装容器运行时

为了在 Pod 中运行容器,Kubernetes 使用 容器运行时(Container Runtime)。

默认情况下,Kubernetes 使用 容器运行时接口(Container Runtime Interface,CRI) 来与你所选择的容器运行时交互。

如果你不指定运行时,kubeadm 会自动尝试通过扫描已知的端点列表来检测已安装的容器运行时。

如果检测到有多个或者没有容器运行时,kubeadm 将抛出一个错误并要求你指定一个想要使用的运行时。

下面的包括被支持的操作系统的已知端点。

Linux:

containerd unix:///var/run/containerd/containerd.sock
CRI-O unix:///var/run/crio/crio.sock
Docker Engine(使用 cri-dockerd)unix:///var/run/cri-dockerd.sock

Windows:

containerd npipe:////./pipe/containerd-containerd
Docker Engine(使用 cri-dockerd) npipe:////./pipe/cri-dockerd

安装 kubeadm、kubelet 和 kubectl

你需要在每台机器上安装以下的软件包:

kubeadm:用来初始化集群的指令。

kubelet:在集群中的每个节点上用来启动 Pod 和容器等。

kubectl:用来与集群通信的命令行工具。

kubeadm 不能帮你安装或者管理 kubelet 或 kubectl, 所以你需要确保它们与通过 kubeadm 安装的控制平面的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。 然而,控制平面与 kubelet 之间可以存在一个次要版本的偏差,但 kubelet 的版本不可以超过 API 服务器的版本。 例如,1.7.0 版本的 kubelet 可以完全兼容 1.8.0 版本的 API 服务器,反之则不可以。

注意:

这些指南不包括系统升级时使用的所有 Kubernetes 程序包。这是因为 kubeadm 和 Kubernetes 有特殊的升级注意事项。

更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包:

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

下载 Google Cloud 公开签名秘钥:

curl -fsSL https://dl.k8s.io/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg

添加 Kubernetes apt 仓库:

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

说明:

在低于 Debian 12 和 Ubuntu 22.04 的发行版本中,/etc/apt/keyrings 默认不存在。 如有需要,你可以创建此目录,并将其设置为对所有人可读,但仅对管理员可写。

kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环。

配置 cgroup 驱动程序

容器运行时和 kubelet 都具有名字为 "cgroup driver" 的属性,该属性对于在 Linux 机器上管理 CGroups 而言非常重要。

警告:需要确保容器运行时和 kubelet 所使用的是相同的 cgroup 驱动,否则 kubelet 进程会失败。

使用 kubeadm 创建集群

  • kubeadm是一个非常方便的工具,用于在Linux操作系统上创建和配置最小化的Kubernetes集群。它提供了一种简单的方法来尝试Kubernetes或自动设置集群,并测试应用程序。
  • 使用kubeadm,你可以在各种机器上安装和部署Kubernetes,如笔记本电脑、云服务器或树莓派等。它可以集成到预配置系统中,如Ansible或Terraform。
  • 在开始之前,你需要准备好以下条件:
  • 一台或多台运行兼容deb/rpm的Linux操作系统的计算机,比如Ubuntu或CentOS。
  • 每台机器需要至少2GB的内存,否则应用程序的性能会受限制。
  • 控制平面节点的计算机需要至少2个CPU。
  • 所有计算机之间需要有完全的网络连接,可以使用公共网络或专用网络。
  • 你还需要准备与你想要部署的Kubernetes版本相对应的kubeadm工具。

注意:kubeadm的功能状态已经达到了一般可用性(GA),虽然还有一些子功能仍在积极开发中。随着工具的发展,创建集群的实现可能会有一些变化,但总体实现应该是相当稳定的。

如果你已经安装了kubeadm,执行 apt-get update && apt-get upgrade 或 yum update 以获取 kubeadm 的最新版本。升级时,kubelet 每隔几秒钟重新启动一次, 在 crashloop 状态中等待 kubeadm 发布指令。crashloop 状态是正常现象。 初始化控制平面后,kubelet 将正常运行。在准备容器镜像之前,首先需要确定是否需要离线创建集群。如果需要在离线节点上创建集群,可以使用Kubeadm提供的命令预拉取所需的镜像。你可以阅读关于离线运行Kubeadm的文档获取更多细节。同时,Kubeadm还支持指定自定义的镜像仓库。你可以阅读有关使用自定义镜像的文档获取更多细节。

在初始化控制平面节点之前,需要明确以下几点:

  1. 控制平面节点是运行控制平面组件的机器,包括etcd(集群数据库)和API服务器(用于与kubectl进行通信)。
  2. 如果你计划将单个控制平面的Kubeadm集群升级为高可用性集群,建议指定"--control-plane-endpoint"参数为所有控制平面节点设置共享端点。该端点可以是负载均衡器的DNS名称或IP地址。
  3. 选择一个Pod网络插件,并验证是否需要为"kubeadm init"传递参数。根据所选择的第三方网络插件,可能需要设置"--pod-network-cidr"的值。请参考安装Pod网络附加组件的文档。
  4. 如果你使用不同的容器运行时或在预配置的节点上安装了多个容器运行时,请为"kubeadm init"指定"--cri-socket"参数。这将帮助Kubeadm检测容器运行时。
  5. 默认情况下,Kubeadm使用与默认网关关联的网络接口设置控制平面节点API服务器的广播地址。如果要使用其他网络接口,请为"kubeadm init"设置"--apiserver-advertise-address=<ip-address>"参数。如果要部署使用IPv6地址的Kubernetes集群,则必须指定一个IPv6地址,例如"--apiserver-advertise-address=2001:db8::101"。

要初始化控制平面节点,请运行以下命令:

kubeadm init <args>

关于"apiserver-advertise-address"和"ControlPlaneEndpoint"的注意事项:

  • apiserver-advertise-address用于设置控制平面节点API服务器的广播地址,而--control-plane-endpoint则用于设置所有控制平面节点的共享端点。
  • control-plane-endpoint允许使用IP地址和可映射到IP地址的DNS名称。请与你的网络管理员联系,以评估相关映射解决方案。

以下是一个示例映射:

192.168.0.102 cluster-endpoint

其中,192.168.0.102是该节点的IP地址,cluster-endpoint是映射到该IP的自定义DNS名称。这样可以在kubeadm init时传递"--control-plane-endpoint=cluster-endpoint"参数,并在kubeadm join时传递相同的DNS名称。稍后,你可以修改cluster-endpoint以指向高可用性方案中负载均衡器的地址。

需要注意的是,Kubeadm不支持将没有"--control-plane-endpoint"参数的单个控制平面集群转换为高可用性集群。除了创建集群,kubeadm还支持其他功能,如启动引导令牌和集群升级。它还与更大范围的生态系统和安装工具集成,提供了构建模块。

使用 kOps 安装 Kubernetes

kOps是一个开源工具,主要用于自动化部署和操作Kubernetes集群。它为AWS(亚马逊网络服务)提供了一种简化的方式来创建、升级和管理生产级别的Kubernetes集群。

在准备开始之前,请按照以下步骤进行操作:

安装 kubectl:请根据你的操作系统,在支持的平台上安装 kubectl 工具,可以从 Kubernetes 官方网站下载适合你的版本。

安装 kops:kops 是一个命令行工具,它用于创建和管理 Kubernetes 集群。你可以从 kops 的 GitHub 页面下载适合你设备架构(64 位的 AMD64 或 Intel 64)的二进制文件。将二进制文件移动到一个可执行路径,并确保文件具有执行权限。

AWS 账户和 IAM 用户:确保你有一个有效的 AWS 账户,并拥有足够的权限来创建和管理 AWS 资源。接下来,你需要生成一个 IAM 用户并为其配置访问密钥。

使用kOps创建集群

1、定义集群规格:创建一个 YAML 配置文件来定义你的 Kubernetes 集群的规格。该文件应包含 VPC、子网、实例类型、区域、DNS 配置等信息。你可以根据需要进行自定义配置。

2、创建集群配置:使用 kOps 命令行工具创建集群配置。运行以下命令来生成配置文件:

kops create cluster --name=<your-cluster-name> --state=s3://<your-bucket-name>

这将在 S3 存储桶中创建一个存储状态的配置文件。确保替换 <your-cluster-name> 为你的集群名称,<your-bucket-name> 为你的 S3 存储桶名称。

3、编辑集群配置:使用 kOps 编辑器或任何文本编辑器打开生成的配置文件(位于 s3://<your-bucket-name>/<your-cluster-name>/cluster.yaml)。根据你的需求修改配置文件,例如增加或减少节点数、更改实例类型或区域等。

4、更新集群配置:更新集群配置以应用修改后的配置文件。运行以下命令:

kops update cluster --name=<your-cluster-name> --state=s3://<your-bucket-name> --yes

这将在 S3 存储桶中更新集群配置。

5、创建集群:运行以下命令来创建 Kubernetes 集群:

kops create cluster --name=<your-cluster-name> --state=s3://<your-bucket-name> --yes
这将根据你的配置文件在 AWS 上创建集群资源,包括实例、VPC 和子网等。

6、等待集群创建完成:集群创建过程可能需要一些时间,请耐心等待。你可以使用以下命令来检查集群创建的状态:

kops validate cluster --name=<your-cluster-name> --state=s3://<your-bucket-name>

当输出显示 "Your cluster <your-cluster-name> is ready" 时,表示集群已经创建成功。

现在你已经成功使用 kOps 在 AWS 上创建了一个 Kubernetes 集群。你可以使用 kubectl 命令与集群进行交互,并执行各种操作,如部署应用程序、管理服务等。记得根据需要进行适当的集群管理和维护工作,例如升级版本、调整节点数量等。

使用 Kubespray 安装 Kubernetes

Kubespray 是一个用于自动化部署和管理 Kubernetes 集群的开源工具。它可以在各种云平台(如 AWS、Azure、GCP)、虚拟化平台(如 VMware、OpenStack)以及裸金属服务器上部署 Kubernetes。

  • 自动化部署:Kubespray 使用 Ansible 自动化工具来执行大部分与 Kubernetes 安装和配置相关的任务。它提供了一个简单而强大的部署工具,可以自动安装和配置 Kubernetes,避免了手动操作的繁琐和错误。
  • 多云支持:Kubespray 支持在各种云平台上部署 Kubernetes,包括 AWS、Azure、Google Cloud Platform(GCP)、OpenStack 和 VMware 等。它还支持在裸机服务器上进行部署,并可以在混合云环境中轻松管理多个集群。
  • 灵活的配置选项:Kubespray 允许用户通过修改预定义的 Ansible 变量和配置文件来定制 Kubernetes 集群的部署。用户可以根据自己的需求调整节点数量、选择网络插件、配置容器运行时等。这使得用户可以根据不同的应用场景创建定制化的 Kubernetes 集群。
  • 高可用性:Kubespray 支持使用高可用模式部署 Kubernetes 集群,确保集群的稳定性和可靠性。它提供了多个可选组件和配置选项,如 etcd 备份和恢复、API Server 的负载均衡等,以实现容错、负载均衡和故障转移等功能。
  • 安全配置:Kubespray 提供了一些默认的安全配置,例如启用 TLS 加密、配置 RBAC(基于角色的访问控制)和审计策略等。同时,用户也可以根据需要自定义安全设置,以满足特定的安全要求。
  • 扩展性:Kubespray 集成了常见的 Kubernetes 组件和工具,如 kubectl、Helm、Prometheus 和 Grafana 等。它还支持插件和扩展,可以轻松地添加其他组件和定制化功能,以满足特定的需求。
  • 日志和监控:Kubespray 支持集成日志和监控系统,如 ELK、Prometheus 和 Grafana。这使得用户可以方便地收集、分析和可视化集群的日志和指标数据。

使用Kubespray创建集群

满足下层设施要求

按以下要求来配置服务器:

Kubernetes 的最低版本要求为 V1.22

在将运行 Ansible 命令的计算机上安装 Ansible v2.11(或更高版本)、Jinja 2.11(或更高版本)和 python-netaddr

目标服务器必须能够访问 Internet 才能拉取 Docker 镜像。否则, 需要其他配置(请参见离线环境)

目标服务器配置为允许 IPv4 转发

如果针对 Pod 和 Service 使用 IPv6,则目标服务器配置为允许 IPv6 转发

防火墙不是由 kubespray 管理的。你需要根据需求设置适当的规则策略。为了避免部署过程中出现问题,可以禁用防火墙。

如果从非 root 用户帐户运行 kubespray,则应在目标服务器中配置正确的特权升级方法并指定 ansible_become 标志命令参数 --become 或 -b

Kubespray 提供以下实用程序来帮助你设置环境:

为以下云驱动提供的 Terraform 脚本:

AWS
OpenStack
Equinix Metal

编写清单文件

设置服务器后,请创建一个 Ansible 的清单文件。 你可以手动执行此操作,也可以通过动态清单脚本执行此操作。

Kubespray 能够自定义部署的许多方面:

  • 选择部署模式:kubeadm 或非 kubeadm
  • CNI(网络)插件
  • DNS 配置
  • 控制平面的选择:本机/可执行文件或容器化
  • 组件版本
  • Calico 路由反射器
  • 组件运行时选项
  • Docker
  • containerd
  • CRI-O
  • 证书生成方式
  • 可以修改变量文件以进行 Kubespray 定制。 如果你刚刚开始使用 Kubespray,请考虑使用 Kubespray 默认设置来部署你的集群并探索 Kubernetes。

部署集群

接下来,部署你的集群:

使用 ansible-playbook 进行集群部署。

ansible-playbook -i your/inventory/inventory.ini cluster.yml -b -v \
--private-key=~/.ssh/private_key

大型部署(超过 100 个节点) 可能需要特定的调整, 以获得最佳效果。

验证部署

Kubespray 提供了一种使用 Netchecker 验证 Pod 间连接和 DNS 解析的方法。 Netchecker 确保 netchecker-agents Pod 可以解析 DNS 请求, 并在默认命名空间内对每个请求执行 ping 操作。 这些 Pod 模仿其他工作负载类似的行为,并用作集群运行状况指示器

广告合作
QQ群号:707632017

温馨提示:

1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com。(#改为@)

2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

目录