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

2024-09-03 00:44

本文主要是介绍K8s搭建过程,新手闭眼入!!!超详细教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、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

这篇关于K8s搭建过程,新手闭眼入!!!超详细教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131539

相关文章

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh