kubeadm方式部署k8s最新版本V1.26.2

news2024/10/7 20:34:53

Kubernetes核心概念

Master主要负责资源调度,控制副本,和提供统一访问集群的入口。--核心节点也是管理节点

Node是Kubernetes集群架构中运行Pod的服务节点。Node是Kubernetes集群操作的单元,用来承载被分配Pod的运行,是Pod运行的宿主机,由Master管理,并汇报容器状态给Master,同时根据Master要求管理容器生命周期。

Node节点的IP地址,是Kubernetes集群中每个节点的物理网卡的IP地址,是真是存在的物理网络,所有属于这个网络的服务器之间都能通过这个网络直接通信;

Pod直译是豆荚,可以把容器想像成豆荚里的豆子,把一个或多个关系紧密的豆子包在一起就是豆荚(一个Pod)。在k8s中我们不会直接操作容器,而是把容器包装成Pod再进行管理,运行于Node节点上, 若干相关容器的组合。Pod内包含的容器运行在同一宿主机上,使用相同的网络命名空间、IP地址和端口,能够通过localhost进行通信。Pod是k8s进行创建、调度和管理的最小单位,它提供了比容器更高层次的抽象,使得部署和管理更加灵活。一个Pod可以包含一个容器或者多个相关容器。Pod 就是 k8s 世界里的"应用";而一个应用,可以由多个容器组成。

pause容器每个Pod中都有一个pause容器,pause容器做为Pod的网络接入点,Pod中其他的容器会使用容器映射模式启动并接入到这个pause容器。

Pod Volume,数据卷,挂载宿主机文件、目录或者外部存储到Pod中,为应用服务提供存储,也可以解决Pod中容器之间共享数据。

配置一下本地解析

vim  /etc/hosts

 

安装docker应用

每个节点都需要下载

yum install -y yum-utils device-mapper-persistent-data lvm2 git

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install docker-ce -y

如果使用的挂载磁盘则需要更改docker的数据目录

如果是启动过的docker则需要停止docker服务 然后把  /var/lib/docker/目录下的数据移动到新的目录   mv  /var/lib/docker/  /data/docker/

修改docker默认数据存储目录配置,在/etc/docker/daemon.json文件添加 以下内容,若是没有/etc/docker/daemon.json文件,则新建该文件

vim /etc/docker/daemon.json

{

 "data-root": "/data/docker"

}

systemctl start docker   启动

systemctl enable docker  设置开机自启

关闭swap分区

Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。方法一,通过kubelet的启动参数–fail-swap-on=false更改这个限制。方法二,关闭系统的Swap。

每个节点都需要关闭

swapoff -a

vim /etc/fstab  注释掉SWAP的自动挂载

使用free -m确认swap已经关闭。

 

拉取docker镜像

初始化的时候,它会自动拉取镜像但是自动拉取用的是k8s官网的源地址容易失败所以手动拉取aliyun的镜像注意拉取的docker镜像的版本必须要和kubelet、kubectl的版本保持一致。在下面初始化时直接指定阿里云的镜像

vim dockerpull.sh

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.26.2

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.26.2

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.26.2

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.26.2

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.9.3

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.6-0

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9

bash dockerpull.sh  执行脚本拉取镜像

docker images   看下镜像是否都拉取成功

cri-dockerd安装

注意部署最新版本1.26.2  默认不在是使用docker容器所以需要下载一个插件

所有节点都需要下载

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1-3.el7.x86_64.rpm

rpm -ivh  cri-dockerd-0.3.1-3.el7.x86_64.rpm

修改/usr/lib/systemd/system/cri-docker.service文件中ExecStart配置kubelet使用pause镜像

vim /usr/lib/systemd/system/cri-docker.service

ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

systemctl daemon-reload

systemctl enable --now cri-docker

加载ipvs相关内核模块

vim mod.sh

#!/bin/bash

modprobe ip_vs

modprobe ip_vs_rr

modprobe ip_vs_wrr

modprobe ip_vs_sh

modprobe nf_conntrack_ipv4

modprobe br_netfilter

chmod +x mod.sh

bash   mod.sh

scp mod.sh  k8s-node1:/root/   发送后记得执行一下

scp mod.sh  k8s-node2:/root/ 发送后记得执行一下

vim /etc/rc.local   如果重新开机,需要重新加载(所以写在 /etc/rc.local 中开机自动加载)

chmod +x /etc/rc.local

配置转发相关参数,否则可能会出错

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

sysctl --system   使配置生效

lsmod | grep ip_vs 查看是否加载成功

安装kubeadm和kubelet:

所有节点都需要安装

配置阿里云的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

 scp /etc/yum.repos.d/kubernetes.repo   k8s-node1:/etc/yum.repos.d/kubernetes.repo

 scp /etc/yum.repos.d/kubernetes.repo   k8s-node2:/etc/yum.repos.d/kubernetes.repo

安装

yum makecache fast -y

yum install -y kubelet kubeadm kubectl ipvsadm  #注意,这样默认是下载最新版本

如果想下载旧版本,后面要跟上指定的版本号

yum install -y kubelet-1.22.2-0.x86_64 kubeadm-1.22.2-0.x86_64 kubectl-1.22.2-0.x86_64 ipvsadm  

启动kubelet

systemctl daemon-reload

systemctl enable kubelet && systemctl restart kubelet

systemctl status kubelet查看一下状态你会发现报错误信息;(每个节点都会报错),不用管master节点初始化之后就好了。

配置master节点初始化

kubeadm init --help可以查看命令的具体参数用法

在master节点执行初始化(node节点不用执行)

参数详情:

apiserver-advertise-address  指定apiserver的IP,即master节点的IP

image-repository  设置镜像仓库为国内的阿里云镜像仓库

kubernetes-version  设置k8s的版本,跟步骤三的kubeadm版本一致

service-cidr  这是设置node节点的网络的,暂时这样设置

pod-network-cidr  这是设置node节点的网络的,暂时这样设置

cri-socket  设置cri使用cri-dockerd

kubeadm init --apiserver-advertise-address=192.168.197.136 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.26.2 --service-cidr=10.168.0.0/12 --pod-network-cidr=10.244.0.0/16 --cri-socket unix:///var/run/cri-dockerd.sock  --ignore-preflight-errors=all

执行完初始化的命令 查看一下回显是否成功

echo $?

初始化完成后根据提示的命令操作即可

 mkdir -p $HOME/.kube

 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

 sudo chown $(id -u):$(id -g) $HOME/.kube/config

如果使用的root用户可以操作这条命令

export KUBECONFIG=/etc/kubernetes/admin.conf

kubectl get nodes   操作完以上步骤查看一下node节点已经可以看到master了

配置flannel网络插件

完成master节点的时候k8s已经叫我们去配置pod网络了。在k8s系统上Pod网络的实现需要依赖于第三方插件进行种类有很多我们这里使用的flannel。

cd ~ && mkdir flannel && cd flannel

wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

vim kube-flannel.yml   查看一下镜像版本

 

拉取要用到的镜像所有节点都要拉取

docker pull docker.io/flannel/flannel:v0.21.2

docker pull docker.io/flannel/flannel-cni-plugin:v1.1.2

kubectl apply -f kube-flannel.yml     运行

查看一下master节点的状态

从NoReady  变成了 Ready 那么我们的flannel就部署好了

Node节点加入集群操作命令

Node1 节点操作

kubeadm join 192.168.197.136:6443 --token 8isrry.zd97vxqtsg7vw2dx \

        --discovery-token-ca-cert-hash sha256:e2efbe684211b437d40c03a2e512f31982716caa38b51c7f88f1516c166de76e  --cri-socket unix:///var/run/cri-dockerd.sock

加入node1节点时报错,发现是忘记修改主机名导致的(开始修改过主机名没有这个报错)

所有机器修改一下主机名

 hostnamectl set-hostname k8s-master

 hostnamectl set-hostname k8s-node1

 hostnamectl set-hostname k8s-node2

然后node1节点要删除刚刚生成的证书重新执行加入集群的命名

rm -rf  /etc/kubernetes/pki/ca.crt

Node所有节点操作

kubeadm join 192.168.197.136:6443 --token 8isrry.zd97vxqtsg7vw2dx \

        --discovery-token-ca-cert-hash sha256:e2efbe684211b437d40c03a2e512f31982716caa38b51c7f88f1516c166de76e  --cri-socket unix:///var/run/cri-dockerd.sock

然后来到master节点查看一下node信息

kubectl get nodes

kubectl get pods --namespace kube-flannel    看下flannel运行状态

 

Node两个节点也已经加入成功

 

删除node节点操作

kubectl delete nodes node节点名称

添加已删除node节点操作

1.停止被删除node节点的kubectl systemctl stop kubelet

2.删除相关文件  rm -rf /etc/kubernetes/*

3.添加节点 注意token未失效(token有效期24小时)才能这样操作 kubeadm join 192.168.197.136:6443 --token 8isrry.zd97vxqtsg7vw2dx         --discovery-token-ca-cert-hash sha256:e2efbe684211b437d40c03a2e512f31982716caa38b51c7f88f1516c166de76e  --cri-socket unix:///var/run/cri-dockerd.sock   

 

Token过期后有新的节点加入操作

kubeadm token create --print-join-command Token重新生成的命令

重新生成的token加上 --cri-socket unix:///var/run/cri-dockerd.sock  参数在新节点执行即可

 

 

 

 

 

 

 

 

 

 

 

 

服务器准备:

192.168.197.136  (k8s-master)

192.168.197.137 (k8s-node1)

192.168.197.138 (k8s-node2)

主机名修改

hostnamectl set-hostname k8s-master

hostnamectl set-hostname k8s-node1

hostnamectl set-hostname k8s-node2

关闭防火墙和selinux  

systemctl stop firewalld && systemctl disable firewalld

setenforce 0

vim /etc/selinux/config

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

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

相关文章

测试7年,去过阿里也去过小公司,给你们年轻人一个忠告...

你眼中的软件测试岗位是怎样的&#xff1f;大部分人可能会给出这样的回答&#xff1a;“测试&#xff1f;简单啊&#xff0c;没什么技术含量&#xff0c;无非就是看需求、看业务手册、看设计文档、然后点点功能是否实现&#xff0c;麻烦点的就是测试下部署安装是否出现兼容性问…

分布式事务Seata原理

Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能与简单易用的分布式事务服务&#xff0c;为用户提供了 AT、TCC、SAGA 和 XA 几种不同的事务模式。Seata AT模式是基于XA事务演进而来&#xff0c;需要数据库支持。AT 模式的特点就是对业务无入侵式&#xff0…

【故障定位】基于多元宇宙算法的主动配电网故障定位方法研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

LeetCode 37. 解数独

一、题目描述 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#x…

如果重回大学时光

目录如果重回大学时光1. 多参加社团活动&#xff0c;结交更多的朋友2. 认真考虑专业分流方向3. 根据兴趣和能力选择适合自己的出路4. 为未来做好准备&#xff0c;规划职业发展如果重回大学时光 当前我是一名普通的码农&#xff0c;还有几个月&#xff0c;又将有一批大学生将毕…

vue实现美观大方的动漫、cos、帖子类型网站

一、先上效果图 1.项目demo预览&#xff1a;点击预览 参照半次元的榜单-绘画榜、榜单-COS榜、榜单-写作榜、个人中心、登录注册页面&#xff0c;导航栏等&#xff0c;分别实现页面排版、数据交互、基础框架布局搭建以及自定义vue组件合理的封装及使用。在vue项目开发过程中&a…

梦中情树---二叉树

前言&#xff1a; 今天就来讲树的一种特殊结构---二叉树 当然先来给大家看一张图片 看到这棵树了吗&#xff1f;它从根开始&#xff0c;每个结点都有且仅有两个分支&#xff0c;这个结构就是我们的二叉树。 其实我们上次讲的堆也可以看成一棵二叉树&#xff0c;但是人家的本质…

【python】Jupyter的使用(python代码编辑器)

文章目录一、Jupyter的介绍1、Jupyter是什么&#xff1f;2、Jupyter有什么独特之处&#xff1f;二、Jupyter的安装1、首先要下载python2、用pip命令下载Jupyter三、Jupyter的使用1、运行Jupyter2、简要介绍Jupyter的使用方法3、快捷键的使用四、总结一、Jupyter的介绍 1、Jupy…

安卓系统软键盘初步分析

初步分析的相关日志 复现log: 11-05 14:01:24.768 7991 7991 V InputMethodManager: onViewClicked: true 11-05 14:01:24.768 7991 7991 D InputMethodManager: showSoftInput() viewandroidx.appcompat.widget.AppCompatEditText{bd0acc9 VFED..CL. .F.P..ID 0,0-900,9…

C# 基础:创建、数据类型转换、基本运算符、

VS 快捷键 Ctri K D 代码整理 Ctri KM O 代码收缩 Ctri J 弹出提示 halcon 窗体应用 添加在线第三方库 右键项目名 --> 管理NuGet程序包 halcon 界面&#xff0c;创建选择 添加halcon离线动态链接库 右键引用 --> 添加引用 --> 选择动态链接库 .dll文件 导入…

22勤于思考:gRPC都有哪些优势和不足?

如果你能从专栏的开篇词开始读到这篇文章并且能够在过程中认真思考,那么我相信你目前已经能够对gRPC有了较为充分了解。在专栏的最后几节中,我们抽出一篇文章。来探讨一下gRPC有哪些优势和不足,因为只有这样我们才能取其精华,去其糟粕,学习gRPC框架设计的优点,还能反观出…

NLP领域顶级会议和期刊汇总(附CCF最新推荐目录)

研究NLP需要关注学术界or大厂AI Lab最新的科研动态&#xff0c;了解技术发展的趋势&#xff0c;写论文才能下笔如有神。找到了论文就能找到要复现的代码和要用到的数据集。 掌握科研动态也有助于提早做好产品规划以及技术预研。 对于NLPer而言&#xff0c;了解科研动态最好的方…

总结:网卡

一、背景 经常听到eth0&#xff0c;bond0这些概念&#xff0c;好奇他们的区别&#xff0c;于是有了此篇文章记录下。 二、介绍 网卡&#xff1a;即网络接口板&#xff0c;又称网络适配器或NIC (网络接口控制器)&#xff0c;是一块被设计用来允许计算机在计算机网络上进行通讯…

一把LOL的时间我入门了Go语言

走进 Go 语言~ 前言&#xff1a; Go 语言是由 Google 公司推出的一款新的编程语言&#xff0c;作为谷歌的亲儿子&#xff0c;发展势头迅猛&#xff0c;各个大厂目前都在积极推进 Go 语言的使用。Go 是云计算、云原生、区块链等众多前沿领域的首推语言&#xff0c;目前流行的 …

RocketMQ-01

1. MQ介绍 1.1 为什么要用MQ 消息队列是一种“先进先出”的数据结构 其应用场景主要包含以下3个方面 应用解耦 系统的耦合性越高&#xff0c;容错性就越低。以电商应用为例&#xff0c;用户创建订单后&#xff0c;如果耦合调用库存系统、物流系统、支付系统&#xff0c;任…

Python学习笔记--数据容器

&#xff08;一&#xff09; 数据容器入门 1. 数据容器&#xff1a;一种可以容纳多份数据的数据类型&#xff0c;容纳的每一份数据称之为一个元素。每一个元素&#xff0c;可以是任意类型的数据&#xff0c;如字符串、数字、布尔等。 2.. 种类&#xff1a;list&#xff08;列表…

MongoDB:常见的面试题和答案

1. 什么是MongoDB&#xff1f; MongoDB是一种非关系型数据库&#xff0c;被广泛用于大型数据存储和分布式系统的构建。MongoDB支持的数据模型比传统的关系型数据库更加灵活&#xff0c;支持动态查询和索引&#xff0c;也支持BSON格式的数据存储&#xff0c;这种格式可以支持读…

Go语言流处理,工厂模式,命令参数,序列化,单元测试

IO流 流就是数据在数据源和程序之间经历的路径。数据源可以是文件数据库或者键盘输入等&#xff0c;程序是运行在内存中的应用。 数据从数据源输入到程序的路径为输入流&#xff0c;从内存输出到数据源的路径为输出流。 流是以内存为核心&#xff0c;输入到内存就是输入流&am…

网络原理——IP地址与mac地址

目录 IP地址 IP地址 IP地址的组成 子网掩码 mac地址 冲突域与广播域 数据传输流程 IP地址 IP地址 互联网协议地址。每一个联网的主机都会分配一个IP地址。为32位二进制数&#xff0c;用4个.均分为四部分&#xff0c;在命令提示符中输入&#xff1a;ipconfig命令&#…

35岁的测试工程师被公司强行辞退,感叹道:我以前就该好好努力了

曾经的高薪软件测试工程师&#xff0c;今年35岁了&#xff0c;被公司劝退了&#xff0c;外卖跑到凌晨&#xff0c;很累&#xff0c;但还是有一种想诉说的冲动。哪怕让大家觉得已经说得太多了&#xff0c;烦了&#xff0c;都成祥林嫂了&#xff0c;但是&#xff0c;我是真的想说…