OpenEuler系统下——k8s离线安装部署

news2024/11/13 13:01:14

简介

K8S是目前已经是业界最为流行的开源技术框架,但是苦于其学习难度较大,并且初学者在开始的时候需要自己进行安装搭建部署,以供后续的学习使用,但是国内经常会出现无法访问外网的官方网站,导致很多镜像和依赖包无法自动安装部署。

本博客主要讲解了如何在离线环境下安装搭建k8s集群,以及最终的验证效果。
部署架构如下:
在这里插入图片描述
具体操作步骤如下:

安装过程

操作系统相关配置(所有服务器执行)

操作系统层面,需要先确保时区为东八区、hostname名称每台服务器均不一致、并且关闭swap
关闭swap

	swapoff -a
	vim /etc/fstab

在这里插入图片描述
在这里插入图片描述

设置时区

timedatectl set-timezone Asia/Shanghai

在这里插入图片描述
设置hostname
每台服务器设置hostname,并且配置/etc/hosts

hostnamectl set-hostname <对应主机hostname名称>

在这里插入图片描述
在这里插入图片描述
配置hosts

		vim /etc/hosts

在这里插入图片描述
在这里插入图片描述
关闭服务器防火墙

systemctl stop firewalld
systemctl disable firewalld

在这里插入图片描述

安装conntrack应用

yum install -y conntrack

在这里插入图片描述
工作节点安装socat

yum install -y socat

在这里插入图片描述

安装基础依赖环境(所有服务器执行)

基础依赖环境已经打包完成,可以点击k8s离线安装包下载安装。或者点击百度网盘下载,提取码:2unp。

文件下载后得到k8s.packages.tgz压缩包,解压后可以得到如下三个文件夹,对应3个不同模块
在这里插入图片描述
将3个目录全部上传到所有服务器的/opt路径下

安装docker
1、 安装docker 环境

cd docker_installer
tar -zxvf docker-26.1.4.tgz
cp docker/* /usr/bin/

在这里插入图片描述
2、安装docker-compose(非必要)

chmod +x docker-compose
cp docker-compose /usr/bin/

在这里插入图片描述
3、docker.service文件

cp docker-config/docker.service /usr/lib/systemd/system

在这里插入图片描述

若没有自己的代理服务器,需要注释掉配置文件中的代理服务器ip。

4、daemon.json文件

mkdir /etc/docker
cp docker-config/daemon.json /etc/docker/

在这里插入图片描述

5、设置docker开机自启动

systemctl start docker
systemctl enable docker

在这里插入图片描述

6、 安装cri-docker容器运行时引擎
创建docker用户组

groupadd docker

在这里插入图片描述

解压二进制文件到: /usr/local/bin

cd /opt/cri-docker_installer
tar -zxvf cri-dockerd-0.3.14.amd64.tgz
cp cri-dockerd/cri-dockerd /usr/local/bin/
cp cri-docker.service /etc/systemd/system/
cp cri-docker.socket /etc/systemd/system/
systemctl start cri-docker
systemctl enable cri-docker

在这里插入图片描述
配置开机自启动
在这里插入图片描述
自此,k8s的依赖环境已经安装完成,可以开始k8s应用主题的安装。

k8s主体应用安装(所有服务器执行)

导入docker镜像

由于k8s镜像国内无法正常访问,安装包中已经打包了k8s主体需要的所有镜像文件,直接加载导入即可

cd /opt/k8s_installer

docker load -i k8s.images.tgz

在这里插入图片描述

k8s组件离线安装

安装cni
mkdir -p /opt/cni/bin
tar -zxvf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin

在这里插入图片描述
保险起见,重启一下cri-docker

systemctl restart cri-docker

在这里插入图片描述

安装crictl
tar -zxvf crictl-v1.30.0-linux-amd64.tar.gz
cp crictl /usr/local/bin

在这里插入图片描述

安装kubeadm、kubelet、kubectl

复制二进制文件到: /usr/local/bin

cp kubeadm /usr/local/bin/
cp kubectl /usr/local/bin/
cp kubelet /usr/local/bin/

在这里插入图片描述

一定要将文件复制到目录而不是移动(mv)到目录,否则会一直启动失败,未查明是什么原因。

上传/usr/lib/systemd/system/kubelet.service文件

cp kubelet.service /usr/lib/systemd/system/

在这里插入图片描述

上传/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf文件

cp -r kubelet.service.d/ /usr/lib/systemd/system/

在这里插入图片描述

上传/etc/sysconfig/kubelet文件

cp sysconfig/kubelet /etc/sysconfig/

在这里插入图片描述

启动kubelet
systemctl enable --now kubelet
systemctl status kubelet

在这里插入图片描述

系统会尝试启动kubelet并且配置开机自启动, 默认会不断重启,直到创建集群为止

为了方便后续的操作,建议配置一下k8s的自动补全功能,操作如下:

yum -y install bash-completion
kubectl completion bash
source /usr/share/bash-completion/bash_completion
echo "source /usr/share/bash-completion/bash_completion" >> ~/.bashrc

在这里插入图片描述

自此,k8s的基础环境已经安装完成,后续需要在master节点上创建k8s集群,并且在worker节点上将工作节点加入该集群

创建K8S集群(其中一台master机器上执行)

主节点创建集群:

kubeadm init \
	--control-plane-endpoint="k8s-master-01" \
	--kubernetes-version v1.30.2 \
	--cri-socket unix:///run/cri-dockerd.sock

在这里插入图片描述

这里需要指定版本为v1.30.2,因为安装包中封装的k8s镜像是v1.30.2版本,若要安装其他版本,需要另行下载其他版本对应的docker镜像包。执行到这个地方的时候,可能会卡主一段时间(大约5分钟左右,根据电脑性能等待时间长度有所不同)
在这里插入图片描述

安装网络插件
集群创建成功后,需要安装集群的网络插件,这里选择使用calico,相关镜像之前已经封装在安装包中,可以直接启动即可。
在这里插入图片描述

cd /opt/k8s_installer/
kubectl apply -f calico.yaml
kubectl get pods -n kube-system

在这里插入图片描述

主节点创建证书:

	kubeadm init phase upload-certs --upload-certs

在这里插入图片描述

保存好上面的证书字符串,后面会用到

配置集群访问:

	mkdir -p $HOME/.kube
	cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
	chown $(id -u):$(id -g) $HOME/.kube/config

第二个主节点加入原有集群:
通过回显内容可以看到具体的加入具体口令,将其复制,并且做适当修改(使其支持docker容器运行时)
在这里插入图片描述
修改后内容如下:

  kubeadm join k8s-master-01:6443 --token 886zto.jlvko62yfrlrymwu \
        --discovery-token-ca-cert-hash sha256:053749d9ab0725d9bad5e09ee67637cb8593f63cd65f8d59ee57e96de7afed05 \
        --control-plane \
        --certificate-key b2cf805959c144f5123202f349bf51712ca5723badbb473a1f98040787400587 \
        --cri-socket unix:///run/cri-dockerd.sock 

将以上命令张贴到第二个主节点服务器上执行即可
在这里插入图片描述
在这里插入图片描述

看到以上内容表明另外一个主节点已经加入集群,可以通过kubelet查看所有节点

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes

在这里插入图片描述
同样,配置一下自动补齐,以便后期使用

	kubectl completion bash
	source /usr/share/bash-completion/bash_completion
	echo "source /usr/share/bash-completion/bash_completion" >> ~/.bashrc
	echo 'source <(kubectl completion bash)' >>~/.bashrc

在这里插入图片描述
工作节点加入集群:
从第一个master节点创建好集群后,可以得到加入集群的口令,如下:
在这里插入图片描述
同样,做出适当修改,添加证书语句和docker兼容语句,得到如下:

kubeadm join k8s-master-01:6443 --token 886zto.jlvko62yfrlrymwu \
        --discovery-token-ca-cert-hash sha256:053749d9ab0725d9bad5e09ee67637cb8593f63cd65f8d59ee57e96de7afed05 \
        --certificate-key b2cf805959c144f5123202f349bf51712ca5723badbb473a1f98040787400587 \
        --cri-socket unix:///run/cri-dockerd.sock 

将其复制到其他所有worker服务器上执行即可
执行结束后,从任意master节点上即可看到所有节点以及对应节点状态
在这里插入图片描述
至此,k8s集群安装完成。

验证集群可用性

上传测试服务启动文件和测试服务镜像(镜像需要上传到所有服务器上,除非docker配置了镜像仓库并且镜像已经加载到docker仓库中)
在这里插入图片描述
测试应用启动文件内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # 告知 Deployment 运行 2 个与该模板匹配的 Pod
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

服务器上自行上传并下载nginx:1.14.2镜像即可。

创建应用,并查看状态
在这里插入图片描述
通过port-forward映射出来效果如下

kubectl port-forward deployments/nginx-deployment --address 0.0.0.0 8888:80

在这里插入图片描述
至此,k8s集群搭建并验证完毕

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1957178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uCore2020 lab1练习一作业

在线环境&#xff08;无需搭建环境即可复现&#xff09; 在线实验指导书uCore2020&#xff0c;有些章节无法访问 文章目录 lab1练习一1、操作系统镜像文件ucore.img生成过程init.o等文件的生成过程bin/kernal的生成过程bin/sign的生成过程bin/bootblock的生成过程bin/ucore.i…

搭建AI无人直播插件

在当今的数字时代&#xff0c;直播已成为一种极为流行的内容传播方式&#xff0c;而人工智能(AI)技术的飞速发展更是为直播行业注入了新的活力。 AI无人直播插件&#xff0c;作为这一趋势下的产物&#xff0c;不仅能够实现24小时不间断的直播内容生成&#xff0c;还能根据观众…

SpringCloud Alibaba 微服务(四):Sentinel

目录 前言 一、什么是Sentinel&#xff1f; Sentinel 的主要特性 Sentinel 的开源生态 二、Sentinel的核心功能 三、Sentinel 的主要优势与特性 1、丰富的流控规则 2、完善的熔断降级机制 3、实时监控和控制台 4、多数据源支持 5、扩展性强 四、Sentinel 与 Hystrix…

Redis 序列化 GenericJackson2JsonRedisSerializer和Jackson2JsonRedisSerializer的区别

GenericJackson2JsonRedisSerializer 和 Jackson2JsonRedisSerializer 是 Spring Data Redis 提供的两种基于 Jackson 的 Redis 序列化器。 它们的主要区别在于序列化和反序列化的方式以及适用的场景。 GenericJackson2JsonRedisSerializer 序列化方式&#xff1a;在序列化对…

为Mac配置Alfred

参考资料&#xff1a; Alfred神器使用手册 | louis blogMacOS神器之Alfred workflow概览GitHub - arpir/Alfred-Workflows-Collection: 一些好用的 Alfred Workflow 一、修改快捷键 Spotlight的默认快捷键是Command Space Alfred的默认快捷键是Option Space 可以将Alfred和…

[网络编程】网络编程的基础使用

系列文章目录 1、 初识网络 网络编程套接字 系列文章目录前言一、TCP和UDP协议的引入二、UDP网络编程1.Java中的UDP2.UDP回显代码案例3.UDP网络编程的注意事项 三、TCP网络编程1.TCP回显代码案例2.TCP多线程使用 总结 前言 在学习完基础的网络知识后&#xff0c;完成跨主机通…

关于 OSPF LSA 序列号范围 0x80000001-0x7FFFFFFF 释疑正本清源

注&#xff1a;机翻&#xff0c;未校对。 正本&#xff1a;RFC 2328 OSPF Version 2 中相关解释 April 1998 12.1.6. LS sequence number 12.1.6. 序列号 The sequence number field is a signed 32-bit integer. It is used to detect old and duplicate LSAs. The space …

set,map(java)

前言&#xff1a;要了解set和map&#xff0c;首先需要对搜索树和哈希有一定的了解&#xff0c;才能进一步深入的了解set和map。 1.搜索树 &#xff08;1&#xff09;性质&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有节点值都小于根节点的值。 若它的右子树不…

事件如何驱动图表运行

状态流图如何响应事件 Stateflow图表仅在以循环方式响应事件时执行。 由于图表在单个线程上运行&#xff0c;因此基于事件发生的操作对该事件是原子性的。图表中由事件引起的所有活动都在执行返回到接收事件之前发生的活动之前完成。一旦事件启动了一个操作&#xff0c;除非被…

全网最全程序员接单网站

程序员客栈-领先的程序员自由工作平台-程序员兼职 (proginn.com) 闲鱼 - 闲不住&#xff0c;上闲鱼&#xff01; (goofish.com) 猪八戒网-品质企业服务 就找猪八戒 (zbj.com) 电鸭社区-专注远程工作招聘交流-远程工作&#xff0c;从电鸭开始 (eleduck.com) 开源众包-百万开发者…

Java台球厅助教教练预约上门到店系统源码

&#x1f3b1;一杆在手&#xff0c;天下我有&#xff01;台球助教教练预约系统&#xff0c;让球技飙升不是梦&#x1f680; &#x1f3af;【开篇&#xff1a;台球爱好者的福音来啦&#xff01;】&#x1f3af; 还在为找不到合适的台球教练而烦恼吗&#xff1f;或是想要在家就…

代码实践思考:C++和Python

起因 在人工智能工具日益强大的今天 如何更高效的进行代码学习 如何借助智能工具实现代码转换&#xff1f; 是否直接可以使用&#xff1f;为何&#xff1f; 如何实现不同的编程语言之间代码的无损转换&#xff1f; x86与arm C 云课五分钟-02第一个代码复现-终端甜甜圈C-CS…

GEE错误——文件导出的时候出现Error: User memory limit exceeded. (Error code: 3)

错误简介 在试图将我的表导出到资产文件夹,但出现了内存错误。我不知道我做错了什么。相同的脚本适用于其他年份。文件导出的时候出现Error: User memory limit exceeded. (Error code: 3) 函数 reduceToVectors(reducer, geometry, scale, geometryType, eightConnected,…

雪花算法的一些问题解析

前言 最近做项目&#xff0c;有些老旧项目&#xff0c;需要生成分布式唯一ID&#xff0c;不允许重复&#xff0c;此时如果要对其他中间件和数据库依赖小&#xff0c;那么就需要一套固定的ID生成规则&#xff0c;雪花算法就正当合适&#xff0c;当时Twitter就是用来存储数据库I…

服务器主机安全有多重要

一、什么是主机安全 主机安全&#xff0c;作为维护计算机系统核心安全的基石&#xff0c;旨在全面捍卫硬件与软件免受任何未经授权的侵扰、篡改、数据泄露等安全挑战。这一过程不仅聚焦于数据存储与处理的保密性、完整性及可用性&#xff0c;还深入至硬件构造、固件层、以及系…

利用C++11的异步操作实现一个线程池

利用C11的异步操作实现一个线程池 利用C11的异步操作实现一个线程池 介绍关于一些代码细节的解释测试 介绍 基于线程池执行任务的时候&#xff0c;入口函数内部执行逻辑是固定的&#xff0c;因此选择std::packaged_task加上std::future的组合来实现。 具体使用可以见我上一…

2025年第7届图像处理和机器视觉国际会议 (IPMV 2025)即将召开!

2025年第7届图像处理和机器视觉国际会议 (IPMV 2025)将于2025年1月10日-12日在中国香港举行。图像处理和机器视觉作为当代信息技术领域的重要分支&#xff0c;不仅推动了人工智能技术的飞速发展&#xff0c;也为各行各业带来了革命性的变革。本次会议旨在汇聚全球图像处理和机器…

极致的灵活度满足工程美学:用Vue Flow绘制一个完美流程图

目录 极致的灵活度满足工程美学&#xff1a;用Vue Flow绘制一个完美流程图 一、环境要求 二、初识Vue Flow 2.1、安装Vue Flow 2.2、Vue Flow构成 2.3、一个小坑 2.4、入门案例 三、Vue Flow优秀的自定义功能 3.1、引入 3.2、节点与连线的自定义 ①打样&#xff08;…

MySQL - 通过SQL语句导出数据到CSV文件

在 MySQL 中&#xff0c;可以使用 SELECT ... INTO OUTFILE 语句将查询结果导出为 CSV 文件&#xff0c;然后再将 CSV 文件转换为 Excel 格式。以下是一个示例&#xff1a; SELECT column1, column2, column3 INTO OUTFILE /path/to/file.csv FIELDS TERMINATED BY , ENCLO…

git 迁移仓库的方法

git Git是一个开源的分布式版本控制系统&#xff0c;由Linus Torvalds在2005年创建&#xff0c;用于有效、高速地处理从小到大的项目管理。它最初是为Linux内核开发而设计的&#xff0c;但很快被广泛用于各种项目。 以下是Git的一些主要特性&#xff1a; 分布式架构&#xff…