K8s搭建过程,新手闭眼入!!!超详细教程

news2024/11/15 10:40:11

一、k8s搭建harbor仓库

前提:在另一台主机已搭建好harbor私人仓库,之前博客中有详细记录

环境:准备三台主机,一台master,一台node1,一台noed2

1.本地解析

将harbor镜像仓库所在的主机的域名写在所有主机的本地解析中

2.下载安装docker

三台主机都需安装docker

获取docker软件包

https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/Packages

下载时,会失败

原因:企业9默认安装了runc,与docker冲突,需要先卸载 

[root@k8s-master mnt]# dnf remove -y runc

将镜像拷贝至其他主机

3.编写daemon.json文件

三台主机都需完成此操作 

[root@k8s-master ~]# vim /etc/docker/daemon.json 
{
  "registry-mirrors":["https://reg.lm.org"]
}
[root@k8s-master ~]# systemctl daemon-reload 
[root@k8s-master ~]# systemctl enable --now docker

4.复制harbor仓库中的证书并启动docker

reg.lm.org为harbor仓库的域名

5.登录docker

登录失败

问题:关闭harbor仓库时,某些容器好像会出现问题

解决:重启容器编排

# harbor主机
[root@reg ~]# cd harbor/
[root@reg harbor]# docker compose down
[root@reg harbor]# docker compose up -d

账号和密码在harbor主机的harbor.yml文件中

6.从harbor仓库中拉取镜像

二、K8s集群环境搭建

1.三台主机锁住swap交换分区

(1)查看交换分区

[root@k8s-master ~]# systemctl list-unit-files | grep swap

(2)锁住swap.target

(3)注释掉swap分区,避免开机自启

(4)关闭swap

[root@k8s-master ~]# swapoff -a
# 查看,如果什么都没有代表锁住
[root@k8s-master ~]# swapon -s

如果不锁住交换分区,后面kubelet启动不了

3.三台主机安装K8s部署工具

kubelet、kubeadm、kubectl

#部署软件仓库,添加K8S源
[root@k8s-master ~]# vim /etc/yum.repos.d/k8s.repo
[k8s]
name=k8s
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm
gpgcheck=0

#安装软件
[root@k8s-master ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 -y

4.三台主机设置kubectl命令补齐功能

[root@k8s-master ~]# dnf install bash-completion -y
[root@k8s-master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
[root@k8s-master ~]# source  ~/.bashrc

5.三台主机安装cri-docker

k8s从1.24版本开始移除了dockershim,所以需要安装cri-docker插件才能使用docker

软件下载:https://github.com/Mirantis/cri-dockerd

[root@k8s-master ~]# dnf install libcgroup-0.41-19.el8.x86_64.rpm cri-dockerd-0.3.14-3.el8.x86_64.rpm -y
[root@k8s-master ~]# vim /lib/systemd/system/cri-docker.service
# 修改
#指定网络插件名称及基础容器镜像
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=reg.lm.org/k8s/pause:3.9
[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl start cri-docker
[root@k8s-master ~]# ll /var/run/cri-dockerd.sock 
srw-rw---- 1 root docker 0 Sep  2 15:54 /var/run/cri-dockerd.sock

6.拉取K8s需要的镜像(master)

[root@k8s-master ~]# kubeadm config images pull \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.30.0 \
--cri-socket=unix:///var/run/cri-dockerd.sock

7.上传镜像到harbor仓库(master)

注意:需在harbor仓库中创建项目

[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' \
| awk -F "/" '{system("docker tag "$0" reg.lm.org/k8s/"$3)}'

[root@k8s-master ~]# docker images  | awk '/k8s/{system("docker push "$1":"$2)}'	

# 如果出现错误,删除镜像
docker images | awk '/reg.lm.org/{system("docker rmi "$1":"$2"")}'

8.集群初始化(master)

#启动kubelet服务
[root@k8s-master ~]# systemctl start kubelet.service

#执行初始化命令
[root@k8s-master ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 \
--image-repository reg.lm.org/k8s \
--kubernetes-version v1.30.0 \
--cri-socket=unix:///var/run/cri-dockerd.socke

#指定集群配置文件变量
[root@k8s-master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

[root@k8s-master ~]# kubectl get node
NAME        STATUS     ROLES           AGE     VERSION
k8s-master  NotReady   control-plane   4m25s   v1.30.0.0

状态为NotReady,需要网络插件

9.安装flannel网络插件(master)

官方网站:https://github.com/flannel-io/flannel

获取到镜像包后,加载至docker镜像

docker load -i flannel/flannel:v0.25.5
docker load -i flannel/flannel-cni-plugin:v1.5.1-flannel1
#上传镜像到仓库
[root@k8s-master ~]# docker tag flannel/flannel:v0.25.5 reg.lm.org/flannel/flannel:v0.25.5
[root@k8s-master ~]# docker push reg.lm.org/flannel/flannel:v0.25.5

[root@k8s-master ~]# docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1 reg.lm.org/flannel/flannel-cni-plugin:v1.5.1-flannel1
[root@k8s-master ~]# docker push reg.lm.org/flannel/flannel-cni-plugin:v1.5.1-flannel1

#编辑kube-flannel.yml 修改镜像下载位置
[root@k8s-master ~]# vim kube-flannel.yml

#需要修改以下几行
[root@k8s-master ~]# grep -n image kube-flannel.yml
146:        image: reg.lm.org/flannel/flannel:v0.25.5
173:        image: reg.lm.org/flannel/flannel-cni-plugin:v1.5.1-flannel1
184:        image: reg.lm.org/flannel/flannel:v0.25.5

#安装flannel网络插件
[root@k8s-master ~]# kubectl apply -f kube-flannel.yml

10.在master获取节点状态

[root@k8s-master ~]# kubectl get node
NAME         STATUS   ROLES           AGE     VERSION
k8s-master   Ready    control-plane   4h47m   v1.30.0

11.重新生成集群token

[root@k8s-master mnt]#  kubeadm token create --print-join-command
kubeadm join 172.25.254.100:6443 --token tmw6jn.2v2hro4pobvni3i2 --discovery-token-ca-cert-hash sha256:8c66e241ac48ec9f808c3445e7faac50a6063d2065039c6cfcc8ae16dbfeda69 

三、节点扩容

思路:

在所有的worker节点中

1 确认部署好以下内容

2 禁用swap

3 安装:

- kubelet-1.30.0
- kubeadm-1.30.0 
- kubectl-1.30.0 
- docker-ce
- cri-dockerd

4 修改cri-dockerd启动文件添加 

- --network-plugin=cni
- --pod-infra-container-image=reg.timinglee.org/k8s/pause:3.9

5 启动服务

- kubelet.service
- cri-docker.service

节点加入集群 

[root@k8s-node1 ~]# kubeadm join 172.25.254.100:6443 --token tmw6jn.2v2hro4pobvni3i2 --discovery-token-ca-cert-hash sha256:8c66e241ac48ec9f808c3445e7faac50a6063d2065039c6cfcc8ae16dbfeda69 --cri-socket=unix:///var/run/cri-dockerd.sock
[root@k8s-node2 ~]# kubeadm join 172.25.254.100:6443 --token tmw6jn.2v2hro4pobvni3i2 --discovery-token-ca-cert-hash sha256:8c66e241ac48ec9f808c3445e7faac50a6063d2065039c6cfcc8ae16dbfeda69 --cri-socket=unix:///var/run/cri-dockerd.sock

在master查看node状态

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES           AGE     VERSION
k8s-master   Ready    control-plane   5h8m    v1.30.0
k8s-node1    Ready    <none>          4h18m   v1.30.0
k8s-node2    Ready    <none>          3h55m   v1.30.0

完成以上操作,就算是部署K8s完成了

我们再来测试一下

#建立一个pod
[root@k8s-master ~]# kubectl run test --image nginx
pod/test created
#查看pod状态
[root@k8s-master ~]# kubectl get pods
NAME   READY   STATUS              RESTARTS   AGE
test   0/1     ContainerCreating   0          13s
#删除pod
[root@k8s-master ~]# kubectl delete pod

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

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

相关文章

Redis String 类型详解:操作命令、底层编码与使用案例

文章目录 一 . 常见命令1.1 set1.2 get1.3 mset、mget1.4 setnx、setex、psetex1.5 incr、incrby1.6 decr、decrby、incrbyfloat1.7 append1.8 getrange1.9 setrange1.10 strlen小结 二 . string 的编码方式三 . 应用场景3.1 缓存3.2 计数器3.3 共享会话3.4 手机验证码 Hello ,…

# 利刃出鞘_Tomcat 核心原理解析(十一)-- Tomcat 附加功能 WebSocket -- 2

利刃出鞘_Tomcat 核心原理解析&#xff08;十一&#xff09;-- Tomcat 附加功能 WebSocket – 2 一、Tomcat专题 - WebSocket - 案例 - 登录功能 1、在项目 dzs168_chat_room 中&#xff0c;导入 tomcat 项目依赖&#xff08; dzs168_chat_room/web/lib/ &#xff09; idea -…

花生壳的登录及获取二级域名

1、下载花生壳客户端 2、安装完毕 3、扫码登录 4、微信登录花生壳管理后台 5、二级域名的注册 已经帮我们自动生成了一个免费的二级域名。 我们可以用这个二级域名快速的建立网站了。

[YM]课设-C#-WebApi-Vue-员工管理系统 (七)员工统计表

前端&#xff1a; 注&#xff1a;这里主要解释下echarts组件&#xff0c;需要一定的Vue基础 emmmmm 明显能看到上面写“对不起暂未开发” 是的 这个是博主自己加上去的 but 这个统计表也是类似于Element UI的小组件 Element&#xff1a;Element - 网站快速成型工具 &am…

Quartz.Net_依赖注入

简述 有时会遇到需要在IJob实现类中依赖注入其他类或接口的情况&#xff0c;但Quartz的默认JobFactory并不能识别具有有参构造函数的IJob实现类&#xff0c;也就无法进行依赖注入 需要被依赖注入的类&#xff1a; public class TestClass {public TestClass(Type jobType, s…

Python 从入门到实战5(列表的其它操作)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 之前的文章我们通过举例学习了python 中列表的简单操作&#xff0…

虚拟机输入ip addr不显示IP地址

本机配置 Window10 VMware Workstation 17 CentOS 7 虚拟机输入ip addr查询不到ip地址&#xff08;下图&#xff09; 解决办法&#xff1a; 查看配置文件&#xff0c;输入下面命令(用于编辑文件) vi /etc/sysconfig/network-scripts/ifcfg-ens33进入配置配置文件&#xf…

交叉编译 gmp

文章目录 交叉编译 gmp1 概述2 源码下载2.1 官网下载2.2 使用 apt source 下载 3 交叉编译4 关于 DESTDIR 的说明 交叉编译 gmp 1 概述 GMP (GNU Multiple Precision Arithmetic Library) 是一个用于任意精度计算设计的数学库&#xff0c;它的主要目标应用是密码学应用和研究…

ARP协议和DNS的工作原理

ARP协议 ARP协议的工作原理&#xff1a; 首先主机向自己的网络广播发送一个arp请求&#xff0c;请求报文包括目的端的ip地址和目的端的以太网地址。网络上的其他机器收到这个请求&#xff0c;但只有被请求的才会回应一个应答报文&#xff0c;报文中有自己的物理地址。 arp维护了…

【python因果推断库1】协方差分析(ANCOVA)用于处理前/后非等效组设计

目录 生成合成数据 分析 这是一个基于合成数据的初步示例。希望不久之后能用真实研究的数据进行更新。 在只有一次预处理测量和一次后处理测量的情况下&#xff0c;我们可以使用类似于协方差分析(ANCOVA)的方法来分析非等效组设计(NEGD)实验的数据。基本模型是&#xff1a; i指…

Vue(五). 安装脚手架及一些基本配置

文章目录 vue脚手架前言1. 安装脚手架1. 安装nvm2. 使用nvm安装node3. 配置node的全局路径和缓存路径4. 配置npm默认镜像源5. 安装脚手架全局路径和缓存测试 2. 文件结构及项目配置2.1 文件结构2.2 项目基本配置补充. vue项目安装依赖的一个问题 vue脚手架前言 脚手架也叫Vue …

敏捷需求管理,推动敏捷项目成功——Leangoo领歌敏捷工具

在敏捷项目管理中&#xff0c;需求管理是决定项目成功的关键环节。准确捕捉和高效管理需求&#xff0c;不仅能避免项目偏航&#xff0c;还能确保最终交付的产品与客户预期高度契合。Leangoo领歌敏捷工具&#xff0c;正是为此而生&#xff0c;助力团队轻松实现需求管理的每一步。…

vue中使用原生的video播放flv和mp4格式的视频

安装 npm i flv.js html <video v-if"videoId"controls id"videoElement"preload"metadata"controlslist"nodownload noremoteplayback" ><source :type"video/${videoType}" />您的浏览器不支持HTML5视频播…

Ansible一键安装Harbor服务

环境说明 企业内网环境,使用docker-compose的方式安装Harbor服务,需要先安装docker、docker-compose两个服务,将以二进制的方式安装docker和docker-compose,以适配各种安装环境。 docker版本:20.10.21,建议使用20.10以上的版本,低版本的会出现安装异常;Docker-compose版…

记一次ssh伪终端修改为shell

问题 用户ssh进行连接后&#xff0c;默认为伪终端。 解决办法&#xff0c;可以先拿到终端shell&#xff0c;查看用户是否为/bin/bash&#xff1a; 不是/bin/bash&#xff0c;使用如下命令进行修改&#xff1a; chsh -s /bin/bash rootservice sshd restart

在繁忙工作环境中提升开发效率:JetBrains IntelliJ IDEA 的应用

目录 前言1. IntelliJ IDEA 的核心功能1.1 智能代码补全&#xff1a;提升编码效率的利器1.2 深度代码分析&#xff1a;防患于未然1.3 代码重构&#xff1a;保持代码整洁有序 2. 提升团队协作与项目管理2.1 集成版本控制&#xff1a;高效的团队协作2.2 内置任务管理&#xff1a;…

开店到经营,分贝通帮助连锁经营企业这样省钱

如果说大企业的经营核心是做好主营业务的大生意,那么对于连锁经营企业而言,线下门店的一个个小生意,其实也隐藏着“大学问”。费用支出方面,如何从细节处节流,让资金流呈现更良性循环,是连锁经营行业的重要课题。 1、开店前:选址BD全国跑,筐筐发票财务恼 2、日常经营:费用类目…

Qt:玩转QPainter后转之时钟

前言 简单了解了QPainter之后当然是要找两个例子练练手啦。 正文 先看效果图 在绘制之前我们要先构思好自己要绘制的对象可以分成几部分&#xff0c;比如我要绘制时钟的话&#xff0c;我可以分成&#xff1a;外边框(圆环或者圆)&#xff0c;圆形背景&#xff0c;刻度&…

MySQL 使用C语言链接

mysql的基础&#xff0c;我们之前已经学过&#xff0c;后面我们只关心使用 要使用C语言连接mysql&#xff0c;需要使用mysql官网提供的库&#xff0c;大家可以去官网下载 我们使用C接口库来进行连接 要正确使用&#xff0c;我们需要做一些准备工作&#xff1a; 保证mysql服务有…

【WPF】WPF学习之【二】布局学习

WPF布局学习 常用布局Grid网格布局StackPanel 布局CanvasDockPanel布局WrapPanel布局 常用布局 1、StackPanel: 学习如何使用StackPanel进行垂直和水平布局。 2、Grid: 掌握Grid的网格布局技术。 3、Canvas: 了解Canvas的绝对定位布局。 4、DockPanel: 学习DockPanel的停靠…