Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >快速部署一套K8s集群(V1.32)

快速部署一套K8s集群(V1.32)

原创
作者头像
用户10662715
发布于 2025-04-22 02:51:31
发布于 2025-04-22 02:51:31
9590
举报

1、准备服务器环境

Kubernetes集群节点规划。

主机名

操作系统

IP地址

k8s-master

CentOS7.9_x64

192.168.111.128

k8s-node1

CentOS7.9_x64

192.168.111.129

k8s-node2

CentOS7.9_x64

192.168.111.130

集群节点运行的组件:

在上述环境中,我们选择Docker作为Kubernetes的容器运行时。因此,除了部署Kubernetes组件之外,还需部署Docker相关服务。

2、系统初始化配置

1)关闭防火墙

[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# systemctl disable firewalld

2)关闭SELinux

SELinux是Linux的一个安全机制,但使用复杂和存在兼容性问题,通常选择关闭它。

[root@localhost ~]# setenforce 0 # 临时

[root@localhost ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久

3)关闭Swap交换分区

Swap是一种虚拟内存技术,它允许系统将部分内存数据写到硬盘上的特定分区,从而释放更多物理内存。由于硬盘读写性能相比物理内存低,因此使用Swap会影响系统处理性能。并且Kubelet组件默认要求关闭Swap,以提高系统的稳定性和可靠性。

关闭Swap交换分区:

[root@localhost ~]# swapoff -a # 临时

[root@localhost ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久

  1. 设置主机名

[root@localhost ~]# hostnamectl set-hostname xxx

  1. 在master添加hosts

[root@localhost ~]# cat >> /etc/hosts << EOF

192.168.111.128 k8s-master

192.168.111.129 k8s-node1

192.168.111.130 k8s-node2

EOF

6)配置内核参数

某些Kubernetes网络插件可能会用到网络桥接(Bridge),为了确保网络桥接的数据包经过Iptables处理,启用相关的内核参数:

[root@localhost ~]# cat > /etc/sysctl.d/k8s.conf << EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

[root@localhost ~]# sysctl --system

7)替换yum源:

[root@localhost ~] curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

8)# 时间同步

[root@localhost ~] yum install ntpdate -y

[root@localhost ~] ntpdate time.windows.com

3、安装docker

在所有节点上安装并启动Docker。

下载阿里云Yum软件源文件:

[root@localhost ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

安装指定版本Docker:

[root@localhost ~]# yum install -y docker-ce

[root@localhost ~]# cat > /etc/docker/daemon.json << EOF

{

"registry-mirrors": ["https://docker.ketches.cn","https://docker.1ms.run","https://hub1.nat.tf"],

"exec-opts": ["native.cgroupdriver=systemd"]

}

EOF

启动并设置开机启动:

[root@localhost ~]systemctl start docker && systemctl enable docker

4、安装cri-docker

在Kubernetes早期版本中,Docker作为默认容器运行时,并在Kubelet程序中开发了一个名为“Dockershim”的代理程序,负责Kubelet与Docker通信。

随着Kubernetes生态系统的发展,涌现出多种容器运行时,例如containerd、cri-o、rkt等。为了支持这些容器运行时,Kubernetes引入CRI(Container Runtime Interface,容器运行时接口)标准,使得第三方容器运行时只需对接CRI即可与Kubernetes集成。

后来,在Kubernetes 1.20版本发布时宣布:为了优化核心代码,减少维护负担,将在1.24版本中正式移除“Dockershim”,而当时Docker又不支持CRI,这就意味着Kubernetes无法再Docker作为容器运行时。Docker官方为了解决这个问题,与Mirantis公司合作,开发了一个名为“cri-dockerd”的代理程序,负责Kubelet与Docker通信。

因此,从Kubernetes 1.24版本及更高版本开始,使用Docker作为容器运行时,需要安装cri-dockerd。可以在GitHub Releases页面(https://github.com/Mirantis/cri-dockerd/releases)找到适用于你系统平台版本的安装包,下载后上传到所有节点上并进行安装:

[root@localhost ~] rpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm

安装完成后,修改Systemd服务文件指定依赖的Pause镜像为国内镜像地址:

[root@localhost ~] vi /usr/lib/systemd/system/cri-docker.service

ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

启动并设置开机启动:

[root@localhost ~] systemctl start cri-docker && systemctl enable cri-docker

5、安装kubeadm和kubelet

在所有节点上安装kubeadm、kubectl和kubelet组件。但这些软件包未包含在系统默认软件源中,需要额外配置Yum软件源,例如配置阿里云的软件源:

[root@localhost ~] cat > /etc/yum.repos.d/kubernetes.repo << EOF

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/

enabled=1

gpgcheck=1

gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/repodata/repomd.xml.key

EOF

安装指定版本kubeadm、kubectl和kubelet:

[root@localhost ~] yum install -y kubeadm-1.32.0 kubectl-1.32.0 kubelet-1.32.0

kubeadm和kubectl仅是一个集群搭建工具和管理工具,不涉及启动。而kubelet是一个守护进程程序,由kubeadm在搭建过程中自动启动,这里仅设置开机启动即可:

[root@localhost ~] systemctl enable kubelet

6、部署Master节点

在Master节点执行以下命令初始化Kubernetes管理节点:

[root@localhost ~] kubeadm init \

--apiserver-advertise-address=192.168.111.128 \

--image-repository=registry.aliyuncs.com/google_containers \

--kubernetes-version=v1.32.0 \

--pod-network-cidr=10.244.0.0/16 \

--service-cidr=10.96.0.0/12 \

--cri-socket=unix:///var/run/cri-dockerd.sock \

--ignore-preflight-errors=all

该命令中各参数含义如下:

--apiserver-advertise-address:指定API Server监听的IP地址。如果没有设置,将使用默认的网络接口。

--image-repository:指定镜像仓库地址。默认值为“registry.k8s.io”,但该仓库在国内无法访问,因此这里指定阿里云仓库。

--kubernetes-version:指定Kubernetes版本。

--pod-network-cidr:指定Pod网络的CIDR地址范围。

--service-cidr:指定Service网络的CIDR地址范围。

--cri-socket:指定kubelet连接容器运行时的Unix套接字文件。

命令执行后,kubeadm会执行一系列任务,大概如下:

[preflight]:该阶段执行一系列检查,验证当前系统环境是否满足Kubernetes的安装要求,包括:

CPU和内存是否满足最低要求;

网络是否正常;

操作系统版本是否满足;

容器运行时是否可以连接;

内核参数是否正确配置;

下载所需的容器镜像

[certs]:生成Kubernetes组件所需的HTTPS证书和秘钥,并存放到“/etc/kubernetes/pki”目录;

[kubeconfig]:生成kubeconfig文件,该文件包含API Server地址、客户端证书等信息,并存放到“/etc/kubernetes”目录。

[kubelet-start]:生成kubelet配置文件“/var/lib/kubelet/config.yaml”并启动kubelet服务。

[control-plane]:为kube-apiserver、kube-controller-manager和kube-scheduler创建静态Pod资源文件,并存储到“/etc/kubernetes/manifests”目录。

[etcd]:为etcd创建静态Pod资源文件,并存储到“/etc/kubernetes/manifests”目录。

[wait-control-plane]:等待kubelet从目录“/etc/kubernetes/manifest”中以静态Pod的形式启动Master组件。

[apiclient]:检查Master组件是否健康。

[upload-config]:将kubeadm配置存储到ConfigMap对象中。

[kubelet]:将kubelet配置存储到ConfigMap对象中。

[upload-certs]:提示用户跳过证书上传。

[mark-control-plane]:给Master节点添加标签和污点。

[bootstrap-token]:生成引导令牌,用于Node节点在加入集群时使用。

[kubelet-finalize]:更新kubelet配置文件(/etc/kubernetes/kubelet.conf)。

[addons]:安装CoreDNS和kube-proxy插件。

紧接着,输出初始化成功的信息:

根据上述提示,执行以下命令开始使用集群:

这些命令是将文件“/etc/kubernetes/admin.conf”复制到“$HOME/.kube/config”,以便kubectl根据该配置文件连接和管理Kubernetes集群。

7、部署Node节点

在两台工作节点执行上述返回的“kubeadm init”命令,并添加“--cri-socket”参数,以将这些工作节点加入到集群中:

[root@localhost ~] kubeadm join 192.168.111.128:6443 --token twrp53.v7dz7hjulwr4u10t --discovery-token-ca-cert-hash sha256:95341cb0152412e136b15176bec9daf9e728c504d7ee71a33a150b93e4634d17 --cri-socket=

unix:///var/run/cri-dockerd.sock --ignore-preflight-errors=all

可以在Master节点执行“kubectl get nodes”命令查看节点,结果如下:

两个工作节点已成功加入集群中。kubeadm默认根据主机名来设置节点名称,还可以添加“--node-name”参数自定义节点名称。

8、部署网络插件

在上述结果中,节点状态显示为“NotReady”,表示节点尚未准备就绪。这是由于kubelet服务未发现网络插件导致的,kubelet日志中也有相关说明(“network plugin is not ready”)。

Kubernetes网络插件主要用于实现集群内部Pod通信,它负责配置和管理Pod的网络。常见的网络插件包括Calico、Flannel、Cilium等,这里选择使用Calico作为Kubernetes网络插件,安装Calico网络插件:

[root@localhost ~] kubectl create -f tigera-operator.yaml

[root@localhost ~] kubectl create -f custom-resources.yaml

等待片刻,查看Pod对象:

[root@localhost ~] kubectl get pods -n calico-system

所有Pod的状态均显示为“Running”,说明Calico安装成功。再通过“kubectl get nodes”命令查看节点,状态转为“Ready”,表示节点准备就绪。

需要注意的是,Kubernetes考虑到安全性,“kubeadm join”命令中的Token有效期为24小时,过期后不可再使用。届时,可以通过“kubeadm token create --print-join-command”命令创建新的Token,以添加新的工作节点。

9、部署Dashboard

Dashboard是官方开发的一个Web管理系统,通过它可以管理集群资源、查看应用概览、查看容器日志和进入容器等操作。

下载Dashboard的资源文件:

[root@localhost ~] wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

将Service的类型设置为“NodePort”类型并指定访问端口,以便将其暴露到集群外部访问,修改如下:

[root@localhost ~]# vim recommended.yaml

在集群中创建资源:

[root@localhost ~] kubectl apply -f recommended.yaml

查看Pod对象:

[root@localhost ~] kubectl get pods -n kubernetes-dashboard

所有Pod的状态都显示为“Running”,说明Dasboard安装成功。浏览器访问“https://<节点IP地址>:30001”,将看到登录界面。

创建一个服务账号并授予集群管理员权限:

[root@localhost ~] kubectl create serviceaccount admin-user -n kubernetes-dashboard

[root@localhost ~] kubectl create clusterrolebinding admin-user --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:admin-user

根据服务账号创建Token:

[root@localhost ~] kubectl create token admin-user -n kubernetes-dashboard

将输出的Token复制到输入框中,然后点击登录,进入到Dashboard首页。

到此k8s (v1.32)已安装完毕。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
K8s集群v1.26.1版本的简单部署实践
使用cri-dockerd+calico+kubernetes-dashboard
yuanfan2012
2023/02/23
2.5K0
K8s集群v1.26.1版本的简单部署实践
不背锅运维:搭不起来我赔钱给你:分享Ubuntu20和Centos7中使用kubeadm搭建k8s集群。
取消注释,并修改成与前面kubeadm init的 --pod-network-cidr(10.244.0.0/16)指定的一样。
不背锅运维
2022/12/20
9580
k8s 知识总结
K8S(Kubernetes缩写)是容器编排引擎,用于实现自动化运维管理容器。 核心功能:
willsonchen
2024/01/22
5120
使用kubeadm快速部署一套K8S集群
Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,仅用于尝试Kubernetes或日常开发的用户使用。部署地址:https://kubernetes.io/docs/setup/minikube/
没有故事的陈师傅
2019/09/19
7.2K21
使用kubeadm快速部署一套K8S集群
k8s集群搭建
访问:https://集群任意 IP:端口 (https://139.198.165.238:32323)
OY
2023/02/23
1.1K0
k8s集群搭建
部署k8s集群(k8s集群搭建详细实践版)
Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。
zjiekou
2022/11/12
22.7K5
【Kubernetes】10分钟部署一套K8S集群(kubeadm)
TIPS:需要在所有集群机器上执行的命令,可以用XSHELL的发送命令到所有会话,提高部署效率
Hanzo
2020/08/05
16.5K4
【Kubernetes】10分钟部署一套K8S集群(kubeadm)
谁再说不会 K8S 高可用部署,就把这个给他甩过去!
文档:https://kubernetes.io/zh-cn/docs/home/
民工哥
2022/10/27
1.5K0
谁再说不会 K8S 高可用部署,就把这个给他甩过去!
【Kubernetes】10分钟部署一套K8S集群(kubeadm)
TIPS:需要在所有集群机器上执行的命令,可以用XSHELL的发送命令到所有会话,提高部署效率
用户4473763
2022/09/25
6630
kubeadm快速部署kubernetes集群
Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。
Cyylog
2020/08/19
4770
使用kubeadm部署高可用IPV4/IPV6集群-V1.32
https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了
小陈运维
2025/03/24
1690
使用kubeadm部署高可用IPV4/IPV6集群-V1.32
使用kubeadm快速部署一个K8s集群
Kubeadm 是一个 K8s 部署工具,提供 kubeadm init 和 kubeadm join,用于快速部署 Kubernetes 集群。
鱼找水需要时间
2023/08/03
1K0
使用kubeadm快速部署一个K8s集群
Kubernetes全栈架构师(Kubeadm高可用安装k8s集群)--学习笔记
VIP(虚拟IP)不要和公司内网IP重复,首先去ping一下,不通才可用。VIP需要和主机在同一个局域网内
郑子铭
2021/07/10
1.8K0
Kubernetes全栈架构师(Kubeadm高可用安装k8s集群)--学习笔记
centos7 安装 k8s
其中https://82m9ar63.mirror.aliyuncs.com去阿里云获取,替换成自己的
DencyCheng
2022/12/02
8040
使用kubeadm的方式搭建k8s(1.18.2版本)高可用集群
1)配置主机名,以k8s-master01为例(需要依次根据节点规划角色修改主机名)
没有故事的陈师傅
2020/05/22
4.7K4
附022.Kubernetes_v1.18.3高可用部署架构一
Kubernetes的高可用主要指的是控制平面的高可用,即指多套Master节点组件和Etcd组件,工作节点通过负载均衡连接到各Master。
木二
2020/06/16
1.3K0
基于kubeadm搭建k8s高可用集群
这五台机器均需事先安装好Docker,由于安装过程比较简单这里不进行介绍,可以参考官方文档:
端碗吹水
2020/09/23
2.7K0
基于kubeadm搭建k8s高可用集群
使用Kubeadm创建k8s集群之节点部署(三十一)
本篇部署教程将讲述k8s集群的节点(master和工作节点)部署,请先按照上一篇教程完成节点的准备。本篇教程中的操作全部使用脚本完成,并且对于某些情况(比如镜像拉取问题)还提供了多种解决方案。不过基于部署环境和k8s的复杂性,我们需要对k8s集群部署过程中的一些步骤都有所了解,尤其是“kubeadm init”命令。
雪雁-心莱科技
2019/08/05
1.4K0
使用Kubeadm创建k8s集群之节点部署(三十一)
公网环境搭建 k8s 集群
笔者利用手头几台云服务器搭建 k8s 集群,由于这几台云服务属于不同的云服务厂商,无法搭建局域网环境的 k8s 集群,故笔者搭建的是公网环境的 k8s 集群,在此做个记录, 以下均在 ubuntu 20.04 环境下进行
菜菜cc
2022/11/15
3.5K0
公网环境搭建 k8s 集群
Centos7安装K8S集群环境
kubelet不支持SELinux, 这里需要将SELinux设置为permissive模式
用户1392128
2024/01/08
1.6K0
相关推荐
K8s集群v1.26.1版本的简单部署实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档