安装部署k8s集群
系统: CentOS Linux release 7.9.2009 (Core)
- 准备3台主机
| 192.168.44.148 | k8s-master |
|---|---|
| 92.168.44.154 | k8s-worker01 |
| 192.168.44.155 | k8s-worker02 |
-
3台主机准备工作
关闭防火墙和selinuxsystemctl disable firewalld --nowsetenforce 0sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config关闭swap分区(swap分区会降低性能,所以选择关闭)
参考如下链接:https://blog.csdn.net/dejunyang/article/details/97972399设置node的主机名,并配置/etc/hosts(这样可以方面看到pod调度到哪个node上面)
对应的node配置对应的主机名hostnamectl set-hostname k8s-masterhostnamectl set-hostname k8s-worker01hostnamectl set-hostname k8s-worker02每台node主机都需要执行
cat >> /etc/hosts << EOF 192.168.44.148 k8s-master192.168.44.154 k8s-worker01192.168.44.155 k8s-worker02EOF -
开始安装k8s
-
配置yum源(3台主机都需要操作,使用阿里云yum仓库)
cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF -
安装 kuberneters组件(所有节点安装)
yum -y install kubeadm-1.19.0 kubectl-1.19.0 kubelet-1.19.0 --disableexcludes=kubernetes
--disableexcludes=Kubernetes禁掉除了这个kubernetes之外的别的仓库- 这里安装的是指定版本,不指定版本默认安装最新版本
-
kubelet服务,启动并设置开启自启(所有node执行)
systemctl enable kubelet --now -
所有节点安装docker
yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum -y install docker-ce-19.03.10-3.el7 docker-ce-cli-19.03.10-3.el7 containerd.io docker-compose-pluginnote: K8s使用的是1.19.0版本,官网推荐docker 版本 19.03
启动,并自启docker
systemctl enable docker --nowDocker配置镜像仓库,并修改cgroup驱动为systemd(所有node节点执行)
Cgroups概念 cgroups 的全称是 Linux Control Groups,主要作用是限制、记录和隔离进程组(process
groups)使用的物理资源(cpu、memory、IO 等)。systemd是系统自带的cgroup管理器, 系统初始化就存在的, 和cgroups联系紧密,为每一个进程分配cgroups,
用它管理就行了. 如果设置成cgroupfs就存在2个cgroup控制管理器, 实验证明在资源有压力的情况下,会存在不稳定的情况。由于 kubeadm 把 kubelet 视为一个系统服务来管理,所以对基于 kubeadm 的安装kubernetes, 我们推荐使用
systemd 驱动,不推荐 cgroupfs 驱动。cat > /etc/docker/daemon.json << EOF { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://l72pvsl6.mirror.aliyuncs.com"], "log-opts": {"max-size":"50M","max-file":"3"} } EOF
"exec-opts": ["native.cgroupdriver=systemd"]设置cgroup驱动为systemd"registry-mirrors": ["https://l72pvsl6.mirror.aliyuncs.com"]设置docker镜像仓库为阿里云镜像"log-opts": {"max-size":"50M","max-file":"3"}设置docker容器日志最大为50M,最大文件个数为 3
-
允许 iptables 检查桥接流量
若要显式加载此模块,请运行sudo modprobe br_netfilter通过运行lsmod | grep br_netfilter来验证br_netfilter模块是否已加载sudo modprobe br_netfilterlsmod | grep br_netfilter为了让 Linux 节点的 iptables 能够正确查看桥接流量,请确认 sysctl 配置中的
net.bridge.bridge-nf-call-iptables设置为 1。例如:cat > /etc/modules-load.d/k8s.conf << EOFoverlaybr_netfilterEOFmodprobe overlaymodprobe br_netfilter设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1net.ipv4.ip_forward = 1EOF加载sysctl参数(重启也能生效)
sysctl --system -
修改kubeadm的默认配置
kubeadm config print init-defaults > init-config.yaml 将kubeadm默认的配置保存在文件中,到时候导入配置文件初始化集群修改init-config.yaml(只修改几个关键的部分)
advertiseAddress: 192.168.44.148 imageRepository: registry.aliyuncs.com/google_containers networking:dnsDomain: cluster.localserviceSubnet: 10.96.0.0/12podSubnet: 192.168.0.0/16note:
-
advertiseAddress master与集群通信的ip -
imageRepository: registry.aliyuncs.com/google_containers镜像仓库地址 -
networking下面只添加了 podSubnet:192.168.0.0/16这个参数,其他都是默认;待会要修改CNI文件子网范围和这个一致查看需要拉取的镜像
kubeadm config images list --config=init-config.yaml拉取镜像
kubeadm config images pull --config=init-config.yaml
-
运行kubeadm init 命令安装master 节点
kubeadm init --config=init-config.yaml
note: 可以忽略如下信息
W0131 16:57:45.102290 3727 configset.go:348] WARNING: kubeadmcannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
Your Kubernetes control-plane has initialized successfully! 代表控制平面初始化成功
-
为kubectl 配置证书才能访问master
非root用户配置:mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/configroot用户配置:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile source /etc/profile -
将节点加入到k8s集群
当然,当集群已经成功初始化完成都,最下方会打印出加入集群的代码:
kubeadm join 192.168.44.148:6443 --token abcdef.0123456789abcdef
–discovery-token-ca-cert-hash sha256:88eb2767faaad801ce07501946b510d20bc180fd20cf35c9aa1822b3b345c2ef获取加入node节点的token(master节点执行)
kubeadm token list获取 --discovery-token-ca-cert-hash 值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'固定格式是(注意换成自己的token和hash值):
kubeadm join 192.168.44.148:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:88eb2767faaad801ce07501946b510d20bc180fd20cf35c9aa1822b3b345c2ef如果token过期了,可以在master节点上运行
kubeadm token create打印加入节点的完整命令可以运行
kubeadm token create --print-join-command在所有node节点执行 加入集群的token
根据自己对应的加入集群的tokenkubeadm join 192.168.44.148:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:88eb2767faaad801ce07501946b510d20bc180fd20cf35c9aa1822b3b345c2ef在master节点使用 kubectl get pod -A 查看所有组件是否安装成功,状态是否Runting(需要等待一会)
kubectl get pod -ANAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-6d56c8448f-hsm4m 0/1 Pending 0 16m kube-system coredns-6d56c8448f-z66pp 0/1 Pending 0 16m kube-system etcd-k8s-master 1/1 Running 0 16m kube-system kube-apiserver-k8s-master 1/1 Running 0 16m kube-system kube-controller-manager-k8s-master 1/1 Running 0 16m kube-system kube-proxy-447d7 1/1 Running 0 119s kube-system kube-proxy-9gt2z 1/1 Running 0 16m kube-system kube-proxy-s9hbb 1/1 Running 0 114s kube-system kube-scheduler-k8s-master 1/1 Running 0 16m在master节点使用查看所有节点信息
kubectl get nodesNAME STATUS ROLES AGE VERSION k8s-master NotReady master 17m v1.19.0 k8s-worker01 NotReady <none> 2m48s v1.19.0 k8s-worker02 NotReady <none> 2m43s v1.19.0note:Node节点状态显示 NotReady 因为 还没有安装 CNI(容器网络接口)
-
安装Calico CNI网络插件(在master节点执行)
下载资源文件curl -O https://docs.tigera.io/archive/v3.18/manifests/calico.yaml修改一下pod网段

安装
kubectl apply -f calico.yaml等待一会再次查看pod,node详情
kubectl get nodes,pod -ANAME STATUS ROLES AGE VERSION node/k8s-master Ready master 36m v1.19.0 node/k8s-worker01 Ready <none> 21m v1.19.0 node/k8s-worker02 Ready <none> 21m v1.19.0NAMESPACE NAME READY STATUS RESTARTS AGE kube-system pod/calico-kube-controllers-56c7cdffc6-frc82 0/1 CrashLoopBackOff 6 13m kube-system pod/calico-node-7rxzn 1/1 Running 0 13m kube-system pod/calico-node-dbjhv 1/1 Running 0 13m kube-system pod/calico-node-fsw2d 1/1 Running 0 13m kube-system pod/coredns-6d56c8448f-hsm4m 0/1 Running 0 36m kube-system pod/coredns-6d56c8448f-z66pp 0/1 Running 0 36m kube-system pod/etcd-k8s-master 1/1 Running 0 36m kube-system pod/kube-apiserver-k8s-master 1/1 Running 0 36m kube-system pod/kube-controller-manager-k8s-master 1/1 Running 0 36m kube-system pod/kube-proxy-447d7 1/1 Running 0 21m kube-system pod/kube-proxy-9gt2z 1/1 Running 0 36m kube-system pod/kube-proxy-s9hbb 1/1 Running 0 21m kube-system pod/kube-scheduler-k8s-master 1/1 Running 0 36m目前来看node节点已经就绪了,但是有一个pod报错,2个pod没有准备好,使用kubectl --namespace=kube-system describe pod pod名称 查看pod的事件
kubectl --namespace=kube-system describe pod calico-kube-controllers-56c7cdffc6-frc82报错问题能力有限无法处理,部署基本都是这样。组要是版本差异然后不知道怎么处理!!!
如果知道是什么原因导致的报错,还请不吝赐教。
相关文章:
安装部署k8s集群
系统: CentOS Linux release 7.9.2009 (Core) 准备3台主机 192.168.44.148k8s-master92.168.44.154k8s-worker01192.168.44.155k8s-worker02 3台主机准备工作 关闭防火墙和selinux systemctl disable firewalld --nowsetenforce 0sed -i s/SELINUXenforcing/SELI…...
曲线生成 | 图解B样条曲线生成原理(基本概念与节点生成算法)
目录 0 专栏介绍1 什么是B样条曲线?2 基函数的de Boor递推式3 B样条曲线基本概念图解4 节点生成公式 0 专栏介绍 🔥附C/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等)…...
CyberDAO:web3时代的引领者
Web3.0正在改写着世界运行的规则,AGI将为人类未来的生产效率、工作方式与目标带来改变,区块链经过十余年发展开启了去中心化新格局,带来生产关系的变革。人类正在从过往以时间换取收入、听命完成工作,转变为以个性化、自主追求人生…...
java以及android类加载机制
类加载机制 一、Java类加载机制 java中,每一个类或者接口,在编译后,都会生成一个.class文件。 类加载机制指的是将这些.class文件中的二进制数据读入到内存中并对数据进行校验,解析和初始化。最终,每一个类都会在方…...
【Go】四、rpc跨语言编程基础与rpc的调用基础原理
Go管理工具 早期 Go 语言不使用 go module 进行包管理,而是使用 go path 进行包管理,这种管理方式十分老旧,两者最显著的区别就是:Go Path 创建之后没有 go.mod 文件被创建出来,而 go module 模式会创建出一个 go.mod…...
Linux CentOS系统安装SQL Server并结合内网穿透实现公网访问本地数据
🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默&…...
输入捕获模式测频率PWM输入模式(PWMI)测占空比
一、概念介绍 输出比较: 比较电路输入的CNT、CCR大小关系 ,在通道引脚输出高低电平 二、*频率知识、测量方法补充 * N/fc得到标准频率的时长,也就是待测频率的周期 测频法代码实现:修改对射式红外传感器计次(上升沿…...
解锁VIP会员漫画:用Python爬虫轻松实现高清漫画下载
嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 环境使用: Python 3.10 Pycharm 模块使用: requests >>> pip install requests 数据请求模块 parsel >>> pip install parsel 数据解析模块…...
备战蓝桥杯---动态规划(入门3之子串问题)
本专题再介绍几种经典的字串问题。 这是一个两个不重叠字串和的问题,我们只要去枚举分界点c即可,我们不妨让c作为右区间的左边界,然后求[1,c)上的单个字串和并用max数组维护。对于右边,我们只要反向求单个字串和然后选左边界为c的…...
JavaScript:隐式类型转换与显式类型转换
文章目录 隐式类型转换(Implicit Type Conversion)1、字符串与数字的转换2、非布尔值到布尔值的转换3、在相等性比较中的转换4、对象到基础类型的转换5、在算术运算符中的其他转换 显式类型转换(Explicit Type Conversion)1、Numb…...
【电路笔记】-LR串联电路
LR串联电路 文章目录 LR串联电路1、概述2、示例1所有线圈、电感器、扼流圈和变压器都会在其周围产生磁场,由电感与电阻串联组成,形成 LR 串联电路。 1、概述 在本节有关电感器的第一个文章中,我们简要介绍了电感器的时间常数,指出流过电感器的电流不会瞬时变化,而是会以恒…...
Ansible 自动化运维工具的使用
目录 Ansible的简介 ansible 环境安装部署 ansible 命令行模块 command 模块 shell 模块 cron 模块 user 模块 group 模块 copy 模块 file 模块 hostname 模块 ping 模块 yum 模块 service/systemd 模块 script 模块 mount 模块 archive 模块 unarchive 模…...
亚马逊、ozon、速卖通、Lazada等跨境平台为什么评论老是被删
对于卖家而言,最难的并不是销售量,最难的是让客户在购买后能够留下一个高质量的review,毕竟现在的市场,以listing的排名为基准,以review数量多少和质量的高低来评判店铺的好坏 几乎所有的卖家都会有索评的烦恼&#x…...
手把手带你在Linux上安装带GPU加速的opencv库(C++版本)
1.安装依赖 sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python-dev python-numpy python3-dev python3-numpy sudo apt-get install libtbb2 libtbb-dev libjpeg-dev l…...
【Linux】软件包管理器 yum | vim编辑器
前言: 软件包管理器 yum和vim编辑器讲解 文章目录 软件包管理器 yum编辑器-vim四种模式普通模式批量化注释和批量化去注释末行模式临时文件 软件包管理器 yum yum(Yellowdog Updater, Modified)是一个在基于 RPM(管理软件包的格式和工具集合&…...
vue常见问题
文章目录 data为什么是一个函数,而不是一个对象?什么情况下可以使用对象?key的作用,为什么不能用Index?render函数,h函数,和template什么关系?vue 是怎么解析template的? template会…...
ArcgisForJS基础
文章目录 0.引言1.第一个ArcgisForJS应用程序1.1.安装部署ArcgisForJS1.2.实现ArcgisForJS应用程序 2.开发与调试工具2.1.集成开发环境2.2.调试工具2.3.Firebug 0.引言 ArcGIS API for JavaScript是一款由Esri公司开发的用于创建WebGIS应用的JavaScript库。它允许开发者通过调…...
白话微机:5.解释串行接口以及一些考研面试问题
一. 前言(回顾世界观) 很久很久以前,有这样一个世界,这个世界有着现实世界一样的元素:那里的人又有一个别的名字叫做“数据”,人有0有1;人们也有住房,这些住房在这个世界叫做“存储器…...
版本控制(Git)
Fork 本课程网站的仓库 将版本历史可视化并进行探索是谁最后修改了 README.md文件?(提示:使用 git log 命令并添加合适的参数)最后一次修改_config.yml 文件中 collections: 行时的提交信息是什么?(提示&am…...
USB-C音频转接器:实现边充电边听歌的新选择 | LDR6020P
随着科技浪潮的推进,Type-C接口已逐渐成为电子设备的主流选择,以其正反随意插、高速传输和强大功能等独特优势,在日常生活中占据越来越重要的地位。而Type-C音频转接器,作为连接Type-C接口与音频设备的桥梁,正引领着音…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...
2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...
