首页 程序笔记 如何在 Ubuntu 24.04 上安装 Kubernetes(完整步骤)

如何在 Ubuntu 24.04 上安装 Kubernetes(完整步骤)

您对如何在 Ubuntu 24.04 (Noble Numbat) Linux 系统上安装 Kubernetes 感兴趣吗? Kubernetes 是一个开源容器编排系统,它彻底改变了服务的部署、管理和扩展方式。它提供了一个标准化平台,开发人员和系统管理员可以在其中管理容器。开发人员可以利用 Kubernetes API 构建通过 CI/CD、无服务器计算和服务网格实现现代化的创新应用程序。

在 Kubernetes 中,集群是一组协同工作的虚拟机或物理服务器,提供一个完整的容器平台,您可以在其中运行工作负载。它实现容器化应用程序的部署自动化、自动扩展和管理。

1.Kubernetes组件

以下是 Kubernetes 关键组件的细分。

  • 控制平面:Kubernetes集群的核心是控制平面。这可以管理整个集群状态和所有工作节点。它包含 API 服务器(集群的入口点)、将工作负载分配给集群中节点的调度程序、管理整个集群状态的控制器以及 etcd 键值数据存储。
  • 工作节点:这些是将运行容器化应用程序的操作系统(计划在其中运行 Pod)。在每个节点上运行的 Kubelet 服务是 Pod 生命周期管理的大脑。

为了让您的应用程序在 kubernetes 中运行,必须将其打包在容器中。容器是一个轻量级应用程序,捆绑了所有依赖项和库。与虚拟机相比,它们是可移植的,因为它们包含运行应用程序所需的一切。容器共享主机系统的底层操作系统,提供更好的效率。

2. 环境准备

本指南中使用的实验室环境将具有以下设置。

OS Server IP Server Hostname Server Role
Ubuntu 24.04 192.168.1.201 k8smaster.computingforgeeks.com Control Plane
Ubuntu 24.04 192.168.1.205 k8snode01.computingforgeeks.com Worker node
Ubuntu 24.04 192.168.1.206 k8snode02.computingforgeeks.com Worker node

登录到您环境中的每台服务器并设置正确的主机名。您还可以将记录添加到 DNS 服务器或使用 /etc/hosts 文件。

# Master Node
sudo hostnamectl set-hostname k8smaster.computingforgeeks.com

# Worker Node
sudo hostnamectl set-hostname k8snode01.computingforgeeks.com

将此处的值替换为您正确的环境设置。完成后注销以使新主机名生效。

logout

3.安装Kubernetes组件

我们在公司 Github 帐户 CloudSpinx 下创建了 Ansible Playbook。该剧本将在节点上自动执行以下操作:

  • 更新系统上的软件包并安装依赖项
  • 配置时区
  • 配置NTP时间同步
  • 禁用交换
  • 加载所需的内核模块
  • 配置sysctl参数
  • 在每个节点上配置 /etc/hosts 文件。但您必须手动设置正确的主机名(FQDN)(首选)。
  • 使用 Mirantis cri-dockerd 安装和配置容器运行时 – CRI-O、Containerd 或 Docker

在您的工作站中安装 Ansible

您需要选择将执行 ansible playbook 的本地计算机。这可以是 macOS、Linux 或 Windows 操作系统。您可以使用集群节点之一作为工作站来运行 ansible 执行。

在您的工作站中安装 Ansible。

### On a system with Python3 ###
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py --user
python3 -m pip install ansible --user

### On a system with Python2 ###
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py --user
python -m pip install ansible --user

macOS 用户可以使用 brew 安装 ansible

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install ansible

通过检查 ansible 的版本来验证安装。

$ ansible --version
ansible --version
ansible [core 2.16.0]
  config file = None
  configured module search path = ['/Users/jkmutai/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/Cellar/ansible/9.0.1/libexec/lib/python3.12/site-packages/ansible
  ansible collection location = /Users/jkmutai/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.12.0 (main, Oct  2 2023, 12:03:24) [Clang 15.0.0 (clang-1500.0.40.1)] (/usr/local/Cellar/ansible/9.0.1/libexec/bin/python)
  jinja version = 3.1.2
  libyaml = True

更新工作站计算机中的 /etc/hosts 文件,并将主机名映射到集群节点的 IP 地址。

$ sudo vim /etc/hosts
192.168.1.201  k8smaster
192.168.1.205  k8snode01
192.168.1.206  k8snode02

如果您还没有 SSH 密钥,请生成该密钥。

ssh-keygen -t rsa -b 4096 -N ''

将 SSH 密钥复制到所有 Kubernetes 集群节点。

ssh-copy-id  root@k8smaster
ssh-copy-id  root@k8snode01
ssh-copy-id  root@k8snode02

准备安装k8s的集群节点

将 git 存储库克隆到您的工作站计算机:

git clone https://github.com/cloudspinx/k8s-bootstrap.git

将当前工作目录更改为 k8s-pre-bootstrap 文件夹。

cd k8s-bootstrap

使用 Kubernetes 集群节点更新清单文件。例子;

$ vim hosts
# We are using mappings we did on the /etc/hosts file
[k8snodes]
k8smaster
k8snode01
k8snode02

接下来我们更新 playbook 文件中的一些关键变量;

  • Kubernetes 版本:k8s_version
  • 您所在位置的时区:时区
  • 要使用的 Kubernetes CNI:k8s_cni
  • 容器运行时:container_runtime
  • 吊舱网络
$ vim  k8s-prep.yml
---
- name: Prepare Kubernetes Nodes for Cluster bootstrapping
  hosts: k8snodes
  become: yes
  become_method: sudo
  #gather_facts: no
  vars:
    k8s_version: "1.29"                                  # Kubernetes version to be installed
    timezone: "Africa/Nairobi"                           # Timezone to set on all nodes
    k8s_cni: calico                                      # calico, flannel
    container_runtime: cri-o                             # docker, cri-o, containerd
    pod_network_cidr: "172.18.0.0/16"                    # pod subnet if using cri-o runtime
    configure_firewalld: false                           # true / false (keep it false, k8s>1.19 have issues with firewalld)
    # Docker proxy support
    setup_proxy: false                                   # Set to true to configure proxy
    proxy_server: "proxy.example.com:8080"               # Proxy server address and port
    docker_proxy_exclude: "localhost,127.0.0.1"          # Adresses to exclude from proxy
  roles:
    - kubernetes-bootstrap

将您的私钥身份添加到 OpenSSH 身份验证代理

eval `ssh-agent -s` && ssh-add

更新所有集群节点的清单列表。

$ vim hosts
[k8snodes]
k8smaster
k8snode01
k8snode02

准备好所有集群节点(控制平面和工作节点)时执行剧本。

ansible-playbook -i hosts k8s-prep.yml

某节点执行测试截图:

4.创建Kubernetes集群

现在所有软件包都已安装并完成配置,我们应该设置在主节点上创建 kubernetes 控制平面。用于此目的的工具是 kubeadm。 Kubeadm 将自动执行具有功能性控制平面组件所需的集群设置任务。

我们将运行的命令是 kubeadm init。这会配置控制平面组件,例如 API 服务器、控制器管理器和调度程序。

登录到您的第一个控制平面节点。

ssh user@k8smaster

检查可与 kubeadm init 命令一起使用的命令选项。

kubeadm init --help

单节点控制平面

对于单个控制平面服务器,使用以下命令初始化集群。

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

如果主机上有多个 CRI,则需要在 kubeadm 配置文件中设置“criSocket”字段:

  • 容器:unix:///var/run/containerd/containerd.sock
  • CRI-O:unix:///var/run/crio/crio.sock
  • Docker:unix:///var/run/cri-dockerd.sock

CRI-O 示例:

sudo kubeadm init --pod-network-cidr=172.18.0.0/16 --cri-socket=unix:///var/run/crio/crio.sock

多个控制平面节点

如果您打算添加多个控制平面服务器,则需要 ControlPlaneEndpoint 的负载均衡器 IP。

kubeadm init \
  --pod-network-cidr=172.18.0.0/16 \
  --cri-socket=unix://var/run/crio/crio.sock \
  --upload-certs \
  --control-plane-endpoint=k8sapi.example.com \

其中k8sapi.example.com有一个A记录到负载均衡器IP,所有控制平面节点作为后端。

等待安装成功消息。

...
[mark-control-plane] Marking the node ubuntu-2404-server as control-plane by adding the taints [node-role.kubernetes.io/control-plane:NoSchedule]
[bootstrap-token] Using token: qgvgrr.u8w9e5lrf294kmvi
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] Configured RBAC rules to allow Node Bootstrap tokens to get nodes
[bootstrap-token] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] Configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.1.201:6443 --token qgvgrr.u8w9e5lrf294kmvi \
	--discovery-token-ca-cert-hash sha256:4c3a99418e3cd40cafe8858306657205f97b1d56ed1e57d729be10a0d2d0d431

从控制平面节点配置集群访问。

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

通过列出集群中的节点来检查安装是否成功。

$ kubectl get nodes
NAME                              STATUS   ROLES           AGE     VERSION
k8smaster.computingforgeeks.com   Ready    control-plane   3m1s    v1.29.4

5. 将Worker节点添加到集群中

如果您没有在第 3 步中执行此操作,则必须针对节点运行 playbook 来准备它。确保在清单文件 hosts 中添加工作节点。

ansible-playbook -i hosts k8s-prep.yml

集群测试正常后,是时候添加运行容器化应用程序的工作节点了。我们可以使用 kubeadm token create --print-join-command 命令生成要在工作节点上运行的集群加入命令。

如果您有多个控制平面节点,请登录到其中一个控制平面节点并运行以下命令:

kubeadm token create --print-join-command

以下是您刚刚执行的命令的解释:

  • token create:该子命令用于创建引导令牌,用于加入 kubernetes 集群中的新工作节点。
  • --print-join-command:通过使用此标志,kubeadm 将打印将工作节点加入集群的完整命令

请注意,生成的引导命令是短暂的(默认持续24小时)。如果过期了,您需要生成新的。

我的控制平面机器的示例连接命令生成输出。

$ kubeadm token create --print-join-command
kubeadm join 192.168.1.201:6443 --token 72n5yk.7khhkaav311irike --discovery-token-ca-cert-hash sha256:4c3a99418e3cd40cafe8858306657205f97b1d56ed1e57d729be10a0d2d0d431

复制打印的整个命令,然后登录到工作节点之一,然后

kubeadm join 192.168.1.201:6443 --token 72n5yk.7khhkaav311irike --discovery-token-ca-cert-hash sha256:4c3a99418e3cd40cafe8858306657205f97b1d56ed1e57d729be10a0d2d0d431

在哪里;

  • kubeadm join:将工作节点加入集群的命令。
  • 192.168.1.100:6443:控制平面节点上API服务器的IP地址和端口号。
  • –token 72n5yk.7khhkaav311irike:在控制平面上生成引导令牌,供工作节点加入集群。
  • –discovery-token-ca-cert-hash 是在集群节点之间提供安全通信的证书颁发机构 (CA) 证书的哈希值。

这是在我的工作节点中运行命令的输出。

从控制平面机器列出集群中的节点。

$ kubectl get nodes
NAME                              STATUS   ROLES           AGE     VERSION
k8snode01.computingforgeeks.com   Ready    <none>          24s     v1.29.4
k8smaster.computingforgeeks.com   Ready    control-plane   6h49m   v1.29.4

您可以考虑下一个集群配置。

  • 安装 Kubernetes 仪表板
  • 在 Kubernetes 上配置 Prometheus 和 Grafana
  • 在 Kubernetes 上安装 Nginx 入口控制器
  • 安装和配置 Traefik 入口控制器
  • 将 NFS 配置为 Kubernetes 持久卷存储
  • 在 Kubernetes 集群上设置 Rook Ceph 存储
  • 在 Kubernetes 集群上安装 MetalLB 负载均衡器
  • 购买 Kubernetes 学习书籍

4

站心网

您对如何在 Ubuntu 24.04 (Noble Numbat) Linux 系统上安装 Kubernetes 感兴趣吗? Kubernetes 是一个开源..

为您推荐

ASP.NET如何将Views文件夹从项目分离

将 Views 文件夹从 ASP.NET 项目中分离是一个常见需求,比如为了实现模块化或分层架构。以下是实现此功能的完整步骤,从项目中分离 Views 文件夹,将其移到另一个独立的文件夹或项目中,并确保视图渲染仍然正常。1. ..

如何让AI写出Google认可的文章?

让 AI 写出 Google 认可的文章,核心在于满足 Google 的搜索排名算法要求。这些要求通常围绕以下几个关键点展开:内容质量、用户体验 和 SEO 优化。以下是详细指导:一、内容质量确保文章原创且有价值避免抄袭:Goog..

最新CentOS7安装搭建shadowsocks服务端+客户端使用图文教程

使用的CentOS版本是7.9,其他版本也可以。超级推荐的是搭建shadowsocks服务端,安装配置都很简单,几分钟就搞定,客户端支持PC移动端,下面是安装shadowsocks的过程,只要复制粘贴命令就行了,文件夹路径都不需要改..

如何从.NET Framework迁移到.NET Core或.NET 6/7?

从 .NET Framework 迁移到 .NET Core 或 .NET 6/7 是一个提升性能和跨平台能力的关键过程。以下是迁移的主要步骤和注意事项:迁移步骤1. 评估当前项目依赖项检查:确保所有第三方库和NuGet包都有与 .NET Core/.NET 6..

如何优化ASP.NET Core应用的性能?

优化ASP.NET Core应用性能需要从代码、数据库、配置、服务器和部署等多个层面进行综合考虑。以下是一些优化ASP.NET Core应用性能的关键方法和技巧:1. 代码级优化使用异步编程:避免阻塞线程,通过async和await处理I..

在Docker、Kubernetes环境下部署.NET应用的最佳实践

在 Docker 和 Kubernetes 环境中部署 .NET 应用是现代云原生开发的重要实践之一。以下是一些经过验证的最佳实践,涵盖 Docker 镜像优化、Kubernetes 部署配置和整体架构建议。1. Docker 镜像构建的最佳实践1.1 使用..

sourcetree安装跳过注册方法

SourceTree下载提取码: ni9m 需翻墙或者破解注册当前只有Win的版本,Mac自行百度很多人用git命令行不熟练,那么可以尝试使用sourcetree进行操作。然鹅~~sourcetree又一个比较严肃的问题就是,很多人不会跳过注册或者..

chrome 开发者工具如何查看元素:hover时的样式

在 Chrome 开发者工具中查看元素的 :hover 样式,可以通过以下步骤实现:打开开发者工具:右键点击页面中的元素,然后选择“检查(Inspect)”或按下 F12 或 Ctrl + Shift + I (Windows) / Cmd + Option +..

如何防止web应用DOS攻击?

防止web应用DOS攻击的最好的方法是什么? 如何防止web应用DOS攻击? 与所有的拒绝服务(DOS)攻击相关的一件事是他们都不可能避免。最好的方法是把重点放在减少影响DOS攻击的方法上。如果你有一个网络,黑客想要玩一玩..

数据库SQL Server2014和SQL Server2019的区别和如何选择?

SQL Server 2014和SQL Server 2019是微软公司发布的两个版本的数据库管理系统,它们在性能、安全性以及可扩展性等方面各有特点。在选择这两个数据库版本时,需要根据系统需求、预算状况以及技术团队的熟悉程度等因素..

MySQL如何建数据库

MySQL是一款非常流行的关系型数据库管理系统。无论是在企业还是个人项目中,都经常使用MySQL数据库。在使用MySQL之前,需要先创建一个数据库。本文将介绍如何建立MySQL数据库。一、安装MySQL在开始建立MySQL数据库之..

jwt是什么?.NET Core API如何使用JwtBearer验证

JWT是JSON Web Token的缩写,是一种开放标准(RFC 7519),用于在网络上以安全和可靠的方式传输信息。它是一种被广泛使用的跨域身份验证解决方案,可以将用户信息、访问权限等加密后存储在Token中,然后通过网络传输..

CentOS7部署发布.NET Core网站Ngnix安装配置图文教程

Linux服务器部署.NET Core网站运行速度更快,最近打算把原来windows server上的网站迁到linux的云服务器上。 顺便记录一下CentOS7安装.NET运行环境,安装和配置Ngnix的过程。首先安装.NET运行时sudorpm-Uvhhttps://p..

什么是微服务架构?它与单体应用程序架构有什么区别?如何在.NET中实现微服务架构?

微服务架构是一种软件架构风格,通过将应用程序拆分为一组小型、自治的服务来构建应用程序。每个服务都专注于解决特定的业务功能,并通过轻量级的通信机制进行交互。这些服务可以独立开发、部署和扩展,可以使用不同..

winform如何隐藏边框和标题栏

在WinForms中,可以通过以下步骤来隐藏窗体的边框和标题栏:打开WinForms应用程序的窗体设计器。选择窗体控件,然后在属性窗口中找到FormBorderStyle属性。将FormBorderStyle属性设置为None,以指示窗体不显示边框。..

IIS使用Certify安装Let's Encrypt免费SSL证书

域名疑似被流量劫持,不仅被腾讯网址安全中心检测成危险网站,还间歇性出现访问域名被302重定向到Localhost。于是决定响应百度站长平台的号召,进行HTTPS改造。不用担心HTTPS后的SEO问题,百度站长平台官方已经表态..

Simpla Admin完整文件无错版下载

Simpla Admin是一个外国的钢琴黑的后台模版,有完整的模版页面。这个模版的名字就叫Simpla Admin网上现在各个网站下载到的Simpla Admin都是缺少文件的,其中两个Js引用会报错,并且缺少两个图片文件加载失败。本站修..

程序员如何量化炒股?原理是什么?

作为程序员,可以运用编程技能和量化分析来帮助量化炒股。量化炒股有哪些步骤和方法?收集数据:需要收集有关股票市场的数据。可以从各种来源获取这些数据,如Yahoo财经、谷歌财经、股票交易所等。可以使用Python等..

如何让Google谷歌搜索引擎找到并收录网站

Google谷歌会使用大量计算机来抓取网络上数十亿的页面, 这个名为 Googlebot 的抓取工具基本上从以前抓取生成的网页 URL 列表开始,然后使用 Google Search Console 中提供的站点地图数据扩充这些页面。 在抓取过程..

如何把网站提交到Google谷歌搜索引擎google search console收录

发布新的网站后,它并不会立即被搜索引擎收录。为了让网站出现在搜索结果中,Google 需要“抓取”您的内容并“编制索引”。 这会在数天或数周内自动发生,但如果您是网站所有者,则可以在Google search console手动..

发表回复

返回顶部

微信分享

微信分享二维码

扫描二维码分享到微信或朋友圈

链接已复制