首页 > 系统相关 >Ubuntu22.04 搭建Kubernetes 1.28版本集群

Ubuntu22.04 搭建Kubernetes 1.28版本集群

时间:2024-04-28 20:22:38浏览次数:17  
标签:https Kubernetes containerd Ubuntu22.04 apt kubelet 1.28 io docker

依赖安装

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

  • 安装 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 -e0 */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

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"

在 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 需要在所有节点上进行。

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

版本锁定

锁定这三个软件的版本,避免意外升级导致版本错误。

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
wget https://projectcalico.docs.tigera.io/archive/v3.24/manifests/calico.yaml

Calico 使用的镜像较大,如果安装超时,可以考虑在每个节点上预先使用 docker pull 拉取镜像:

# 从calico.yaml文件中,找到需要下载的镜像源
docker pull docker.io/calico/kube-controllers:v3.24.5
docker pull docker.io/calico/node:v3.24.5
docker pull docker.io/calico/pod2daemon-flexvol:v3.24.5
docker pull docker.io/calico/cni:v3.24.5

Calico 安装使用 kubectl apply即可:

kubectl apply -f calico.yaml

其他节点加入集群

查看节点列表,这时还只有主节点

kubectl get node

主节点在初始化结束后,已经创建了临时 token,但该临时 token 只有24小时有效期。

因此这里需要重新在节点创建永久有效的 token

kubeadm token create --print-join-command 

worker节点加入

kubeadm join <worker节点>: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` [email protected]:~/
scp ~/.kube/config [email protected]:~/.kube

卸载Kubernetes、docker相关

sudo apt-get purge kubelet kubeadm kubectl # 卸载
apt remove docker-ce docker-ce-cli containerd.io

标签:https,Kubernetes,containerd,Ubuntu22.04,apt,kubelet,1.28,io,docker
From: https://www.cnblogs.com/niuben/p/18164365

相关文章

  • pwn知识——劫持tcache_perthread_struct(Ubuntu22.04之前)
    前言(可忽略)堆不愧是堆...知识点真的要多用动调查看堆的状态才好理解tcache_perthread_struct的结构源码#defineTCACHE_MAX_BINS64/*Weoverlaythisstructureontheuser-dataportionofachunkwhenthechunkisstoredintheper-threadcache.*/typedefst......
  • kubernetes安装配置使用vGPU
    前言AI落地时,在某些场景下AI模型在训练或者是推理时,其算力要求不需要占用整卡的GPU,比如只需要0.5卡GPU即可满足需求。在这种情况下,可以使用GPU虚拟化技术来解决这个问题,将整卡的GPU虚拟化为两个0.5卡的GPU,这样就可以在一张卡上同时跑两个AI训练或者AI推理应用服......
  • 什么是K8s架构?一文让你全面了解K8s(Kubernetes)
    K8S架构定义K8S是一个开源的容器部署和管理平台。它提供容器编排、容器运行时、以容器为中心的基础设施编排、负载平衡、自我修复机制和服务发现。K8S体系结构,有时也称为K8S应用程序部署体系结构或K8S客户端-服务器体系结构,用于跨主机集群组成、扩展、部署和管理应用程序容器......
  • 【Docker系列】Section 2: Creating Kubernetes Development Clusters, Understandi
    继续上文,【Docker系列】Section2:CreatingKubernetesDevelopmentClusters,Understandingobjects,andExposingServices①引言:在Section2中,我们将转移到Kubernetes集群和对象。本节的第一章将解释如何使用一个流行的工具来创建库集群,称为KinD。我们将解释如何创......
  • kubernetes1.28.0配合apisix-ingress安装过程【1】
    环境介绍主机信息注意:由于资源有限,通过三台vmware虚拟机进行安装。主机名IP操作系统配置k8s-master192.168.199.101Centos7.92CPU、4G内存、100G磁盘k8s-node01192.168.199.102Centos7.92CPU、4G内存、100G磁盘k8s-node02192.168.199.103Centos7......
  • 【Docker系列】Section 2: Creating Kubernetes Development Clusters, Understandi
    引言:在Section2中,我们将转移到Kubernetes集群和对象。本节的第一章将解释如何使用一个流行的工具来创建库集群,称为KinD。我们将解释如何创建不同的网络集群,其范围从single-node(单节点)集群到使用HAProxy作为工作节点的负载平衡器的multiple-node(多节点)集群。通过一个可工作......
  • 云原生周刊:Kubernetes v1.30 发布 | 2024.4.22
    开源项目推荐pv-migratepv-migrate是一个CLI工具/kubectl插件,可轻松将一个Kubernetes的内容迁移PersistentVolumeClaim到另一个Kubernetes。ClaudieClaudie是一个云原生的Kubernetes管理平台,具备跨多个云提供商和本地数据中心的多云和混合云集群管理能力。它通过......
  • 日志架构演进:从集中式到分布式的Kubernetes日志策略
    当我们没有使用云原生方案部署应用时采用的日志方案往往是ELK技术栈。这套技术方案比较成熟,稳定性也很高,所以几乎成为了当时的标配。可是随着我们使用kubernetes步入云原生的时代后,kubernetes把以往的操作系统上的许多底层都屏蔽,再由他提供了一些标准接口。同时在kuber......
  • 实践展示openEuler部署Kubernetes 1.29.4版本集群
    本文分享自华为云社区《openEuler部署Kubernetes1.29.4版本集群》,作者:江晚正愁余。一、Kubernetes集群节点准备1.1主机操作系统说明序号操作系统及版本备注1CentOS7u9或OpenEuler22031.2主机硬件配置说明需求CPU内存硬盘角色主机名值8C8G1024GBmasterk8s-ma......
  • Kubernetes 部署集群1.28.2版本(无坑)
    初步搭建一个一个主节点和两个从节点Kubernetes1.28.2集群。先准备好机器|host|hostname|os|role|hardware||---|---|---|---|---||192.168.31.200|master01|centos7.9|control-plane|cpu:2c内存:3G硬盘1:50G||192.168.31.201|node01......