Ubuntu+Kubeadm+docker+cri-docker部署Kubernetes-v1.28.2

由于之前很少使用Ubuntu系统,这次使用Ubuntu系统熟悉一下,Kubeadm+Docker+cri-docker的组合模式部署搭建最简单的一个Kubernetes集群

一、环境准备

  • OS:Ubuntu 20.04
  • Kubernetes:v1.28.2
  • Container Runtime:Docker CE 24.0.7
  • CRI:cri-docker v0.3.7

本次共使用3台虚拟机,一台做master,两台做work_node,如下准备工作在3台虚拟机上同时设置

IP地址主机名

配置说明

10.49.33.100kubeapi.likai.com可以是一个VIP
10.49.33.241k8s-master01 k8s-master.liaki.com

1、启用ssh服务

2、设置时间同步

3、禁用swap

4、禁用ufw

10.49.33.242k8s-node01 k8s-node01.likai.com
10.49.33.243k8s-node02 k8s-node02likai.com

1、开启ssh服务,允许root远程登录

2、设置时间同步

~# apt install chrony

 ~# systemctl start chrony.service  

修改节点的/etc/chrony/chrony.conf配置文件,并将时间服务器指向相应的主机即可,配置格式如下:

server CHRONY-SERVER-NAME-OR-IP iburst

3、主机名解析

4、禁用swap

~# swapoff -a

5、禁用ufw

~# ufw disable

~# ufw status

二、安装程序包

安装docker

首先,生成docker-ce相关程序包的仓库,这里以阿里云的镜像服务器为例进行说明:

 ~# apt -y install apt-transport-https ca-certificates curl software-properties-common

 ~# curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -

 ~# add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

 ~# apt update

 ~# apt install docker-ce

kubelet需要让docker容器引擎使用systemd作为CGroup的驱动,其默认值为cgroupfs,因而,我们还需要编辑docker的配置文件/etc/docker/daemon.json,添加如下内容,其中的registry-mirrors用于指明使用的镜像加速服务。 

提示:自Kubernetes v1.22版本开始,未明确设置kubelet的cgroup driver时,则默认即会将其设置为systemd。

配置完成后即可启动docker服务,并将其设置为随系统启动而自动引导:

 ~# systemctl daemon-reload

 ~# systemctl start docker.service

 ~# systemctl enable docker.service

安装cri-dockerd

Kubernetes自v1.24移除了对docker-shim的支持,而Docker Engine默认又不支持CRI规范,因而二者将无法直接完成整合。为此,Mirantis和Docker联合创建了cri-dockerd项目,用于为Docker Engine提供一个能够支持到CRI规范的垫片,从而能够让Kubernetes基于CRI控制Docker 。

项目地址:https://github.com/Mirantis/cri-dockerd

cri-dockerd项目提供了预制的二进制格式的程序包,用户按需下载相应的系统和对应平台的版本即可完成安装,这里使用的Ubuntu20.04,所以选用

完成安装后,相应的服务cri-dockerd.service便会自动启动。我们也可以使用如下命令进行验证,若服务处于Running状态即可进行后续步骤 。

安装kubeadm、kubelet和kubectl

首先,在各主机上生成kubelet和kubeadm等相关程序包的仓库,这里以阿里云的镜像服务为例:

~# apt update && apt install -y apt-transport-https curl

~# curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

 ~# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list

deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main

EOF

~# apt update

接着,在各主机安装kubelet、kubeadm和kubectl等程序包,并将其设置为随系统启动而自动引导:

 ~# apt install -y kubelet kubeadm kubectl

 ~# systemctl enable kubelet

安装完成后,要确保kubeadm等程序文件的版本,这将也是后面初始化Kubernetes集群时需要明确指定的版本号。

三、整合kubelet和cri-dockerd

仅支持CRI规范的kubelet需要经由遵循该规范的cri-dockerd完成与docker-ce的整合。

配置cri-dockerd

配置cri-dockerd,确保其能够正确加载到CNI插件。编辑/usr/lib/systemd/system/cri-docker.service文件,确保其[Service]配置段中的ExecStart的值类似如下内容。

这里有两个设置,一个是--pod-infra-container-image指定使用pause的镜像,这里指定的话,kubelet默认使用pause:3.6这个版本不容易下载;第二个设置就是cni网络插件的几个选项。

需要添加的各配置参数(各参数的值要与系统部署的CNI插件的实际路径相对应):

  • --network-plugin:指定网络插件规范的类型,这里要使用CNI;

  • --cni-bin-dir:指定CNI插件二进制程序文件的搜索目录;

  • --cni-cache-dir:CNI插件使用的缓存目录;

  • --cni-conf-dir:CNI插件加载配置文件的目录;

配置完成后,重载并重启cri-docker.service服务。

~# systemctl daemon-reload && systemctl restart cri-docker.service

配置kubelet

配置kubelet,为其指定cri-dockerd在本地打开的Unix Sock文件的路径,该路径一般默认为“/run/cri-dockerd.sock“。编辑文件/etc/sysconfig/kubelet,为其添加 如下指定参数。

提示:若/etc/sysconfig目录不存在,则需要先创建该目录。

四、初始化第一个主节点

该步骤开始尝试构建Kubernetes集群的master节点,配置完成后,各worker节点直接加入到集群中的即可。需要特别说明的是,由kubeadm部署的Kubernetes集群上,集群核心组件kube-apiserver、kube-controller-manager、kube-scheduler和etcd等均会以静态Pod的形式运行,它们所依赖的镜像文件默认来自于registry.k8s.io这一Registry服务之上。但我们无法直接访问该服务,本示例将选择使用国内镜像服务器上的服务。

初始化master节点(在master01上完成如下操作)

在运行初始化命令之前先运行如下命令单独获取相关的镜像文件,而后再运行后面的kubeadm init命令,以便于观察到镜像文件的下载过程。

使用国内镜像服务器

这里编写了一个镜像下载脚本,使用docker下载国内镜像,在三台机器上都运行该脚本下载进行,脚本如下:

而后即可进行master节点初始化。kubeadm init命令支持两种初始化方式,一是通过命令行选项传递关键的部署设定,另一个是基于yaml格式的专用配置文件,后一种允许用户自定义各个部署参数,在配置上更为灵活和便捷。下面分别给出了两种实现方式的配置步骤,建议读者采用第二种方式进行

初始化方式一

在k8s-master01上运行如下命令

~# kubeadm init --control-plane-endpoint="kubeapi.likai.com" --kubernetes-version=v1.28.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --token-ttl=0 --cri-socket unix:///run/cri-dockerd.sock --upload-certs --image-repository=registry.aliyuncs.com/google_containers

初始化方式二

使用#kubeadm config print init-defaults命令获取配置框架,然后修改里面的内容选项到自己设定的配置,将修改后的选项保存在配置文件kubeadm-config.yaml中,然后使用命令初始化

~# kubeadm init --config kubeadm-config.yaml --upload-certs

初始化完成后的操作步骤

对于Kubernetes系统的新用户来说,无论使用上述哪种方法,命令运行结束后,请记录最后的kubeadm join命令输出的最后提示的操作步骤。下面的内容是需要用户记录的一个命令输出示例,它提示了后续需要的操作步骤。

# 第1个步骤提示, Kubernetes集群管理员认证到Kubernetes集群时使用的kubeconfig配置文件
# 第2个步骤提示,为Kubernetes集群部署一个网络插件,具体选用的插件则取决于管理员;
# 第3个步骤提示,向集群添加额外的控制平面节点
# 第4个步骤提示,向集群添加工作节点 
# 提示:与cri-dockerd结合使用docker-ce作为container runtime时,通常需要为下面的命令
# 额外附加“--cri-socket unix:///run/cri-dockerd.sock”选项;

部署网络插件

因为flannel不支持network plocy,所以这里直接部署calico

在GitHub上搜索calico项目,找到最新的release,这里下载了release-v3.26.4.tgz这个包,这个包里包含image,yaml文件,这样就可以本地导入image,不用等待image下载了

解压之后,images里是需要的image,可以使用for IMG in `ls images`docker image load -i $IMG;done全部导入,三个节点上都导入

manifasts目录下的calico.yaml文件中,修改CALICO_IPV4POOL_CIDR选项,将value内容改成本集群的pod网段地址,修改后apply部署calico即可

之后检查集群的pod和节点状态

引自文章

​​​​​​​​​​​​​​部署Kubernetes v1.27.1集群使用kubeadm部署Kubernetes v1.27.1,并部署OpenELB、Ingress Nginx、Metrics Server和Kuboard等Add-Ons。icon-default.png?t=N7T8https://mp.weixin.qq.com/s/Hwqb4oPN_65g-iYcfjTCIA

  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PVE(Proxmox Virtual Environment)是一个开源的虚拟化平台,可以用于运行虚拟机和容器,同时支持多节点集群。Ceph 是一个分布式存储系统,可以提供高可用、可扩展的存储服务。Kubernetes 是一个容器编排平台,可以自动化地部署、扩展和管理容器化应用程序。Docker 是一个开源的容器引擎,可以将应用程序及其依赖项打包成容器,以便在任何地方进行部署。 将这些技术结合在一起,可以构建一个高度可扩展、高可用性的容器平台。以下是一些实现步骤: 1. 在多个物理节点上安装 PVE,并创建 PVE 集群。 2. 在 PVE 集群上安装 Ceph,并将其配置为多节点 Ceph 集群,以提供高可用的存储服务。 3. 在 Kubernetes 集群中使用 Ceph RBD 存储插件,以便将容器挂载到 Ceph 存储中。 4. 安装 Docker 和 Kubernetes,使用 kubeadm 初始化 Kubernetes 集群,并加入节点。 5. 在 Kubernetes 集群中安装容器平台,如 OpenShift 或 Rancher,以便管理和部署容器化应用程序。 6. 配置容器平台以使用 Ceph 存储和 Kubernetes 负载均衡服务。 7. 在容器平台上创建应用程序和服务,并部署到 Kubernetes 集群中,以实现高度可扩展、高可用性的容器化应用程序。 需要注意的是,这些技术的组合和部署非常复杂,需要深入了解每个技术的工作原理和实现方式,同时需要考虑安全性、性能和可维护性等因素。因此,在实现这样的容器平台之前,建议进行充分的规划和测试,以确保平台的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值