OpenEular23.09(欧拉)操作系统为企业搭建独立的K8S集群环境,详细流程+截图

一.环境;

win10,vmware16 pro,openeular23.09

集群模式:一主二从

|--------------|----------------|--------------|-----|----|-----|
| 主机名 | IP | 角色 | CPU | 内存 | 硬盘 |
| k8s-master01 | 192.168.91.100 | master | 4C | 4G | 40G |
| k8s-worker02 | 192.168.91.101 | worker(node) | 4C | 4G | 40G |
| k8s-worker03 | 192.168.91.102 | worker(node) | 4C | 4G | 40G |
[主机硬件配置]

二.openEuler集群搭建;

单机版operEuler安装及配置按下面链接逐步操作即可;

VMware16 pro 安装openEuler-23.09-x86_64,详细操作流程+详图。-CSDN博客文章浏览阅读174次,点赞5次,收藏4次。那么这个空间设置成内存的2倍大小。点击IPv4设置--手动--添加--设置ip--设置DNS服务器,最后点击--"保存";首先选中--"本地标准磁盘",存储配置--自定义分区,点击--"完成";在--主机名--设置主机名:(例如k8s-master01),点击--点击+,设置--挂载点/boot--期望容量,点击--添加挂载点;点击--+--挂载点swap--期望容量,点击--"添加挂载点";默认选择--亚洲--上海,并调整日期和时间,点击--"完成";设备类型--确认--LVM,卷组--选择"修改";https://blog.csdn.net/shanxiderenheni/article/details/135247321

1.节点克隆;

搭建好主节点k8s-master01,先关机,再按照下图右键操作,克隆出两个工作节点k8s-worker02和k8s-worker03;(此时,三台虚拟机的账户,密码,IP,网络等信息都是一样的)

2.修改两个工作节点的主机名和IP;

bash 复制代码
hostnamectl set-hostname k8s-worker02

修改k8s-woker02节点的IP;

定位到指定目录命令:

bash 复制代码
cd /etc/sysconfig/network-scripts

编辑命令:

bash 复制代码
vim ifcfg-ens33

k8s-woker02:192.168.91.101

k8s-worker03节点的操作与上面相同;

k8s-worker03:192.168.91.102

3.网络相关重要配置检查一遍,一般没啥问题,眼过一遍即可;

两个worker节点都看一遍;

三.Xshell远程登录三台euler服务器;

四.全部集群主机修改hosts,完成主机名与IP的映射;

bash 复制代码
vim /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.91.100 k8s-master01
192.168.91.101 k8s-worker01
192.168.91.102 k8s-worker02

五.关闭全部主机防火墙;

关闭防火墙:

bash 复制代码
systemctl stop firewalld

禁止开机自启:

bash 复制代码
systemctl disable firewalld

查看防火墙状态:

bash 复制代码
systemctl status firewalld

六.所有主机关闭selinux;

bash 复制代码
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

修改SELinux配置需要重启操作系统。

七.所有主机同步时间配置;

最小化安装系统需要安装ntpdate软件,此处安装的是服务器版本,带有update软件,直接使用即可;

安装命令:

bash 复制代码
yum  -y install ntpdate

编辑同步时间规则命令:

bash 复制代码
crontab -e

0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com

八.所有主机配置内核转发及网桥过滤;

开启内核路由转发命令:

bash 复制代码
vim /etc/sysctl.conf

(截图中命令显示两次,是我测试命令可用后,二次截图的操作)

配置内核参数,将桥接的IPv4流量传递到iptables的链的命令:(创建新文件+编辑内容)

bash 复制代码
cat <<EOF >/etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF

执行该命令,如果不执行就会在应用k8s.conf时出现加载错误;

bash 复制代码
modprobe br_netfilter

使用新添加配置文件生效;

bash 复制代码
sysctl -p /etc/sysctl.d/k8s.conf

九.所有主机安装ipset及ipvsadm;

bash 复制代码
yum -y install ipset ipvsadm

回车,安装过程如下;

配置ipvsadm模块加载方式,添加需要加载的模块;

bash 复制代码
cat > /etc/sysconfig/modules/ipvs.module <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_sh
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- nf_conntrack
EOF

授权、运行、检查是否加载;

bash 复制代码
chmod 755 /etc/sysconfig/modules/ipvs.module && bash /etc/sysconfig/modules/ipvs.module && lsmod | grep -e ip_vs -e nf_conntrack

十.关闭SWAP分区;

方法一:

bash 复制代码
# 如果有的话,关闭swap分区
swapoff -a

# 永久关闭swap分区,注释掉fstab中包含swap的这一行
vim /etc/fstab 
# /dev/mapper/centos-swap swap                    swap    defaults        0 0

方法二:

bash 复制代码
#实时动态关闭
swapoff -a 


#禁止重启后自动开启
sed -i '/ swap / s/^/#/' /etc/fstab 

本案例采用方法二;

十一.所有主机重启;

bash 复制代码
reboot

十二.所有主机docker安装;

1.查看是否存在docker软件;

bash 复制代码
yum list | grep docker

2.安装docker;

bash 复制代码
dnf install docker

3.设置docker开机启动并启动;

bash 复制代码
systemctl enable --now docker

4.查看docker版本;

bash 复制代码
docker version

十三.k8s软件安装;

1.所有主机安装k8s依赖,连接跟踪;

bash 复制代码
dnf install conntrack

2.k8s-master01节点安装;

bash 复制代码
dnf install -y kubernetes-kubeadm kubernetes-kubelet kubernetes-master

3.k8s-worker02和k8s-worker03两个节点安装;

bash 复制代码
dnf install -y kubernetes-kubeadm kubernetes-kubelet kubernetes-node

k8s-worker02

k8s-worker03

4.所有主机设置开机自启kubelet;

bash 复制代码
systemctl enable kubelet

K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启。

5.所有主机现在启动kubelet.service;

bash 复制代码
systemctl start kubelet.service

十四.k8s集群初始化master节点(只在k8s-master01节点操作);

bash 复制代码
kubeadm init --node-name=k8s-master01 \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version v1.25.3 \
--cri-socket=unix:///var/run/cri-dockerd.sock \
--apiserver-advertise-address=192.168.91.100 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12

错误一:"crictl not found in system path";

需要安装crictl工具;

bash 复制代码
yum install -y  crictl

错误二:"socat not found in system path";

需要安装socat工具;

bash 复制代码
yum install -y socat

**错误三:[ERROR CRI]: container runtime is not running: output: time="2023-12-29T08:16:11+08:00" level=fatal msg="unable to determine runtime API version: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial unix /var/run/cri-dockerd.sock: connect: no such file or directory\""

, error: exit status 1**

问题定位:

1."container runtime is not running",containerd服务未启动,查阅containerd运行状态;
bash 复制代码
systemctl status containerd
2.提示未找到containerd.service,需要安装containerd.service;
bash 复制代码
yum install -y containerd
3.yum安装containerd失败原因分析:
(1)k8s 1.24之后弃用了docker-shim。

dockershim 的作用是 Kubernetes 通过 CRI 来操作 Docker,所以Kubernetes 任何的功能变动或 Docker 有任何的功能特性变更,dockershim 代码必须加以改动保证能够支持相关的变更(维护特别不方便)。

另外,Docker 的底层运行时是 containerd(大家装docker的时候应该也会发现有containerd这样几个东西),最终都是要调用 containerd且 containerd 自身也支持 CRI 。那为什么要先绕过一层 Docker 呢?是不是可以直接通过 CRI 跟 Containerd 进行交互呢?这也就造成了现在 Kubernetes 社区弃用 dockershim的原因。

(2)linux操作系统systemd的服务管理。

系统服务在/usr/lib/systemd/system目录下,名字为*.service之类的文件,systemctl可以通过文件名管理服务。这就是为什么有些systemctl 可以管理一些二进制启动的服务,linux的3.10的内核以后直接后台运行二进制程序显然不够优雅。

(3)主流的平台platform有x86(amd),arm(aarch)等等,操作系统也是分linux/windows的。

参考cpu架构,如果不熟悉的话,还是不好记住的,特别是amd/arm这种容易混。特别注意的是,用ctr命令拉取、导入、导出镜像,是需要指定平台的,否则有时候会报相关错误,ctr也支持全平台,但是文件就比较大了。

(4)containerd的工具为ctr,k8s管理containerd的工具为crictl。

ctr是containerd的工具,它运行时,需要在ctr 紧后加入-n namespace。例如k8s的镜像是放在k8s.io的命名空间下的,你直接用ctr查看,是看不到镜像的,你需要这样才能看到:ctr -n k8s.io images list。但是可以用crictl直接查看到k8s运行的服务的镜像。

4.用二进制文件安装containerd;
(1)下载地址(本测试用的是1.6.22版本,其他版本自行选择下载);

https://github.com/containerd/containerd/releases/tag/v1.6.22https://github.com/containerd/containerd/releases/tag/v1.6.22

(2)上传,解压"cri-containerd-1.6.22-linux-amd64.tar.gz";

上传containerd压缩包到k8s-master01节点,位置自选;

(3)解压containerd压缩包到"/usr/bin/",或"/usr/local/bin/";

因为这两个目录都具有系统的环境变量,可以直接运行。比如ssh命令其实就在/usr/bin/ssh

①本案例是解压到"/usr/local/bin/",(因为该路径本来是空的,万一解压失败,回退也方便清理);
bash 复制代码
tar -zxvf cri-containerd-1.6.22-linux-amd64.tar.gz -C /usr/local/bin/

-------------------由于参考资料不完整--------------走的一段弯路start------------------记录一下-------------

赋予它们可执行权限,4=读,2=写,1=可执行,加一起就是他的权限。

bash 复制代码
chmod 0755 /usr/bin/containerd*
chmod 0755 /usr/bin/crictl
chmod 0755 /usr/bin/ctd-decoder
chmod 0755 /usr/bin/runc
chmod 0755 /usr/bin/ctr

-----------------------------------------------------------弯路end---------------------------------------------------------

正确方法如下:

etc目录:主要为containerd服务管理配置文件及cni虚拟网卡配置文件;

opt目录:主要为gce环境中使用containerd配置文件及cni插件;

usr目录:主要为containerd运行时的二进制文件,包含runc;

②拷贝二进制可执行文件到$PATH中;
bash 复制代码
[root@k8s-master01 /]# cd /usr/local/bin
[root@k8s-master01 bin]# ll
总计 16
-rw-r--r-- 1 root root  682  7月28日 03:48 cri-containerd.DEPRECATED.txt
drwxr-xr-x 3 root root 4096 12月29日 11:11 etc
drwxr-xr-x 3 root root 4096 12月29日 11:11 opt
drwxr-xr-x 3 root root 4096  7月28日 03:45 usr
[root@k8s-master01 bin]# ls usr/local/bin
containerd  containerd-shim  containerd-shim-runc-v1  containerd-shim-runc-v2  containerd-stress  crictl  critest  ctd-decoder  ctr
[root@k8s-master01 bin]# ls /usr/local/bin
cri-containerd.DEPRECATED.txt  etc  opt  usr
[root@k8s-master01 bin]# cp usr/local/bin/*  /usr/local/bin/
[root@k8s-master01 bin]# ls /usr/local/bin
containerd  containerd-shim  containerd-shim-runc-v1  containerd-shim-runc-v2  containerd-stress  cri-containerd.DEPRECATED.txt  crictl  critest  ctd-decoder  ctr  etc  opt  usr
bash 复制代码
# 方法一:先进入根目录 cd /usr/local/bin   再执行下面的命令
cp usr/local/bin/*  /usr/local/bin/
bash 复制代码
# 方法二:在任意目录执行下面的命令,路径都是从根目录开始计算
cp /usr/local/bin/usr/local/bin/*  /usr/local/bin/

containerd 的安装包中一共有五个文件,通过上面的命令它们被安装到了 /usr/local/bin 目录中:

containerd:即容器的运行时,以 gRPC 协议的形式提供满足 OCI 标准的 API

containerd-release:containerd项目的发行版发布工具

containerd-stress:containerd压力测试工具

containerd-shim:这是每一个容器的运行时载体,我们在 docker 宿主机上看到的 shim 也正是代表着一个个通过调用 containerd 启动的 docker 容器。

ctr:它是一个简单的 CLI 接口,用作 containerd 本身的一些调试用途,投入生产使用时还是应该配合docker 或者 cri-containerd 部署。

赋予它们可执行权限,4=读,2=写,1=可执行,加一起就是他的权限。

正确命令如下:

bash 复制代码
chmod 0755 /usr/bin/containerd*
chmod 0755 /usr/bin/crictl
chmod 0755 /usr/local/bin/ctd-decoder
chmod 0755 /usr/bin/runc
chmod 0755 /usr/local/bin/ctr
③把上面解压的这个文件containerd.service,放到systemd的目录下:"/usr/lib/systemd/system/";

解压文件完整根路径如下:

"/usr/local/bin/etc/systemd/system/containerd.service"

相关推荐
armcsdn8 分钟前
基于Docker Compose部署Traccar容器与主机MySQL的完整指南
mysql·docker·容器
睿思达DBA_WGX8 分钟前
由 DB_FILES 参数导致的 dg 服务器无法同步问题
运维·数据库·oracle
凌晨两点的菜鸡1 小时前
前端部署-docker
前端·docker
vvw&1 小时前
Linux 中的 .bashrc 是什么?配置详解
linux·运维·服务器·chrome·后端·ubuntu·centos
LuckyLay1 小时前
使用 Docker 搭建 Go Web 应用开发环境——AI教你学Docker
前端·docker·golang
袋鼠云数栈1 小时前
使用自然语言体验对话式MySQL数据库运维
大数据·运维·数据库·后端·mysql·ai·数据治理·数栈·data+ai
杨浦老苏2 小时前
IntelliSSH:AI驱动的远程服务器管理软件
人工智能·docker·ai·ssh·群晖
铅笔侠_小龙虾2 小时前
Docker 实战 -- Mysql
mysql·docker·容器
IvanCodes2 小时前
三、Docker常用命令
docker·容器
海星船长丶5 小时前
基于docker进行渗透测试环境的快速搭建(在ubantu中docker设置代理)
运维·docker·容器