Kubernetes集群搭建

一、概述

Kubernetes是一个Google开源的全新的分布式容器集群管理系统,由于从第一个字母到字母s中间有8个字母,所以简称K8s。

二、准备

ip角色内存
192.168.187.130master4G
192.168.187.131node2G
192.168.187.132node2G

小提示: 设置静态ip的步骤,请看https://blog.csdn.net/u010132847/article/details/135991017?spm=1001.2014.3001.5501
说明:本次是在Wndow10系统上安装,CentOS是7.9版本。

三、安装

3.1、共性操作

该操作要求每个节点均需执行的操作,包括修改hosts、时间同步、禁用firewalld、禁用selinux、禁用swap、网桥设置和安装K8s等。

3.1.1、修改hosts

$: cat >> /etc/hosts <<EOF192.168.187.130 master192.168.187.131 node1192.168.187.132 node2EOF

3.1.2、时间同步(本次使用chrony方式同步)

$: yum -y install chrony #安装chrony
$: systemctl enable --now chronyd #启动chrony服务
$: vim /etc/chrony.conf #修改配置文件,内容看说明
$: systemctl restart chronyd #重启chrony
$: hwclock -w  #硬件时间向系统时间同步
$: date #查看时间是否正确

说明:编辑文件chrony.conf时,注释已有的server开头的配置,新增“server npt.aliyun.com iburst”.

​ chrony.conf文件原来内容:
在这里插入图片描述
​ chrony.conf文件修改后的内容:
在这里插入图片描述

3.1.3、禁用firewalld

$: systemctl stop firewalld #停止firewalld服务
$: systemctl disable firewalld #开机禁止启动

3.1.4、禁用selinux

$: setenforce 0  #临时关闭
$: vim /etc/selinux/config #永久关闭
...
SELINUX=disabled #值由enforcing改成disabled
...

小提示
​ 1、操作/etc/selinux/config时,将“SELINUX=enforcing”改成“SELINUX=disabled”,并且需要重启后才会生效,如下图。
在这里插入图片描述

3.1.5、禁用swap

$:swapoff -a #临时关闭
$:vim /etc/fstab #永久关闭
...
#/dev/mapper/centos-swap swap  swap    defaults        0 0  ##注释掉这一行
...

在这里插入图片描述
说明:默认情况下,K8s为了追求高性能,不建议使用交换分区,为此它要求每个节点禁用swap,否则各个节点中的kubelet无法运行。

3.1.6、网桥设置

$: cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
EOF
$: systemctl --system  #将设置生效

3.1.7、安装docker

1)安装

$:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$:yum makecache fast
$:yum -y install docker-ce
$:systemctl enable docker && systemctl start docker
$:docker -v

小提示

​ 1、如果执行“yum-config-manager”出现“yum-config-manager: command not found”时,则需要安装,命令如“yum -y install yum-utils”。

注意:yum -y install docker只能安装docker-1.13.x老版本的docker, 2017年后版本有了ce(社区版本)和EE(企业版本),所以新版本使用yum -y install docker-ce。

2)设置镜像地址

为了快速让docker从第三方公共镜像仓库中下载镜像,我们改成阿里云。默认是从国外的网址下载比较慢,我们改成从阿里云下载, 设置daemon.json:

$: mkdir -p /etc/docker
$: tee /etc/docker/daemon.json <<-'EOF'
{"exec-opts":["native.cgroupdriver=systemd"],"registry-mirrors":["https://ha65u7j9.mirror.aliyuns.com"]
}
EOF
$:systemctl daemon-reload && systemctl restart docker #重新加载并重启docker

说明:在某个节点(master节点或node节点)中运行cat /var/lib/kubelet/config.yaml|grep group命令可以看出kubelet默认cgroup驱动为systemd, 而docker默认驱动为cgroupfs,但k8s官网要求docker和kubelet服务中的cgroup驱动必须一致,为此设置daemon.json时添加了"exec-opts":[“native.cgroupdriver=systemd”]配置。

3.1.8、安装K8S

  1. 镜像
$: 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
$: cat /etc/yum.repos.d/kubernetes.repo #查看文件内容是否成功写入
  1. 安装
$:yum install -y kubeadm-1.23.17 kubectl-1.23.17 kubelet-1.23.17
$:systemctl enable kubelet #启动kubelet
$:journalctl -xefu kubelet #查看kubelet运行日志

kubelet运行日志如下:
在这里插入图片描述

3.2、异性操作

K8s环境搭建过程中有些命令需要在不同角色的节点执行,异性操作罗列了不同角色计算机执行的命令。

3.2.1、master操作

  1. 设置hostname:
$: hostnamectl set-hostname master

2)初始化Kubernetes, 保存该命令输出的一个join命令, 该join命令需要在node角色的节点上执行。

$: kubeadm init \
--apiserver-advertise-address=192.168.187.130 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.17 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all

说明

apiserver-advertise-address: 集群通告地址(master机器ip)
image-repository: 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
kubernetes-version: k8s版本,与上面安装的一致
service-cidr: 集群内部虚拟网络,pod统一访问入口
pot-network-cidr: pod网络,与下面部署的CNI网络组件yami中保持一致

提示:执行完命令后,最后的“kubeadm join …”内容需要记下来,后面配置node节点时用到。
在这里插入图片描述

3)环境配置

如果是普通用户执行如下:

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

如果是root用户执行如下:

$: echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
$: source /etc/profile

如果不配置环境变量,则执行时会提示如下错误:

[root@master ~]# kubectl get node
The connection to the server localhost:8080 was refused - did you specify the right host or port?

4)配置flannel

flannel([ˈflænl])和calico([ˈkælɪkoʊ])都是用于k8s节点之间容器网络通信的一个k8s组件,flannel可以为不同node节点的分配不同的子网,实现容器间的跨机通信,从而实现整个kubernetes层级通信。

  1. 下载:
$: cd /opt
$: wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

小提示:如果一直下载不下来,可以在/etc/hosts文件中添加一条“199.232.68.133 raw.githubusercontent.com”再下载(配置后仍让下载不下来,多执行几次可以成功)。

  1. 上传
$: kubectl apply -f /opt/kube-flannel.yml

3.2.2、node操作

1)设置hostname

$:hostnamectl set-hostname node[n]

每个node节点都要执行上面命令,n的值和/etc/hosts文件丛节点相一致。

2)执行kubeadm join命令,该命令是master节点初始化k8s时生成的(在步骤3.2.1的第二步生成的)。

$: kubeadm join 192.168.187.130:6443 --token l8z2iz.yoh8hzigfnlkea4t \--discovery-token-ca-cert-hash sha256:e7386bef149c10542bd2a442079587587175918459501cbc71815db1fb6998c4

提示:出现如下表示节点已经成功加入集群中。
在这里插入图片描述

注意:上面命令中token默认有效时间为24小时,过期后可以在master节点执行kubeadm token create --print-join-command重新创建token

3)环境配置

$: echo "export KUBECONFIG=/etc/kubernetes/kubelet.conf" >> /etc/profile
$: source /etc/profile

3.2.3、查看节点状态

$:kubectl get node

在这里插入图片描述

3.2.4、问题

描述:如果执行kubectl get node命令时发现有些节点一直处于NotReady状态,在这些节点执行journalct -xefu kubelet命令则提示如下错误:

在这里插入图片描述

原因:故障节点没有自动生成/etc/cni/net.d/10-flannel.conflist。

方案:将正常节点上/etc/cni/net.d/10-flannel.conflist拷贝到故障节点对应目录。

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

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

相关文章

信号传输中串扰的影响.

1.导线间的串扰 当导线之间发生串扰时,一根导线上的信号会影响到另一根信号线,给连接的电路造成干扰。这种现象通常发生在平行的导线之间。在设计设备的布线时,特别要注意低电平模拟信号的传输问题。附近导线对其的串扰常常是系统性能下降的主要原因。因此在布线设计时,必须…

seq2seq编码器-解码器实现

我们在之前的文章快速上手LSTM-CSDN博客中提及了RNN的几种不同的类型&#xff0c;其中有同步的 many to many 的根据视频的每一帧对视频分类任务&#xff0c;以及异步的 many to many 文本翻译。对于这种输入和输出不等长的序列&#xff0c;我们采用seq2seq&#xff08;sequenc…

一步步成为React全栈大师:从环境搭建到应用部署

文章目录 第一步&#xff1a;环境搭建第二步&#xff1a;了解React基础第三步&#xff1a;组件与路由第四步&#xff1a;状态管理第五步&#xff1a;接口与数据交互第六步&#xff1a;样式与布局第七步&#xff1a;测试第八步&#xff1a;构建与部署《深入浅出React开发指南》内…

【面试官问】Redis 持久化

目录 【面试官问】Redis 持久化 Redis 持久化的方式RDB(Redis DataBase)AOF(Append Only File)混合持久化:RDB + AOF 混合方式的持久化持久化最佳方式控制持久化开关主从部署使用混合持久化使用配置更高的机器参考文章所属专区

React 面试题

1、组件通信的方式 父组件传子组件&#xff1a;通过props 的方式 子组件传父组件&#xff1a;父组件将自身函数传入&#xff0c;子组件调用该函数&#xff0c;父组件在函数中拿到子组件传递的数据 兄弟组件通信&#xff1a;找到共同的父节点&#xff0c;用父节点转发进行通信 …

一键转换MOV至MP3:轻松删除原视频,释放存储空间!

你是否曾经有一个MOV格式的视频文件&#xff0c;想要提取其中的音频却苦于没有合适的工具&#xff1f;现在&#xff0c;有了我们的全新视频剪辑工具&#xff0c;这个烦恼全部消失&#xff01;我们为你提供一键式解决方案&#xff0c;将MOV视频文件快速转换为MP3音频格式。 首先…

基于单片机的造纸纸浆液位控制系统结构设计

摘要:为适应无人化与高效化制浆造纸生产体系&#xff0c;造纸企业趋于以嵌入式技术优化造纸过 程中的纸浆液位控制系统&#xff0c;以单片机与传感器相互耦合实现纸浆液位控制。本文基于单片机 设计了造纸纸浆液位控制系统&#xff0c;其结构由控制模块、信息采集模块、物联网模…

备战蓝桥杯---搜索(应用入门)

话不多说&#xff0c;直接看题&#xff1a; 显然&#xff0c;我们可以用BFS&#xff0c;其中&#xff0c;对于判重操作&#xff0c;我们可以把这矩阵化成字符串的形式再用map去存&#xff0c;用a数组去重现字符串&#xff08;相当于map映射的反向操作&#xff09;。移动空格先找…

JVM之Java内存区域

JVM-Java内存区域 Java内存区域是Java虚拟机&#xff08;JVM&#xff09;管理的内存资源的逻辑划分&#xff0c;用于存储程序运行时所需的数据。Java内存区域的合理划分和管理对于程序的性能和稳定性具有重要影响。本文将深入探讨Java内存区域的各个部分&#xff0c;包括方法区…

vit细粒度图像分类(九)RAMS-Trans学习笔记

1.摘要 在细粒度图像识别(FGIR)中&#xff0c;区域注意力的定位和放大是一个重要因素&#xff0c;基于卷积神经网络(cnn)的方法对此进行了大量探索。近年来发展起来的视觉变压器(ViT)在计算机视觉任务中取得了可喜的成果。与cnn相比&#xff0c;图像序列化是一种全新的方式。然…

npm ERR! code CERT_HAS_EXPIRED

执行npm i报错&#xff1a; npm ERR! code ETIMEDOUT npm ERR! syscall connect npm ERR! errno ETIMEDOUT npm ERR! network request to https://registry.npmjs.org/react-redux failed, reason: connect ETIMEDOUT 104.16.2.35:443 npm ERR! network This is a problem rel…

使用ESP32-S3对MQ-135空气质量传感器的使用记录(Arduino版)

一、硬件上&#xff1a; 1、使用esp32开发板的04引脚与AO连接&#xff0c;检测AO引脚的电平 二、软件上&#xff1a; 1、使用Arduino快速完成开发 2、源码&#xff1a; // Potentiometer is connected to GPIO 04 (Analog ADC1_CH3) const int adcPin 4;// variable for s…

十大排序算法之堆排序

堆排序 在简单选择排序文章中&#xff0c;简单选择排序这个“铁憨憨”只顾着自己做比较&#xff0c;并没有将对比较结果进行保存&#xff0c;因此只能一遍遍地重复相同的比较操作&#xff0c;降低了效率。针对这样的操作&#xff0c;Robertw.Floyd 在1964年提出了简单选择排序…

再谈Redis三种集群模式:主从模式、哨兵模式和Cluster模式

总结经验 redis主从:可实现高并发(读),典型部署方案:一主二从 redis哨兵:可实现高可用,典型部署方案:一主二从三哨兵 redis集群:可同时支持高可用(读与写)、高并发,典型部署方案:三主三从 一、概述 Redis 支持三种集群模式,分别为主从模式、哨兵模式和Cluster模式。…

YOLOv5改进 | 主干篇 | 反向残差块网络EMO一种轻量级的CNN架构(附完整代码 + 修改教程)

一、本文介绍 本文给大家带来的改进机制是反向残差块网络EMO,其的构成块iRMB在之前我已经发过了,同时进行了二次创新,本文的网络就是由iRMB组成的网络EMO,所以我们二次创新之后的iEMA也可以用于这个网络中,再次形成二次创新,同时本文的主干网络为一种轻量级的CNN架构,在…

记录在树莓派中部署PI-Assistant开源项目(GPT语音对话)的BUG

核心 在部署PI-Assistant&#xff08;https://github.com/Lucky-183/PI-Assistant&#xff09;项目中&#xff0c;首先要进行环境安装&#xff0c;官网文档中提供的安装命令如下&#xff1a; pip install requests arcade RPi.GPIO pydub numpy wave sounddevice pymysql cn2…

MySql 慢SQL配置,查询,处理

一.慢SQL配置相关 1.查看慢SQL是否开启 执行下面命令查看是否开启慢SQL show variables like %slow_query_log; 复制代码 OFF: 未开启ON: 2.打开慢SQL配置 执行下面的命令开启慢查询日志 set global slow_query_logON; 复制代码 3.修改慢查询阈值 前面介绍了SQL执行到达了…

基于RT-Thread(RTT)的HAL库+ADC+DMA多通道采集

前言 在使用到RTT的ADC设备框架进行AD的多通道采集时&#xff0c;发现数据会跳变&#xff0c;觉得可能是没有加DMA的缘故&#xff0c;但RTT好像没有对应的DMA接口函数&#xff08;或者我没找到&#xff09;&#xff0c;故尝试不使用RTT的ADC设备框架&#xff0c;直接使用HAL库…

指针详解(3)

各位少年&#xff0c;大家好&#xff0c;我是博主那一脸阳光&#xff0c;今天介绍 二级指针 指针数组&#xff0c;还有个指针数组模拟二维数组。 前言&#xff1a;在浩瀚的C语言编程宇宙中&#xff0c;指针犹如一把打开内存世界大门的独特钥匙&#xff0c;它不仅是理解程序运行…

React Hooks 学习笔记

1.useState&#xff08;&#xff09; 实现对页面数据的存储&#xff0c;当数据改变时候&#xff0c;自动触发render函数 2.useRef 用来解决两个问题&#xff1a; 1).是获取DOM元素或子组件的实例对象 2).存储渲染周期之间共享的数据 3.useEffect 4.useLayoutEffect 5…