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左右).当 ...
随机推荐
- Qt编写可视化大屏电子看板系统32-模块10大屏地图
一.前言 大屏地图模块采用浏览器模块+echart组件,Qt自带了webkit或者webengine模块,其中在win上mingw编译器的Qt5.6以后的版本,没有了浏览器模块,这个就需要用第三方的浏 ...
- [转]Ceres求解优化问题
1. 简介Ceres Solver是专门用于求解非线性最小二乘问题的C++开源库,研究SLAM方向不过滤波和优化两个技术路线,因此常用Ceres库解决实际项目中的优化问题,当然还有g2o同样可用,但就 ...
- IM跨平台技术学习(十):快速对比跨平台框架Electron、Flutter、Tauri、React Native等
本文由21CTO万能的大雄分享,本文有修订和改动. 1.引言 在当今快速发展的技术环境中,对跨平台桌面应用程序的需求正在不断激增. 开发人员面临着选择正确框架之挑战,以便可以高效构建可在 Window ...
- 即时通讯技术文集(第27期):实时音视频技术合集(Part2) [共17篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第27 期. [- 1 -] 专访微信视频技术负责人:微信实时视频聊天技术的演进 [链接] h ...
- VSTO踩坑记录(1)- 从零开始开发outlook插件
概述 vsto是微软提供的一种开发office插件的一种技术,现在看来有点落后了,不过项目需要的情况下,总不能跟领导说这活干不了吧?附上官方文档 安装好必备的开发环境,我用的是vs2022,在安装程序 ...
- 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 ...
- MTK8766 LK GPIO初始化状态设置分析
问题来源是M.2 Dongle的LED灯在kernel起来之前就亮了,kernel起来之后又初始化成熄灭状态.通过排查硬件规格书.GPIO表格,大概判定是前期软件初始化不正确造成的.通过观察串口打印的 ...
- 史上最全的Cursor IDE教程
Cursor IDE 使用教程 1. 快速上手 1.1 入门流程 graph TD A[安装Cursor] --> B[首次启动] B --> C[选择主题和配置] C --> D[ ...
- Solution Set -「DS 专题」兔年的兔子写 DS 会有小常数吗?
目录 Day 1 「Ynoi 2009」「洛谷 P6109」rprmq1 ^ 「Ynoi Easy Round 2021」「洛谷 P8512」TEST_152 「Ynoi 2005」「洛谷 P7907 ...
- 推荐4款基于.NET开源、功能强大的CMS建站系统
前言 CMS系统作为一种强大的内容管理工具,在数字化时代发挥着越来越重要的作用.无论是个人博客还是大型企业官网,选择一个合适的CMS都能极大地提高效率和用户体验.今天大姚给大家推荐4款基于.NET开源 ...