使用 kubeadm 部署 Kubernetes 集群(一)linux环境准备

本文涉及的产品
云防火墙,500元 1000GB
简介: 使用 kubeadm 部署 Kubernetes 集群(一)linux环境准备



kubeadm init 初始化 k8s 集群具体流程:

1、准备工作

在执行 kubeadm init 命令之前,需要先准备好以下工作:

1)、在每个节点上安装容器和 Kubernetes 组件,如 kubeadm、kubelet 和 kubectl。

2)、确保节点之间可以互相通信,并且能够通过 DNS 解析域名。

3)、配置节点的网络,使得节点之间可以通过 IP 地址互相通信。

2、检查主机名

kubeadm 会检查节点的主机名是否符合 DNS 命名规范,即主机名必须只包含小写字母、数字和

连字符,并且必须以字母或数字开头和结尾。

3、检查内核参数

kubeadm 会检查节点的内核参数是否符合 Kubernetes 的最佳实践,如:

1)禁用 swap 分区;

2)启用桥接流量;

3)启用 IP 转发;

4)禁用 SELinux

5)如果节点的内核参数不符合要求,kubeadm 将输出警告信息,并提供相应的解决方法。

4、检查依赖软件

kubeadm 会检查是否安装了必要的依赖软件,如 iptables、ipvs 等,并在需要时自动安装。

5、检查容器运行时

kubeadm 会检查容器运行时,如 containerd 是否已安装并运行。如果容器运行时未安装或未运

行,kubeadm 将输出错误信息。

6、生成证书和配置文件

kubeadm 会生成证书和配置文件,用于授权和加密 Kubernetes 集群的通信。这些文件包括:

1)CA 证书和私钥:用于签署和验证 Kubernetes 组件之间的通信;

2)API Server 证书和私钥:用于验证 API Server 的身份;

3)Kubernetes 服务账号和私钥:用于 Kubernetes 组件之间的认证;

4)kubeconfig 文件:用于配置 Kubernetes 组件的访问权限。

7、部署 etcd

kubeadm 会部署 etcd,用于存储 Kubernetes 集群的状态和元数据。etcd 是 Kubernetes 控

制面板的核心组件之一,用于保存 Kubernetes 的配置信息和状态信息。

8、部署控制面板组件

kubeadm 会部署 Kubernetes 控制面板组件,如 kube-apiserver、kube-controllermanager、kube-scheduler 等。这些组件是 Kubernetes 集群的核心组件,用于控制集集群的状态

和管理工作负载、服务发现等重要功能。

9、部署 kube-proxy、coredns

kubeadm 会部署 kubelet 和 kube-proxy、coredns

10、生成加入命令和配置文件

kubeadm 初始化 Kubernetes 集群成功后,将生成一个加入命令(join command),用于将

worker 节点加入集群。此外,kubeadm 还会生成默认的 Kubernetes 配置文件

/etc/kubernetes/admin.conf,用于配置 kubectl 命令行工具连接到 Kubernetes API 服务器。

-------------------------------------------------------

一、 初始化集群环境

准备三台 rocky8.8 操作系统的 linux 机器。每台机器配置:4VCPU/4G 内存/60G 硬盘

环境说明:

IP 主机名 角色 内存 cpu

192.168.1.63 xuegod63 master 4G 4vCPU

192.168.1.64 xuegod64 worker 4G 4vCPU

192.168.1.62 xuegod62 worker 4G 4vCPU

开始配置

1、配置静态 IP:每台机器的网络模式要一致,能互相通信,机器网卡名字也要统一。

2、永久关闭 selinux 三台都执行

[root@localhost ~]#

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#注意:修改 selinux 配置文件之后,重启机器,selinux 才能永久生效

[root@localhost~]#

getenforce

执行结果是 Disabled  

临时关闭

setenforce 0

注释:SELinux(Security-Enhanced Linux)是一种基于 Mandatory Access Control(MAC)的安
全模块,它可以在 Linux 系统中提供强制访问控制机制。通过 SELinux,系统管理员可以对系统中的各种对象(如文件、进程、网络端口等)进行更加精细的安全控制,提高系统的安全性。
在安装 k8s 时,关闭 SELinux 是因为默认情况下 SELinux 会阻止 Kubernetes 一些操作,如
kubelet 对容器文件的访问等。为了避免由于 SELinux 导致 Kubernetes 运行不正常,建议在安装
Kubernetes 之前关闭 SELinux。
如果启用了 SELinux,需要针对 Kubernetes 进行特定的 SELinux 配置,以确保 Kubernetes
正常工作。具体的操作如下:
安装 policycoreutils-python 工具:
yum install -y policycoreutils-python
为 kubelet、kube-proxy 和 container runtime 的进程添加 SELinux 策略。例如,为
kubelet 添加策略的命令为:
semanage fcontext -a -t container_runtime_exec_t /usr/local/bin/kubelet
重载 SELinux 策略:
restorecon -R /usr/local/bin/kubele

3.配置主机名

#在 192.168.1.63 上执行如下:
hostnamectl set-hostname xuegod63 && bash
#在 192.168.1.64 上执行如下:
hostnamectl set-hostname xuegod64 && bash
#在 192.168.1.62 上执行如下:
hostnamectl set-hostname xuegod62 && bash

4、配置 hosts 文件:

修改三台每台机器的/etc/hosts 文件,在内容最后增加如下三行:

echo '
192.168.1.63 xuegod63
192.168.1.64 xuegod64
192.168.1.62 xuegod62
' >> /etc/hosts

二、安装基础包

1、关闭所有主机 firewalld 防火墙 三台都执行

systemctl stop firewalld ; systemctl disable firewalld

2.安装基础包 三台都执行

yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo libaio-devel vim ncurses-devel autoconf automake  zlib-devel epel-release openssh-server socat conntrack telnet ipvsadm

3、配置主机之间无密码登录

[root@xuegod63 ~]# ssh-keygen #一路回车,不输入密码

把本地的 ssh 公钥文件安装到远程主机对应的账户

[root@xuegod63 ~]# ssh-copy-id xuegod63

[root@xuegod63 ~]# ssh-copy-id xuegod64

[root@xuegod63 ~]# ssh-copy-id xuegod62

同理:62和64执行

如果生产机器,防火墙开启,不能关,也可以,但是要放行一些端口:

如何在防火墙规则里放行端口:6443:Kubernetes API Server

2379、2380:etcd 服务

10250、10255:kubelet 服务

10257:kube-controller-manager 服务

10259:kube-scheduler 服务

30000-32767:在物理机映射的 NodePort 端口

179、473、4789、9099:Calico 服务端口

firewall-cmd --zone=public --add-port=6443/tcp --permanent

#--zone 指定了防火墙规则所属的区域,--add-port 指定了要开放的端口号和协议,--

permanent 表示在重启后也会保留这个规则。

4、关闭交换分区 swap 三台都执行

#临时关闭交换分区

swapoff -a

永久关闭:注释 swap 挂载 三台都执行

[root@xuegod63 ~]# vi /etc/fstab  #给 swap 这行开头加一下注释#

#/dev/mapper/rl-swap none swap defaults 0 0

交换分区(Swap)是为了在内存不足时,把部分内存的数据交换到硬盘上,以释放内存空间的一种机制。这样,即使物理内存不足,也可以保证系统运行的稳定性和正常性。

在安装 Kubernetes 时,需要禁用交换分区。这是因为 Kubernetes 在运行时需要使用大量的内存

和 CPU 资源,如果系统开始使用交换分区,会导致性能下降,严重影响 Kubernetes 的正常运行。因此,为了保证 Kubernetes 的性能和稳定性,建议在安装 Kubernetes 时禁用交换分区

5、修改内核参数:

三台都执行

[root@xuegod63 ~]#

modprobe br_netfilter

modprobe 是一个 Linux 命令,它用于动态地加载内核模块到 Linux 内核中。br_netfilter 是

Linux 内核模块之一,它提供了桥接网络设备和 Netfilter 之间的接口。Netfilter 是 Linux 内核中的一个框架,它可以在数据包通过网络协议栈时进行修改或过滤。

在 Kubernetes 中,br_netfilter 模块用于实现 Kubernetes 集群中的网络功能。通过加载

br_netfilter 模块,我们可以确保在 Kubernetes 集群中使用的 iptables 规则正确应用

[root@xuegod63 ~]#

cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf

1)net.bridge.bridge-nf-call-ip6tables: 当数据包经过网桥时,是否需要将 IPv6 数据包传递给

iptables 进行处理。将其设置为 1 表示启用。

2)net.bridge.bridge-nf-call-iptables: 当数据包经过网桥时,是否需要将 IPv4 数据包传递给

iptables 进行处理。将其设置为 1 表示启用。

3)net.ipv4.ip_forward: 是否允许主机转发网络包。将其设置为 1 表示启用。

这些参数是为了让 Linux 系统的网络功能可以更好地支持 Kubernetes 的网络组件(如

flannel、Calico 等),启用这些参数可以确保集群中的 Pod 能够正常通信和访问外部网络

三、配置安装 docker 和 containerd 的需要的阿里云 yum 源  

 1.配置   三台都执行

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

如果有提示的直接y

2、配置安装 k8s 命令行工具需要的阿里云的 yum 源

配置阿里云 Kubernetes yum 源

cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF

备注:

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/,

这是 Kubernetes 官方在阿里云上提供的 yum 仓库地址,使用这个地址可以从阿里云上下载和安装

Kubernetes 软件包。

四、配置时间同步 三台都执行

在 xuegod63 上执行如下:

开始安装 chrony 服务

[root@xuegod63 ~]# yum -y install chrony #如果没有该服务安装一下

[root@xuegod63 ~]# systemctl enable chronyd --now  #设置 chronyd 开机启动并立即启

动 chronyd 服务同步网络时间

编辑 chronyd 配置文件,使用中国的时间服务器同步时间,速度更快

        三台都加 添加阿里和腾讯时间同步源 配置文件 /etc/chrony.conf

cat >> /etc/chrony.conf <<EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp1.tencent.com iburst
server ntp2.tencent.com iburst
EOF

chrony 是网络时间协议(NTP)的另一种实现,与网络时间协议后台程序(ntpd)不同,它可以更快地且

更准确地同步系统时钟。

两个主要程序:chronyd 和 chronyc

chronyd:后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿

chronyc:命令行用户工具,用于监控性能并进行多样化的配置。它在 chronyd 实例控制的计算机

上工作服务 unit 文件: /usr/lib/systemd/system/chronyd.service

监听端口: 323/udp,123/udp

配置文件: /etc/chrony.conf

ntpdate 和 chrony 是服务器时间同步的主要工具,两者的主要区别就是:

1、执行 ntpdate 后,时间是立即修整,中间会出现时间断档;

2、而执行 chrony 后,时间也会修正,但是是缓慢将时间追回,并不会断档。

重启 chronyd 服务

[root@xuegod62 ~]#

systemctl restart chronyd

配置时间定时同步

写个计划任务,定时同步时间:

[root@xuegod63~]# crontab -e

5 * * * * /usr/bin/systemctl restart chronyd   #每5分钟同步一次

在 Kubernetes 集群中,各个组件之间的通信和协调都需要依赖时间的同步,如果集群中各节点时

间不一致,可能会导致各种奇怪的问题,例如节点之间无法进行正确的 TLS 握手等。因此,建议在安装Kubernetes 集群之前,将集群中各个节点的时间同步到相同的时间源,保持时间的一致性

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
244 1
|
1月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
228 89
|
6月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
275 9
|
6月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
7月前
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
8月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
836 33
|
8月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
484 19
|
2月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
420 1
二、Linux文本处理与文件操作核心命令
|
2月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
290 137
|
2月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
677 57