Ubuntu22.04 搭建Kubernetes 1.28版本集群
依赖安装
准备工作需要在所有节点上进行。
- 安装 ssh 服务
- 安装
openssh-server
sudo apt-get install openssh-server
- 修改配置文件
vim /etc/ssh/sshd_config
找到配置项
LoginGraceTime 120PermitRootLogin prohibit-passwordStrictModes yes
把 prohibit-password
改为 yes
,如下:
LoginGraceTime 120PermitRootLogin yesStrictModes yes
- 重启机器,并设置 root 密码
rebootsudo passwd root
- 设置主机名,保证每个节点名称都不相同
hostnamectl set-hostname xxx
- 同步节点时间
- 配置时间与时区
timedatectl set-timezone Asia/Shanghai
timedatectl set-ntp no
apt install ntp -y
systemctl enable ntp
- 安装 ntpdate
sudo apt-get -y install ntpdate
- 配置 crontab,添加定时任务
crontab -e
0 */1 * * * ntpdate time1.aliyun.com
- 关闭 Swap
关闭Linux
的swap
分区,提升Kubernetes
的性能。
# 确认 swap 是否启用
sudo swapon --show
# 暂时关闭 swap
sudo swapoff -a
# 永久关闭 swap
sed -i '/swap/d' /etc/fstab
为什么要关闭 swap 交换分区?
Swap 交换分区,如果机器内存不够,会使用 swap 分区,但是 swap 分区的性能较低,k8s 设计的时候为了能提升性能,默认是不允许使用交换分区的。Kubeadm 初始化的时候会检测 swap 是否关闭,如果没关闭,那就初始化失败。如果不想要关闭交换分区,安装k8s 的时候可以指定 --ignore-preflight-errors=Swap 来解决。
开始搭建
集群规划
每台上都安装 docker-ce
、docker-ce-cli
、containerd.io
,使用 Containerd
作为容器运行时,和 kubelet
交互。
所有节点都安装 kubelet
、kubeadm
、kubectl
软件包,都启动 kubelet.service
服务。
配置 docker
和 k8s
的 APT
源
(比如需要安装 1.29 版本,则需要将如下配置中的 v1.28 替换成 v1.29)
apt-get update && apt-get install -y apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/Release.key |
gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/ /" |
tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
旧版 kubernetes 源只更新到 1.28 部分版本,不过 docker 源部分可以用
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo add-apt-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
apt update
在 Ubuntu 系统中,可以通过以下两个位置查看源列表:
/etc/apt/sources.list
文件:这是主要的源列表文件。您可以使用文本编辑器(如 vi
或 nano
)以管理员权限打开该文件,查看其中列出的软件源。
/etc/apt/sources.list.d/
目录:该目录包含额外的源列表文件。这些文件通常以 .list
扩展名结尾,并包含单独的软件源配置。
apt-cache madison kubelet # 命令来列出可用的 kubelet 软件包版本。检查是否存在版本号为 '1.28.8-00' 的软件包。
/etc/apt/sources.list # apt软件系统源
安装docker、containerd相关
apt install docker-ce docker-ce-cli containerd.io
使用 apt
可以查看安装的 docker
三个软件及关联软件。
apt list --installed | grep -i -E 'docker|containerd'
启动 docker
相关服务
ubuntu
上的 dub
安装后,如果有服务,会被自动设置为开机自启动,且装完就会拉起,这里给出验证。
systemctl list-unit-files | grep -E 'docker|containerd'
###三个服务都应是running状态
systemctl status containerd.service
systemctl status docker.service
systemctl status docker.socket
配置containerd
Cgroup
管理器,k8s默认是 systemd
,需要将 Containerd
的 Cgroup
管理器也修改为 systemd
(默认是 cgroupfs
)。
配置 Containerd
,如果 /etc/containerd
目录不存在,就先创建它:
mkdir /etc/containerd
生成默认配置:
containerd config default > /etc/containerd/config.toml
配置 containerd
改使用 systemd
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
vim /etc/containerd/config.toml
约125行,[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]段落
默认:
SystemdCgroup = false
改为:
SystemdCgroup = true
约61行,[plugins."io.containerd.grpc.v1.cri"]段落
默认:
sandbox_image = "registry.k8s.io/pause:3.6"
改为:
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
配置后,重启 containerd
服务,并保证 containerd
状态正确
systemctl restart containerd.service
systemctl status containerd.service
安装Kubernetes
安装 Kubernetes
需要在所有节点上进行。
/etc/apt/sources.list # apt软件系统源
apt-cache madison kubelet # 命令来列出可用的 kubelet 软件包版本。检查是否存在版本号为 '1.28.8-00' 的软件包。
ip route show # 查找以 "default via" 开头的行
sudo apt-get purge kubelet kubeadm kubectl # 卸妆
apt install docker-ce docker-ce-cli containerd.io
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
在 Ubuntu 系统中,可以通过以下两个位置查看源列表:
/etc/apt/sources.list 文件:这是主要的源列表文件。您可以使用文本编辑器(如 vi 或 nano)以管理员权限打开该文件,查看其中列出的软件源。
/etc/apt/sources.list.d/ 目录:该目录包含额外的源列表文件。这些文件通常以 .list 扩展名结尾,并包含单独的软件源配置。
清空kubectl describe node命令输出的事件日志
kubectl delete events --all --field-selector involvedObject.kind=Node,involvedObject.name=<节点名称>
可以省略--all参数,只删除特定类型的事件
apt install kubelet kubeadm kubectl
###如果需要指定安装1.28.2这个版本,则可以这样:
apt install kubelet=1.28.2-00 kubeadm=1.28.2-00 kubectl=1.28.2-00
确认 kubelet
服务状态
同 docker
一样,kubelet
安装后,服务会自动配置为开机启动,且服务已经启动
systemctl enable kubelet.service # 配置kubelet为开机自启动
systemctl status kubelet
这里没有启动成功是正常的,因为 kubelet
服务成功启动的先决条件,需要 kubelet
的配置文件,所在目录 /var/lib/kubelet
还没有建立。
可以用下面命令看日志,追踪到该临时问题。
journalctl -xeu kubelet
kubelet的正常启动,要等到下一步,master 节点做 kubeadm 的初始化后,才会正常。
版本锁定
锁定这三个软件的版本,避免意外升级导致版本错误。
sudo apt-mark hold kubeadm kubelet kubectl
下载 Kubernetes 组件镜像
可以通过下面的命令看到 kubeadm
默认配置的 kubernetes
镜像,是外网的镜像
kubeadm config images list
使用阿里的 kubernetes
镜像源,下载镜像
kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.28.2 --cri-socket /run/containerd/containerd.sock
Kubernetes初始化
kubeadm init \
--apiserver-advertise-address=<自己本机的公网IP> \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.28.2 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all \
--cri-socket /run/containerd/containerd.sock
配置环境变量
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
使用 Calico 网络插件
上述 master
节点初始化后,可以使用 kubectl get node
来检查 kubernetes
集群节点状态,当前 master
节点的状态为 NotReady
,这是由于缺少网络插件,集群的内部网络还没有正常运作。
可以在 Calico
的网站(https://www.tigera.io/project-calico/)上找到它的安装方式,需要注意 Calico
版本支持适配的 kubernets
版本。
curl https://raw.githubusercontent.com/projectcalico/calico/v3.27.3/manifests/calico.yaml -O
Calico
使用的镜像较大,如果安装超时,可以考虑在每个节点上预先使用 docker pull
拉取镜像:
# 从calico.yaml文件中,找到需要下载的镜像源
docker pull docker.io/calico/kube-controllers:v3.27.3
docker pull docker.io/calico/node:v3.27.3
docker pull docker.io/calico/pod2daemon-flexvol:v3.27.3
docker pull docker.io/calico/cni:v3.27.3
Calico
安装使用 kubectl apply
即可:
kubectl apply -f calico.yaml
其他节点加入集群
查看节点列表,这时还只有主节点
kubectl get node
主节点在初始化结束后,已经创建了临时 token
,但该临时 token
只有24小时有效期。
因此这里需要重新在节点创建永久有效的 token
kubeadm token create --print-join-command
worker节点加入
kubeadm join <master节点>:6443 --token oyl72q.dth6p8kwi7fopsd6 \
--discovery-token-ca-cert-hash sha256:b31bb54c63a550d287c89ddd0094e27ca680a6c3386a8630a75445de3c4d6e43 \
--cri-socket /run/containerd/containerd.sock
如果遇到拉取镜像的问题,同样使用以上方式下载到本地即可。
配置 Console
节点
Console
节点的部署工作更加简单,它只需要安装一个 kubectl
,然后复制“config”文件就行,你可以直接在 Master
节点上用“scp”远程拷贝,例如:
scp `which kubectl` niuben@192.168.56.2:~/
scp ~/.kube/config niuben@192.168.56.2:~/.kube
卸载Kubernetes、docker相关
sudo apt-get purge kubelet kubeadm kubectl # 卸载
apt remove docker-ce docker-ce-cli containerd.io
Ubuntu22.04 搭建Kubernetes 1.28版本集群的更多相关文章
- ubuntu18.04搭建 kubernetes(k8s)集群
下面使用kubeadm来创建k8s cluster1. 所有主机节点上都需要安装docker # sudo apt-get update # sudo apt-get install \ apt-tr ...
- Ubuntu16.04搭建kubernetes v1.11.2集群
1.节点介绍 master cluster-1 cluster-2 cluster-3 hostname k8s-55 k8s-5 ...
- 使用Kubeadm搭建Kubernetes(1.12.2)集群
Kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,在2018年将进入GA状态,说明离生产环境中使用的距离越来 ...
- 使用国内的镜像源搭建 kubernetes(k8s)集群
1. 概述 老话说的好:努力学习,提高自己,让自己知道的比别人多,了解的别人多. 言归正传,之前我们聊了 Docker,随着业务的不断扩大,Docker 容器不断增多,物理机也不断增多,此时我们会发现 ...
- 使用kubeadm搭建Kubernetes(1.10.2)集群(国内环境)
目录 目标 准备 主机 软件 步骤 (1/4)安装 kubeadm, kubelet and kubectl (2/4)初始化master节点 (3/4) 安装网络插件 (4/4)加入其他节点 (可选 ...
- ubuntu 使用阿里云镜像源快速搭建kubernetes 1.15.2集群
一.概述 搭建k8s集群时,需要访问google,下载相关镜像以及安装软件,非常麻烦. 正好阿里云提供了k8s的更新源,国内用户就可以直接使用了. 二.环境介绍 操作系统 主机名 IP地址 功能 配置 ...
- CentOS 7.4搭建Kubernetes 1.8.5集群
环境介绍 角色 操作系统 IP 主机名 Docker版本 master,node CentOS 7.4 192.168.0.210 node210 17.11.0-ce node CentOS 7.4 ...
- Ubuntu 12.04下Hadoop 2.2.0 集群搭建(原创)
现在大家可以跟我一起来实现Ubuntu 12.04下Hadoop 2.2.0 集群搭建,在这里我使用了两台服务器,一台作为master即namenode主机,另一台作为slave即datanode主机 ...
- ubuntu 18.04 搭建flask服务器(大合集,个人实操)
ubuntu 18.04 搭建flask服务器(大合集) Ubuntu python flask 服务器 本次使用的Ubuntu版本为:Ubuntu 18.04.5 LTS (GNU/Linux 4. ...
- Linux平台上搭建apache+tomcat负载均衡集群
传统的Java Web项目是通过tomcat来运行和发布的.但在实际的企业应用环境中,采用单一的tomcat来维持项目的运行是不现实的.tomcat 处理能力低,效率低,承受并发小(1000左右).当 ...
随机推荐
- 【FAQ】HarmonyOS SDK 闭源开放能力 — IAP Kit(4)
1.问题描述: 发布了一个订阅,看日志显示订阅发布成功了,但是在消费的时候没有值,这个是什么原因?人脸活体检测返回上一页 App 由沉浸式变为非沉浸式多了上下安全区域. 解决方案: 对于公共事件来说就 ...
- Qt开源作品40-图片及文字与base64编码互换
一.前言 对于图片的传输,通俗的做法一般有两种,一种是直接二进制文件传输,比如先传输开始标记,带文件名称.文件字节长度,然后挨个分包发送.最后发送文件结束标记,这种方式必须要求接收方按照自己定义的规则 ...
- 视频直播技术干货(十二):从入门到放弃,快速学习Android端直播技术
本文由陆业聪分享,原题"一文掌握直播技术:实时音视频采集.编码.传输与播放",本文进行了排版和内容优化. 1.引言 从游戏.教育.电商到娱乐,直播技术的应用场景无处不在.随着移动端 ...
- MSXML2.DOMDocument加载Internet资源
MSXML2.DOMDocument加载Internet资源 The information in this article applies to: Microsoft XML, versions 2 ...
- MVCC基本原理
在介绍MVCC概念之前,我们先来想一下数据库系统里的一个问题:假设有多个用户同时读写数据库里的一行记录,那么怎么保证数据的一致性呢?一个基本的解决方法是对这一行记录加上一把锁,将不同用户对同一行记录的 ...
- rpm与dpkg
基本介绍 "dpkg "是"Debian Packager "的简写.为 Debian 专门开发的套件管理系统,方便软件的安装.更新及移除.所有源自Debian ...
- .NET周刊【1月第4期 2025-01-26】
国内文章 低成本高可用方案!Linux系统下SQL Server数据库镜像配置全流程详解 https://www.cnblogs.com/lyhabc/p/18660810/linux-sql-ser ...
- linux安装hbase
下载后解压到/opt/Servers/hbase-1.4.6 使用Hbase自带的zookeeper================================================== ...
- SpringBoot - [09] Restful风格接口方法&参数
GetMapping.PostMapping.DeleteMapping.PutMapping是SpringBoot中常用的HTTP请求映射注解,它们分别对应HTTP协议中的GET.POST.DELE ...
- MySQL - [08] 存储过程
题记部分 一.什么是存储过程 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效 ...