依赖安装

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

  • 安装 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. Qt编写可视化大屏电子看板系统32-模块10大屏地图

    一.前言 大屏地图模块采用浏览器模块+echart组件,Qt自带了webkit或者webengine模块,其中在win上mingw编译器的Qt5.6以后的版本,没有了浏览器模块,这个就需要用第三方的浏 ...

  2. [转]Ceres求解优化问题

    1. 简介Ceres Solver是专门用于求解非线性最小二乘问题的C++开源库,研究SLAM方向不过滤波和优化两个技术路线,因此常用Ceres库解决实际项目中的优化问题,当然还有g2o同样可用,但就 ...

  3. IM跨平台技术学习(十):快速对比跨平台框架Electron、Flutter、Tauri、React Native等

    本文由21CTO万能的大雄分享,本文有修订和改动. 1.引言 在当今快速发展的技术环境中,对跨平台桌面应用程序的需求正在不断激增. 开发人员面临着选择正确框架之挑战,以便可以高效构建可在 Window ...

  4. 即时通讯技术文集(第27期):实时音视频技术合集(Part2) [共17篇]

    ​为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第27 期. [- 1 -] 专访微信视频技术负责人:微信实时视频聊天技术的演进 [链接] h ...

  5. VSTO踩坑记录(1)- 从零开始开发outlook插件

    概述 vsto是微软提供的一种开发office插件的一种技术,现在看来有点落后了,不过项目需要的情况下,总不能跟领导说这活干不了吧?附上官方文档 安装好必备的开发环境,我用的是vs2022,在安装程序 ...

  6. datahub 采集oracle数据 DPI-1047: Cannot locate a 64-bit Oracle Client library: libclntsh.so

    datahub 命令行采集oracle 报错如下: datahub ingest -c oracle.yml sqlalchemy.exc.DatabaseError: (cx_Oracle.Data ...

  7. MTK8766 LK GPIO初始化状态设置分析

    问题来源是M.2 Dongle的LED灯在kernel起来之前就亮了,kernel起来之后又初始化成熄灭状态.通过排查硬件规格书.GPIO表格,大概判定是前期软件初始化不正确造成的.通过观察串口打印的 ...

  8. 史上最全的Cursor IDE教程

    Cursor IDE 使用教程 1. 快速上手 1.1 入门流程 graph TD A[安装Cursor] --> B[首次启动] B --> C[选择主题和配置] C --> D[ ...

  9. Solution Set -「DS 专题」兔年的兔子写 DS 会有小常数吗?

    目录 Day 1 「Ynoi 2009」「洛谷 P6109」rprmq1 ^ 「Ynoi Easy Round 2021」「洛谷 P8512」TEST_152 「Ynoi 2005」「洛谷 P7907 ...

  10. 推荐4款基于.NET开源、功能强大的CMS建站系统

    前言 CMS系统作为一种强大的内容管理工具,在数字化时代发挥着越来越重要的作用.无论是个人博客还是大型企业官网,选择一个合适的CMS都能极大地提高效率和用户体验.今天大姚给大家推荐4款基于.NET开源 ...