依赖安装

准备工作需要在所有节点上进行。

  • 安装 ssh 服务
  1. 安装 openssh-server
sudo apt-get install openssh-server
  1. 修改配置文件
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
  • 同步节点时间
  1. 配置时间与时区
timedatectl set-timezone Asia/Shanghai
timedatectl set-ntp no
apt install ntp -y
systemctl enable ntp
  1. 安装 ntpdate
sudo apt-get -y install ntpdate
  1. 配置 crontab,添加定时任务
crontab -e

0 */1 * * * ntpdate time1.aliyun.com
  • 关闭 Swap

    关闭 Linuxswap 分区,提升 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-cedocker-ce-clicontainerd.io,使用 Containerd 作为容器运行时,和 kubelet 交互。

所有节点都安装 kubeletkubeadmkubectl 软件包,都启动 kubelet.service 服务。

配置 dockerk8sAPT

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 文件:这是主要的源列表文件。您可以使用文本编辑器(如 vinano)以管理员权限打开该文件,查看其中列出的软件源。

/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,需要将 ContainerdCgroup 管理器也修改为 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 版本。

Kubernetes 版本 Calico 版本 Calico YAML文件
1.18、1.19、1.20 3.18 https://projectcalico.docs.tigera.io/archive/v3.18/getting-started/kubernetes/requirements https://projectcalico.docs.tigera.io/archive/v3.18/manifests/calico.yaml
1.19、1.20、1.21 3.19 https://projectcalico.docs.tigera.io/archive/v3.19/getting-started/kubernetes/requirements https://projectcalico.docs.tigera.io/archive/v3.19/manifests/calico.yaml
1.19、1.20、1.21 3.20 https://projectcalico.docs.tigera.io/archive/v3.20/getting-started/kubernetes/requirements https://projectcalico.docs.tigera.io/archive/v3.20/manifests/calico.yaml
1.20、1.21、1.22 3.21 https://projectcalico.docs.tigera.io/archive/v3.21/getting-started/kubernetes/requirements https://projectcalico.docs.tigera.io/archive/v3.21/manifests/calico.yaml
1.21、1.22、1.23 3.22 https://projectcalico.docs.tigera.io/archive/v3.22/getting-started/kubernetes/requirements https://projectcalico.docs.tigera.io/archive/v3.22/manifests/calico.yaml
1.21、1.22、1.23 3.23 https://projectcalico.docs.tigera.io/archive/v3.23/getting-started/kubernetes/requirements https://projectcalico.docs.tigera.io/archive/v3.23/manifests/calico.yaml
1.22、1.23、1.24 3.24 https://projectcalico.docs.tigera.io/archive/v3.24/getting-started/kubernetes/requirements https://projectcalico.docs.tigera.io/archive/v3.24/manifests/calico.yaml
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版本集群的更多相关文章

  1. ubuntu18.04搭建 kubernetes(k8s)集群

    下面使用kubeadm来创建k8s cluster1. 所有主机节点上都需要安装docker # sudo apt-get update # sudo apt-get install \ apt-tr ...

  2. Ubuntu16.04搭建kubernetes v1.11.2集群

    1.节点介绍         master      cluster-1      cluster-2      cluster-3 hostname        k8s-55      k8s-5 ...

  3. 使用Kubeadm搭建Kubernetes(1.12.2)集群

    Kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,在2018年将进入GA状态,说明离生产环境中使用的距离越来 ...

  4. 使用国内的镜像源搭建 kubernetes(k8s)集群

    1. 概述 老话说的好:努力学习,提高自己,让自己知道的比别人多,了解的别人多. 言归正传,之前我们聊了 Docker,随着业务的不断扩大,Docker 容器不断增多,物理机也不断增多,此时我们会发现 ...

  5. 使用kubeadm搭建Kubernetes(1.10.2)集群(国内环境)

    目录 目标 准备 主机 软件 步骤 (1/4)安装 kubeadm, kubelet and kubectl (2/4)初始化master节点 (3/4) 安装网络插件 (4/4)加入其他节点 (可选 ...

  6. ubuntu 使用阿里云镜像源快速搭建kubernetes 1.15.2集群

    一.概述 搭建k8s集群时,需要访问google,下载相关镜像以及安装软件,非常麻烦. 正好阿里云提供了k8s的更新源,国内用户就可以直接使用了. 二.环境介绍 操作系统 主机名 IP地址 功能 配置 ...

  7. 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 ...

  8. Ubuntu 12.04下Hadoop 2.2.0 集群搭建(原创)

    现在大家可以跟我一起来实现Ubuntu 12.04下Hadoop 2.2.0 集群搭建,在这里我使用了两台服务器,一台作为master即namenode主机,另一台作为slave即datanode主机 ...

  9. ubuntu 18.04 搭建flask服务器(大合集,个人实操)

    ubuntu 18.04 搭建flask服务器(大合集) Ubuntu python flask 服务器 本次使用的Ubuntu版本为:Ubuntu 18.04.5 LTS (GNU/Linux 4. ...

  10. Linux平台上搭建apache+tomcat负载均衡集群

    传统的Java Web项目是通过tomcat来运行和发布的.但在实际的企业应用环境中,采用单一的tomcat来维持项目的运行是不现实的.tomcat 处理能力低,效率低,承受并发小(1000左右).当 ...

随机推荐

  1. 【FAQ】HarmonyOS SDK 闭源开放能力 — IAP Kit(4)

    1.问题描述: 发布了一个订阅,看日志显示订阅发布成功了,但是在消费的时候没有值,这个是什么原因?人脸活体检测返回上一页 App 由沉浸式变为非沉浸式多了上下安全区域. 解决方案: 对于公共事件来说就 ...

  2. Qt开源作品40-图片及文字与base64编码互换

    一.前言 对于图片的传输,通俗的做法一般有两种,一种是直接二进制文件传输,比如先传输开始标记,带文件名称.文件字节长度,然后挨个分包发送.最后发送文件结束标记,这种方式必须要求接收方按照自己定义的规则 ...

  3. 视频直播技术干货(十二):从入门到放弃,快速学习Android端直播技术

    本文由陆业聪分享,原题"一文掌握直播技术:实时音视频采集.编码.传输与播放",本文进行了排版和内容优化. 1.引言 从游戏.教育.电商到娱乐,直播技术的应用场景无处不在.随着移动端 ...

  4. MSXML2.DOMDocument加载Internet资源

    MSXML2.DOMDocument加载Internet资源 The information in this article applies to: Microsoft XML, versions 2 ...

  5. MVCC基本原理

    在介绍MVCC概念之前,我们先来想一下数据库系统里的一个问题:假设有多个用户同时读写数据库里的一行记录,那么怎么保证数据的一致性呢?一个基本的解决方法是对这一行记录加上一把锁,将不同用户对同一行记录的 ...

  6. rpm与dpkg

    基本介绍 "dpkg "是"Debian Packager "的简写.为 Debian 专门开发的套件管理系统,方便软件的安装.更新及移除.所有源自Debian ...

  7. .NET周刊【1月第4期 2025-01-26】

    国内文章 低成本高可用方案!Linux系统下SQL Server数据库镜像配置全流程详解 https://www.cnblogs.com/lyhabc/p/18660810/linux-sql-ser ...

  8. linux安装hbase

    下载后解压到/opt/Servers/hbase-1.4.6 使用Hbase自带的zookeeper================================================== ...

  9. SpringBoot - [09] Restful风格接口方法&参数

    GetMapping.PostMapping.DeleteMapping.PutMapping是SpringBoot中常用的HTTP请求映射注解,它们分别对应HTTP协议中的GET.POST.DELE ...

  10. MySQL - [08] 存储过程

    题记部分 一.什么是存储过程   存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效 ...