2.K8s集群搭建

news2024/11/15 8:29:11

K8s搭建

        • 搭建方案
        • kubeadm搭建
        • 系统初始化操作
        • k8s Master节点初始化
        • 将node节点加入集群
        • 安装网络插件Calico
        • 集群测试

搭建方案

minikube:轻量化的Kubernetes集群,为了能够更好学习和体验k8s功能而推出的,借助个人PC的虚拟化环境就可以实现Kubernetes的搭建

kubeadm :是一个 k8s 部署工具,用于快速部署 Kubernetes 集群。

二进制安装:如果想更容易可控,推荐使用二进制包部署

其他


kubeadm搭建

1.准备服务器三台

k8smaster 	192.168.10.13	2核、2G、30G
k8snode1	192.168.10.11	 2核、2G、30G
k8snode2	192.168.10.12	 2核、2G、30G

2.系统环境准备

centos7
docker 20+
k8s 1.23.6

3.搭建步骤

1.系统初始化操作

2.所有节点安装基础软件
安装 Docker
添加阿里云 yum 源 
安装kubeadm、kubelet、kubectl

3.部署Kubernetes Master

4.加入 Kubernetes Node

5.部署 CNI 网络插件 

6.测试 kubernetes 集群

系统初始化操作

在各节点执行以下初始化操作

1.关闭防火墙
关闭防火墙并且设置开机不启动

systemctl stop firewalld
systemctl disable firewalld

2.关闭SELINUX
关闭seLinux,getenforce是获取seLinux的状态
getenforce
直接修改文件,改为SELINUX=disabled,重启之后生效
vim /etc/selinux/config
或者
sed -i 's/enforcing/disabled/' /etc/selinux/config

3.关闭swap
临时关闭
swapoff -a
修改/etc/fstab文件永久关闭,将文件中/dev/mapper/centos-swap swap行注释即可,也可以直接运行下面这条命令
sed -i '/swap/ s/^\(.*\)$/#\1/g' /etc/fstab

sed -ri 's/.*swap.*/#&/' /etc/fstab

4.设置主机名
hostnamectl set-hostname k8smaster

5.修改hosts文件

192.168.10.13	k8smaster
192.168.10.11	k8snode1
192.168.10.12	k8snode2

6.做时间同步

yum install ntpdate -y 
ntpdate ntp.aliyun.com

如果时区不对

查看一下时区 
timedatectl 
设置时区为亚洲上海
timedatectl set-timezone Asia/Shanghai

设置半个小时同步一次
*/30 * * * * /usr/sbin/ntpdate ntp.aliyun.com &> /dev/null

7.修改内核参数以满足k8s的运行需求

cat > /etc/sysctl.d/k8s.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF

sysctl --system #重新加载,让上面的配置生效

8.安装docker
k8s 1.24版本已经放弃了docker作为容器运行时软件,要使用docker作为容器运行时软件,
要安装1.23以下的版本,然后k8s1.23版本支持的最新docker是20.10

安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

指定版本安装docker
yum install -y docker-ce-20.10.0 docker-ce-cli-20.10.0 containerd.io


----------------------------------------------------------------------------------------------------------------
查找Docker-CE的版本:
yum list docker-ce.x86_64 --showduplicates | sort -r

Loading mirror speeds from cached hostfile
 Loaded plugins: branch, fastestmirror, langpacks
docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
Available Packages

安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
sudo yum -y install docker-ce-[VERSION]

9.修改docker的默认cgroup引擎(修改完需要重启docker)
docker与k8s需要是同一个驱动,需要改为systemd

cat <<EOF > /etc/docker/daemon.json
{"registry-mirrors": [
                "https://hub-mirror.c.163.com",
                "https://docker.m.daocloud.io",
                "https://ghcr.io",
                "https://mirror.baidubce.com",
                "https://docker.nju.edu.cn",
                "https://lzlnfm7q.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

重启docker
systemctl restart docker

10.添加k8s yum源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

11.建立 k8s YUM 缓存
yum makecache

12.查看可安装版本
yum list kubelet --showduplicates
在这里插入图片描述

13.安装CoreDNS,每个节点执行一次
在集群内提供DNS服务

docker pull coredns/coredns:1.8.6
docker tag coredns/coredns:1.8.6 registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.6
docker rmi coredns/coredns:1.8.0

14.安装kubeadm,kubelet,kubectl(指定版本)
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
在这里插入图片描述

15.设置kubelet开机自启动
systemctl enable kubelet


k8s Master节点初始化

k8s 初始化(在Master 节点执行)

kubeadm init \
--apiserver-advertise-address=192.168.10.13 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.96.0.0/12 
--pod-network-cidr=10.0.0.0/16 \

参数说明:

--apiserver-advertise-address  # 集群master节点地址
--image-repository             # 指定k8s镜像仓库地址
--kubernetes-version           # 指定K8s版本(与kubeadm、kubelet版本保持一致)
--service-cidr                 # Pod统一访问入口
--pod-network-cidr             # Pod网络(与CNI网络保持一致)


–pod-network-cidr设置时一定要注意,它不能与集群节点的地址在一个子网中
否则后续coredns状态始终处于0,无法正常运行

在这里插入图片描述

查看命令执行后的提示信息,看到 Your Kubernetes control-plane has initialized successfully!
说明我们 master 节点上的 k8s已经搭建成功。

查看命令执行后的提示信息,可以看到三条命令:
开启 kubectl 工具的使用(该命令在 master 节点中执行)。

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

在这里插入图片描述

执行kubectl get node命令查看节点状态
在这里插入图片描述


将node节点加入集群

在Kubernetes中,将新的节点(node)加入到现有的集群中,通常需要执行以下步骤:
确保新节点已安装Docker、kubelet、kubeadm和kubectl。
在主节点上,通过kubeadm token create命令创建一个加入令牌。
使用kubeadm token print-join-command命令获取加入集群的kubeadm命令。
在新节点上执行该命令。


1.登录master节点,获取加入命令
kubeadm token create --print-join-command

会输出类似以下格式的命令
kubeadm join <CONTROL_PLANE_IP>:<PORT> --token <TOKEN> --discovery-token-ca-cert-hash sha256:<HASH>

在这里插入图片描述

2.登录node节点
执行刚才生成的加入命令
在这里插入图片描述

如果在node节点上执行kubectl get node
The connection to the server localhost:8080 was refused - did you specify the right host or port?

在这里插入图片描述
就执行一遍开启 kubectl 工具的命令

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

如果报
cannot stat ‘/etc/kubernetes/admin.conf’: No such file or directory

就将master节点上的该文件拷贝到node节点上去
scp /etc/kubernetes/admin.conf root@192.168.10.12:/etc/kubernetes/admin.conf

再执行kubectl get nodes 就可以看到新加入集群的节点了
在这里插入图片描述

同理,将其它的节点也加入到集群

在这里插入图片描述


安装网络插件Calico

节点为NotReady状态,因为完成互通还需要安装CNI(网络插件)

CNI 全称“Container Networking Interface”,即容器网络接口,它提供了一种标准的插件机制,用于连接容器到底层网络。

Flannel:一个简单易用的网络解决方案,支持多种部署模式。
Calico:一个高度可扩展的容器网络方案,旨在为大规模生产环境提供网络和安全性。
Weave Net:一个分布式的容器网络方案,具有良好的可扩展性和高度自动化的管理。


在master节点运行

wget https://docs.projectcalico.org/v3.20/manifests/calico.yaml --no-check-certificate

vim /opt/calico.yaml
一定注意yaml文件格式

修改文件里面的定义Pod网络(CALICO_IPV4POOL_CIDR)的值,
要与前面master节点初始化时kubeadm init的–pod-network-cidr指定的一样
在这里插入图片描述

Cluster type to identify the deployment type
添加IP_AUTODETECTION_METHOD值为interface=ens33,ens33是网卡

- name: IP_AUTODETECTION_METHOD
  value: "interface=ens33"

在这里插入图片描述

apiVersion: policy/v1beta1改为apiVersion: policy/v1
在这里插入图片描述

网络原因,镜像下载速度较慢,如果直接执行
kubectl apply -f calico.yaml 时会受影响,可以提前在所有的节点上下载好镜像

docker pull docker.io/calico/pod2daemon-flexvol:v3.20.6
docker pull docker.io/calico/node:v3.20.6
docker pull docker.io/calico/kube-controllers:v3.20.6
docker pull docker.io/calico/cni:v3.20.6

部署
kubectl apply -f calico.yaml

后续不想用这个配置文件,可以卸载掉
kubectl delete -f calico.yaml

在这里插入图片描述

查看节点状态
都变成Ready状态了
在这里插入图片描述

查看pod信息
kubectl get po -n kube-system

kubectl get pods --all-namespaces
执行结束要等一会才能全部running
运行状态,1代表运行中

在这里插入图片描述


如果发现pod状态是 0,可以根据命令查看原因
kubectl describe pods -n kube-system pod-name

或查看以下这个pod的日志
kubectl logs pod-name -n kube-system

如果pod状态STATUS一直 ContainerCreating 的情况:

可以尝试卸载 master、node节点上所有 calico 的安装信息。然后重启kubelet

rm -rf /etc/cni/net.d/*
rm -rf /var/lib/cni/calico
systemctl restart kubelet

在这里插入图片描述


集群测试

在 Kubernetes 集群中部署nginx镜像,验证是否正常运行
在master节点上执行以下操作

kubectl create deployment nginx --image=nginx
在这里插入图片描述

对外暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
在这里插入图片描述
为nginx服务创建了service,然后暴露容器内80端口

查看暴露的端口信息
kubectl get pod,svc
80端口映射到了30340端口
在这里插入图片描述

发送请求
都可以正常访问,集群搭建完成

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

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

相关文章

如何使用ssm实现基于java web的网上书城系统的设计与实现+vue

TOC ssm123基于java web的网上书城系统的设计与实现vue JAVA简介 Java主要采用CORBA技术和安全模型&#xff0c;可以在互联网应用的数据保护。它还提供了对EJB&#xff08;Enterprise JavaBeans&#xff09;的全面支持&#xff0c;java servlet API&#xff0c;JSP&#xff…

【Redis】Redis客户端——Jedis(Java)

Redis Java使用案例 环境配置引入依赖配置端⼝转发连接 Redis Server Java基础代码操作Redisset 和 getexsits 和 del 环境配置 引入依赖 Java 操作 redis 的客⼾端有很多. 其中最知名的是 jedis. 创建 maven 项⽬, 把 jedis 的依赖拷⻉到 pom.xml 中. <!-- https://mvnr…

ssrf--web-ssrfme例题

将web-ssrfme.zip解压缩在Ubuntu下 Docker-compose up -d 更新后的镜像重新启动容器 可以看到已经拉取成功ssrfme镜像 我们使用端口访问文件&#xff0c;可以看到有一个过滤条件&#xff0c;它限制了file&#xff0c;dict协议&#xff0c;127.0.0.1和localhost 也不能用&…

【55-90】结构型模式

目录 一.结构型模式概述 二.代理模式 2.1 概述 2.2 结构 2.3 静态代理 2.4 JDK动态代理 2.5 CGLIB动态代理 2.6 三种代理的对比 2.7 优缺点 三.适配器模式 3.1 概述 3.2 结构 3.3 类适配器模式 3.4 对象适配器模式 3.5 应用场景 四.装饰者模式 4.1 概述 4.2 结…

从并发20到并发120之laravel性能优化

调优成果 遇到问题 单台服务并发20&#xff0c;平均响应时间1124ms&#xff0c;通过htop观察&#xff0c;发现cpu占用率达到100%&#xff08;包括sleep的进程&#xff09;&#xff0c;内存几乎没怎么用。 调优后 单机最大吞吐量达到120 响应时长不超过1000ms 硬件信息 …

数学建模----线性回归分析(引入热力图的绘制方法)

目录 0.直击重点 1.一元线性回归分析 1.1散点图的绘制 1.2相关性的分类 1.3计算相关系数 1.4模型的检验 1.5模型的预测 2.多重线性回归分析&#xff08;上&#xff09; 2.1多重线性的概念 2.2散点图的分类 2.3热力图的绘制 2.4根据结果确定新的变量 3.多重线性…

【开端】 如何判断手机号码属于哪个国家(手机号判断正则)汇总

import org.apache.commons.lang3.StringUtils; /** * 手机号判断正则 */ public enum MobileRegularExp { /** * 国家 正则 */ CN("中国", 86, "^(\\?0?86\\-?)?1[3456789]\\d{9}$"), TW("中国台湾", 886, "…

第七节 循环结构;goto语句

目录 7.1 while循环 7.1.1 if 和 while的对⽐ 7.1.2 while的执行流程 7.1.3 while的练习 7.2 for循环 7.2.1 语法形式 7.2.2 for循环的执⾏流程 7.2.3 for 循环的练习 7.3 while 和 for 循环的对比 7.4 do while 循环 7.4.1 do while 的语法形式 7.4.2 do while循…

Jamba前生今世:1.5开源来袭

AI21服务于企业&#xff0c;为企业构建基础模型和AI系统以加速GenAI在生产中的使用。AI21 成立于2017年&#xff0c;已从NVIDIA、Intel、Google等公司共筹集了3.36亿美元。它是最早将生成式AI推向大众的公司之一&#xff0c;借助AI21平台&#xff0c;企业可以构建自己的生成式A…

菲菲更名宝贝:批量处理,文件命名不再繁琐

你是否有这样的经历&#xff1f;曾几何时&#xff0c;在堆积如山的文件中迷失方向&#xff0c;为了一个个手动重命名文件而加班到深夜&#xff1f;是否渴望有一种魔法&#xff0c;能瞬间让你的文件整理得井井有条&#xff0c;让繁琐的命名工作变得轻松愉快&#xff1f;那么&…

大数据毕业设计开题报告100例

文章目录 &#x1f6a9; 1 前言1.1 选题注意事项1.1.1 难度怎么把控&#xff1f;1.1.2 题目名称怎么取&#xff1f; 1.2 开题选题推荐1.2.1 起因1.2.2 核心- 如何避坑(重中之重)1.2.3 怎么办呢&#xff1f; &#x1f6a9;2 选题概览&#x1f6a9; 3 项目概览题目1 : 深度学习社…

前端网站优化-Brotli 压缩

杨绛先生说:“岁不声不响&#xff0c;你且不慌不忙。在凡俗的烟火里&#xff0c;愿以素心&#xff0c;阅来日方长。生活总是一地鸡毛&#xff0c;繁杂琐碎的日常&#xff0c;无力掌控的局面&#xff0c;以及猝不及防的变化&#xff0c;让日子多了几分慌张”。 市井长巷&#xf…

ssrf漏洞复现

环境搭建 zhuifengshaonianhanlu/pikachu: 一个好玩的Web安全-漏洞测试平台 (github.com) 直接将其复制到linux环境下拉取docker就行 我这里已经拉去过了&#xff0c;如果拉去速度慢话&#xff0c;可以在/etc/docker下的daemon.json中配置镜像加速 vim /etc/docker/daemon.js…

大模型学习笔记 - LLM 对齐优化算法 DPO

LLM - DPO LLM - DPO DPO 概述DPO 目标函数推导DPO 目标函数梯度的推导 DPO 概述 大模型预训练是从大量语料中进行无监督学习&#xff0c;语料库内容混杂&#xff0c;训练的目标是语言模型损失&#xff0c;任务是next token prediction&#xff0c;生成的token 不可控&…

MyBatis-Plus分页插件使用详解

一、简述 在使用mybatis开发项目的时候我们通常使用pagehelper来进行分页操作&#xff0c; 但是我们在使用MyBatis-Plus 开发时&#xff0c;MyBatis-Plus内置已经有分页功能了&#xff0c;其实不需要在额外引入pagehelper依赖了&#xff0c;而且两者同时引入有时候还会导致分页…

主流商品API接口在电商跨境电商企业应用/项目中的重要作用

618狂欢已经开启&#xff0c;为了获取更大利益&#xff0c;电商商家应使用价格接口系统。价格接口对电商商家有多方面的好处&#xff0c;主要体现在以下几个方面&#xff1a; 1、价格接口系统可以帮助品牌和商家实现更加科学和精准的定价策略。通过实时获取多个主流电商平台&a…

公众号里面的试卷怎么打印

经过我们的观察发现&#xff0c;微信公众号中的试卷通常有两种形式&#xff1a;图片和文档。如果试卷是以图片的形式嵌入在文章中作为配图&#xff0c;您只需点击图片并长按&#xff0c;选择“保存图片”到手机中。之后&#xff0c;您可以选择任何方便的方式完成打印。 不过&am…

ELK企业级日志分析系统(分布式文件系统与企业级应用)

一、ELK 概述 1、ELK简介 ELK平台是一套完整的日志集中处理解决方案&#xff0c;将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用&#xff0c; 完成更强大的用户对日志的查询、排序、统计需求。 ElasticSearch 是基于Lucene&#xff08;一个全文检索引擎的架构…

笔记整理—uboot启动过程(4)BL2干了什么及内存排布

uboot的第一阶段结束于start_armboot&#xff0c;第二阶段的uboot代码主要负责soc外部硬件&#xff08;inand、网卡、......&#xff09;、uboot本身构建&#xff08;uboot指令、环境变量、......&#xff09;最后进入命令行&#xff0c;等待命令然后倒数&#xff0c;等待bootc…

Pytest框架环境切换实战教程

测试人员每天都跟不同的环境打交道&#xff0c;比如线上环境&#xff0c;测试环境&#xff0c;预上线环境等等&#xff0c;那么作为自动化测试人员写的代码&#xff0c;我们也要具备能自由切换环境的能力&#xff0c;那么今天小编就给大家聊一下&#xff0c;如何能让我们python…