当前位置: 首页 > news >正文

Centos7 安装部署 Kubernetes(k8s) 高可用集群

1:基础环境准备

宿主机系统集群角色服务器IP主机名称容器
centos7.6master192.168.2.150ks-m1docker
centos7.6master192.168.2.151ks-n1docker
centos7.6master192.168.2.152ks-n2docker

1.1 服务器初始化及网络配置

VMware安装Centos7并初始化网络使外部可以访问**
注意事项:请一定要看完上面这篇文章再执行下面的操作!!!

集群版本说明

  • docker:20.10.8

  • kubeadm version: 1.22.12

  • kubectl version: 1.22.12

  • kubelet version: 1.22.12

2:服务器参数配置

2.1:配置主机名

在192.168.2.150上执行如下:

hostnamectl set-hostname ks-m1 && bash

在192.168.2.151上执行如下:

hostnamectl set-hostname ks-n1 && bash

在192.168.2.152上执行如下:

hostnamectl set-hostname ks-n2 && bash

注意事项:k8s的hostname有一定的命名规则,一般采用小写+横线(-),比如:k8s-test-m1-01,不能使用下划线(_),比如k8s_node_1

2.2:配置hosts文件

依次在192.168.2.150,192.168.2.151,192.168.2.152三台机器执行如下命令

cat >> /etc/hosts << EOF
192.168.2.150 ks-m1
192.168.2.151 ks-n1
192.168.2.152 ks-n2
EOF

2.3:关闭防火墙、selinux、关闭交换分区

依次在192.168.2.150,192.168.2.151,192.168.2.152三台机器执行如下命令

2.3.1:关闭防火墙
systemctl stop firewalld
2.3.2:禁止防火墙开机启动
systemctl disable firewalld
2.3.3:永久关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config

注:重启机器后,selinux配置才能永久生效

2.3.4:永久关闭交换分区swap
sed -ri 's/.*swap.*/#&/' /etc/fstab

注:重启机器后,才能永久生效

2.4: 升级系统内核

依次在192.168.2.150,192.168.2.151,192.168.2.152三台机器执行如下命令

升级内核十分重要,低版本的内核下k8s集群不稳定,且对插件的兼容性不好,例如3.10版本的内核不支持网络插件Calico3.23版本等。

共有两种开机引导模式:bios和uefi,其中uefi引导模式下需要关闭安全引导,否则无法正常开机。

2.4.1:导入public key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
2.4.2:安装epel源
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm -y
2.4.3:查看可用版本内核
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
2.4.4:选择安装lt最新版本
yum --enablerepo=elrepo-kernel install kernel-lt -y
2.4.5:关于内核种类:

kernel-ml中的ml是英文【 mainline stable 】的缩写,elrepo-kernel中罗列出来的是最新的稳定主线版本。

kernel-lt 中的lt是英文【 long term support 】的缩写,elrepo-kernel中罗列出来的长期支持版本。(推荐)

2.4.6:设置内核启动顺序
grub2-set-default 0
2.4.7:重新创建内核配置
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
2.4.8:重启验证
reboot

使用uname -r查看内核版本是否升级成功

uname -r

###修改升级后的内核参数

加载br_netfilter模块

modprobe br_netfilter

验证模块是否加载成功

lsmod | grep br_netfilter

2.5:修改内核参数

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF

2.6:使更改生效

sysctl --system
  • net.bridge.bridge-nf-call-iptables:开启桥设备内核监控(ipv4)

  • net.ipv4.ip_forward:开启路由转发

  • net.bridge.bridge-nf-call-ip6tables:开启桥设备内核监控(ipv6)

以上3项为必须参数,其他参数可根据需要添加。

2.7:配置yum源(采用阿里云repo源)

2.7.1:下载常用的软件

yum clean all && yum makecache  && yum repolist
yum install -y vim net-tools  bash-completion wget lrzsz
yum -y install yum-utils

2.7.2:下载常用的软件配置国内阿里云docker的repo源

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

2.7.3:下载常用的软件 配置安装k8s组件需要的阿里云的repo源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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

2.8:下载常用的软件配置时间同步

安装chronyd

yum install -y chronyd

启动chronyd及加入开机自启

systemctl start chronyd && systemctl enable chronyd 

修改/etc/chrony.conf配置文件,同步服务器地址为阿里云,增加一行(server ntp1.aliyun.com iburst,其余服务地址注释了)

server ntp1.aliyun.com iburst

2.9:下载常用的软件配置IPVS

安装依赖

 yum install  -y ipvsadm ipset sysstat conntrack libseccomp

修改配置文件

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack ip_tables ip_set xt_set ipt_set ipt_rpfilter ipt_REJECT ipip "
for kernel_module in \${ipvs_modules}; do/sbin/modinfo -F filename \${kernel_module} > /dev/null 2>&1if [ $? -eq 0 ]; then/sbin/modprobe \${kernel_module}fi
done
EOF

给权限

chmod 755 /etc/sysconfig/modules/ipvs.modules 

执行

sh /etc/sysconfig/modules/ipvs.modules 

查询是否生效

lsmod | grep ip_vs

3:安装Docker并配置Docker

3.1:安装Docker

yum install docker-ce-20.10.8 docker-ce-cli-20.10.8 containerd.io  -y

3.2:启动docker并设置开机自启

systemctl start docker && systemctl enable docker.service && systemctl status docker

3.3:更改Docker默认配置文件

vim /etc/docker/daemon.json

加入以下内容

{"exec-opts": ["native.cgroupdriver=systemd"]
}

参数说明:

修改docker文件驱动为systemd,默认为cgroupfs,kubelet默认使用systemd,两者必须一致才可以。

3.4:配置文件重新加载&重启docker

systemctl daemon-reload
systemctl restart docker

查看是否生效

docker info |grep Cgroup

在这里插入图片描述

4:下载并安装kubeadm、kubectl、kubelet

4.1:安装依赖

yum install -y kubelet-1.22.12 kubeadm-1.22.12 kubectl-1.22.12

启用

systemctl enable kubelet && systemctl start kubelet && systemctl status kubelet
  • 上面可以看到kubelet状态不是running状态,这个是正常的,不用管,等k8s组件起来这个kubelet就正常了。
  • Kubeadm: kubeadm是一个工具,用来初始化k8s集群的
  • kubelet: 安装在集群所有节点上,用于启动Pod的
  • kubectl: 通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。

4.2:设置Table命令补全

让命令可用自动table键进行补全,对新手无法记住命令提供很好的支持,所在主机进行该操作方可使用table补全。

Kubectl命令补全:

kubectl completion  bash >  /etc/bash_completion.d/kubelet

Kubeadm命令补全:

kubeadm  completion  bash >  /etc/bash_completion.d/kubeadm

5:初始化master节点

注:只在k8s-m1上执行

检测主机环境是否达到集群的要求,可根据结果提示进行逐一排除故障

kubeadm init --dry-run

列出需要使用的镜像列表

kubeadm config images list

5.1:拉取k8s镜像

kubeadm config images pull  \
--image-repository  registry.aliyuncs.com/google_containers \
--kubernetes-version  v1.22.12

5.2:创建kubeadmin-init配置文件

kubeadm config print init-defaults > kubeadm-init.yaml

5.3:编辑配置文件

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 192.168.2.150   #本机ks-m1的ipbindPort: 6443
nodeRegistration:criSocket: /var/run/dockershim.sockimagePullPolicy: IfNotPresentname: ks-m1taints: - effect: NoSchedulekey: node-role.kubernetes.io/master #节点角色master
---
apiServer:timeoutForControlPlane: 4m0scertSANs:- "172.17.0.252"extraArgs:authorization-mode: "Node,RBAC"
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
#controlPlaneEndpoint: 10.0.0.1:6443  #api server负载均衡IP配置(可选)
clusterName: kubernetes
cgroupDriver: systemd
controllerManager: {}
etcd:local:dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.22.12
networking:dnsDomain: cluster.localpodSubnet: 10.244.0.0/16serviceSubnet: 10.10.0.0/16
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs

5.4:初始化集群

kubeadm init --config kubeadm-init.yaml   --upload-certs

注:upload-certs 标志用来将在所有控制平面实例之间的共享证书上传到集群,若是不加会报错.

根据初始化成功后的提示对集群进行基础的配置

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
echo "KUBECONFIG=/etc/kubernetes/admin.conf" >>  ~/.bashrc && source  ~/.bashrc

6:新增Node节点

可通过上一步生成的join串加入

依次在ks-n1,ks-n2执行

kubeadm join *****:6443 --token pa6691.w9a5ucqewqeqwih8p4e8y2g     --discovery-token-ca-cert-hash sha256:cac5dc7e6c559e129bed3aeff757e3ba6da35ewqeqwec4b2734c4833d978c4c1859d5d8  

master查看集群状态:

kubectl get nodes

通过查看集群状态可以看到,状态为NotReady,是因为还未安装网络插件,安装网络插件后就正常了,且node的点的角色为空,就表示这个节点是工作节点。

将ks-n1的ROLES变成work:

kubectl label node ks-n1 node-role.kubernetes.io/worker=worker

将ks-n2的ROLES变成work:

kubectl label node ks-n2 node-role.kubernetes.io/worker=worker

7:安装网络插件Calico

7.1:下载Calico.yaml

curl https://projectcalico.docs.tigera.io/archive/v3.22/manifests/calico.yaml -O

7.2:调整calico.yaml文件

进入vim编辑模式,按/CLUSTER_TYPE 搜索文件内容,找到下面的位置并新增两行配置
在这里插入图片描述

- name: IP_AUTODETECTION_METHODvalue: "interface=ens33" 

更改CALICO_IPV4POOL_IPIP的value为off

注意:在安装calico网络时,默认安装是IPIP网络。calico.yaml文件中,将CALICO_IPV4POOL_IPIP的值修改成 “off”,就能够替换成BGP网络。ens33是根据自己机器的网络来调整的。这样可以避很多calico网络错误。
在这里插入图片描述

提前下载Calico镜像

grep image calico.yaml

在这里插入图片描述

7.3:下载calico相关的镜像

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

7.4:安装Calico网络插件

kubectl apply -f calico.yaml 

查看node节点和pod状态:

kubectl get nodes
kubectl get pods -n kube-system

在这里插入图片描述

相关文章:

Centos7 安装部署 Kubernetes(k8s) 高可用集群

1&#xff1a;基础环境准备 宿主机系统集群角色服务器IP主机名称容器centos7.6master192.168.2.150ks-m1dockercentos7.6master192.168.2.151ks-n1dockercentos7.6master192.168.2.152ks-n2docker 1.1 服务器初始化及网络配置 VMware安装Centos7并初始化网络使外部可以访问*…...

c++加速方法大全

我们平常写代码的时候&#xff0c;经常超时&#xff0c;非常难受&#xff0c;所以&#xff0c;我写了这篇文章&#xff0c;让你的代码提升速度&#xff08;这些方法作者亲测有效&#xff0c;用了这些方法&#xff0c;足足提升了1秒&#xff01;虽然最后题目还是没过&#xff09…...

【国科大卜算】Truck History 最小生成树Prim

Truck History 文章目录 Truck Historyproblem descriptionInputOutputSample个人理解 problem description Advanced Cargo Movement, Ltd. uses trucks of different types. Some trucks are used for vegetable delivery, other for furniture, or for bricks. The company…...

SQLAlchemy映射表结构和对数据的CRUD

目录 ORM模型映射到数据库中 SQLAlchemy对数据的增删改查操作​编辑 构建session对象 添加对象 查找对象 修改对象 删除对象 ORM模型映射到数据库中 用declarative_base根据engine创建一个ORM基类 from sqlalchemy.ext.declarative import declarative_base engine cr…...

Spring boot原理

起步依赖 Maven的传递依赖 自动配置 Springboot的自动配置就是当spring容器启动后&#xff0c;一些配置类、bean对象就自动存入到IOC容器中&#xff0c;不需要我们手动去声明&#xff0c;从而简化了开发&#xff0c;省去了繁琐的配置操作。 自动配置原理&#xff1a; 方案一…...

技术贴 | 深度解析 PostgreSQL Protocol v3.0(二)— 扩展查询

引言 PostgreSQL 使用基于消息的协议在前端&#xff08;客户端&#xff09;和后端&#xff08;服务器&#xff09;之间进行通信。该协议通过 TCP/IP 和 Unix 域套接字支持。 《深度解析 PostgreSQL Protocol v3.0》系列技术贴&#xff0c;将带大家深度了解 PostgreSQL Protoc…...

HDFS编程实践-从HDFS中下载指定文件到本地

前言&#xff1a;Hadoop采用java语言开发&#xff0c;提供了Java Api与HDFS进行交互 先要把hadoop的jar包导入到idea中去 为了能编写一个与hdfs交互的java应用程序&#xff0c;一般需要向java工程中添加以下jar包 1&#xff09;/usr/local/hadoop/share/hadoop/common目录下…...

安防监控视频AI智能分析网关:人流量统计算法的应用场景汇总

TSINGSEE青犀人流量检测算法是内置在智能分析网关中的一种能够通过AI分析和计算人群数量以及密度的算法技术&#xff0c;在提升城市管理效率、改善用户体验和增加安全性方面发挥着重要作用。人流量检测算法在许多领域都有广泛的应用&#xff0c;如智慧城市、智慧交通、智慧景区…...

第一百五十二回 自定义组件综合实例:游戏摇杆三

文章目录 内容回顾优化性能示例代码我们在上一章回中介绍了 如何实现游戏摇杆相关的内容,本章回中将继续介绍这方面的知识.闲话休提,让我们一起Talk Flutter吧。 内容回顾 我们在前面章回中介绍了游戏摇杆的概念以及实现方法,并且通过示例代码演示了实现游戏摇杆的整个过程…...

多线程的学习中篇上

终其一生&#xff0c;满是遗憾 知足且坚定&#xff0c;温柔且上进 总之岁月漫长&#xff0c;然而值得等待 获取当前线程引用 方法说明public static Thread currentThread();返回当前线程对象的引用 currentThread() > 在那个线程中, 就能获取到那个线程的实例. static关键…...

非标准化套利

交易对象&#xff1a;目前使用非标准化组合进行交易。&#xff08;即黄金远近月&#xff0c;焦煤焦炭等等&#xff09; 交易平台&#xff1a;易盛极星极星产品网 手续费研究:白糖期货手续费和保证金2023年09月更新 - 九期网 本人使用的期货交易公司&#xff1a;中信期货&…...

从CNN(卷积神经网络),又名CAM获取热图

一、说明 卷积神经网络&#xff08;CNN&#xff09;令人难以置信。如果你想知道它如何看待世界&#xff08;图像&#xff09;&#xff0c;有一种方法是可视化它。 这个想法是&#xff0c;我们从最后的密集层中得到权重&#xff0c;然后乘以最终的CNN层。这需要全局平均…...

kafka消费者多线程开发

目录 前言 kafka consumer 设计原理 多线程的方案 参考资料 前言 目前&#xff0c;计算机的硬件条件已经大大改善&#xff0c;即使是在普通的笔记本电脑上&#xff0c;多核都已经是标配了&#xff0c;更不用说专业的服务器了。如果跑在强劲服务器机器上的应用程序依然是单…...

布局设计和实现:计算器UI【TableLayout、GridLayout】

一、使用TableLayout实现计算器UI 1.新建一个空白项目布局 根据自己的需求输入其他信息 填写完成后&#xff0c;点击Finish即可 2. 设计UI界面 在res/layout文件夹中的XML文件中创建UI界面。在这个XML文件中&#xff0c;您可以使用TableLayout来设计计算器界面。 2.1 创建l…...

stack与queue的简单封装

前言&#xff1a; stack与queue即栈和队列&#xff0c;先进后出/先进先出的特性我们早已了然于心&#xff0c; 在学习数据结构时&#xff0c;我们利用c语言实现栈与队列&#xff0c;从结构体写起&#xff0c;利用数组或指针表示他们的数据成员&#xff0c;之后再一个个实现他们…...

ChatGPT使用技巧整理

目录 1. 让ChatGPT扮演专家角色2. 告诉ChatGPT你的身份3. 限制ChatGPT的回答长度4. 让ChatGPT一步步思考5. 明确你的要求和目的6. 提供充分的背景信息7. 始终结构化思考你的prompt1. 让ChatGPT扮演专家角色 当你们讨论的是市场营销问题时,你可以要求ChatGPT扮演一个具有20年从…...

机器学习笔记 - 维度诅咒的数学表达

1、点之间的距离 kNN分类器假设相似的点也可能有相同的标签。但是,在高维空间中,从概率分布中得出的点往往不会始终靠近在一起。 我们可以用一个简单的例子来说明这一点。 我们将在单位立方体内均匀地随机绘制点(如图所示),并研究该立方体内测试点的 k 个最近邻将占用多少…...

组合计数训练题解

CF40E 题目链接 点击打开链接 题目解法 首先&#xff0c;如果 n , m n,m n,m 一奇一偶&#xff0c;那么答案为 0 0 0 原因是从行和列的角度分析&#xff0c; − 1 -1 −1 个数的奇偶性不同 可以发现 k < max ⁡ { n , m } k<\max\{n,m\} k<max{n,m} 的性质很微…...

P1095 [NOIP2007 普及组] 守望者的逃离

[NOIP2007 普及组] 守望者的逃离 - 洛谷 首先DP的套路就是先找状态 这题也找不出其他的状态了&#xff0c;只有时间一个 所以用f[i]表示时刻i能走多远 而仔细一想实际上决策只有跑、闪现、停三种决策 然而闪现的耗蓝要和跑步一同计算十分麻烦 于是把它们分开算&#xff1…...

Python函数绘图与高等代数互融实例(八):箱线图|误差棒图|堆积图

Python函数绘图与高等代数互融实例(一):正弦函数与余弦函数 Python函数绘图与高等代数互融实例(二):闪点函数 Python函数绘图与高等代数互融实例(三):设置X|Y轴|网格线 Python函数绘图与高等代数互融实例(四):设置X|Y轴参考线|参考区域 Python函数绘图与高等代数互融实例(五…...

联想y7000 y7000p 2018/2019 不插电源 不插充电器, 直接关机 ,电量一直89%/87%/86%,V0005如何解决?

这种问题&#xff0c;没有外力破坏的话&#xff0c;电池不可能突然出事。这种一般是联想的固件问题&#xff0c;有可能发生在系统更新&#xff0c;或者突然的不正常关机或长时间电池过热&#xff0c;原因我不是很清楚。 既然发生了&#xff0c;根据我收集的解决方法&#xff0c…...

stm32与esp8266通信

esp8266 #include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h>// 测试HTTP请求用的URL // #define URL "http://162.14.107.118:8086/PC/modifyFoodPrice/0/6"// 测试HTTP请求用的URL // 设置wifi接入信息(请根据您的WiFi信息进行修改) const char…...

组合数 2.1 2.2

O(nlogn)预处理&#xff0c; O(1)查询 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std;typedef pair<int, int> PII; typedef long long ll; typedef long double ld;const int N 1000…...

【数组的中心位置】python实现-附ChatGPT解析

1.题目 数组的中心位置 题目 给你一个整数数组 nums,请计算数组的中心位置。 数组中心位置是数组的一个下标,其左侧所有元素相乘的积等于右侧所有元素相乘的积。 数组第一个元素的左侧积为 1,最后一个元素的右侧积为 1。 如果数组有多个中心位置,应该返回最靠近左边的那一个…...

黑马JVM总结(二十三)

&#xff08;1&#xff09;字节码指令-init 方法体内有一些字节&#xff0c;对应着将来要由java虚拟机执行方法内的代码&#xff0c;构造方法里5个字节代码&#xff0c;main方法里有9个字节的代码 java虚拟机呢内部有一个解释器&#xff0c;这个解释器呢可以识别平台无关的字…...

AI人体行为分析:玩手机/打电话/摔倒/攀爬/扭打检测及TSINGSEE场景解决方案

一、AI人体行为分析技术概述及场景 人体姿态分析/行为分析/动作识别AI算法&#xff0c;是一种利用人工智能技术对人体行为进行检测、跟踪和分析的方法。通过计算机视觉、深度学习和模式识别等技术&#xff0c;可以实现对人体姿态、动作和行为的自动化识别与分析。 在场景应用…...

HI_NAS linux 记录

dev/root 100% 占用解决记录 通过下面的命令查看各文件夹 大小 sudo du --max-depth1 -h # 统计当前文件夹下各个文件夹的大小显示为M 最终发现Var/log 占用很大空间 发现下面两个 log 占用空间很大&#xff0c;直接 rm-rf 即可 HI NAS python3 记录 # 安装pip3 sudo apt u…...

计算机图形学中的几何光学

文章目录 前言一、图形学中的光学二、光照模型1、经验型&#xff08;简单&#xff09;2、物理型&#xff08;复杂&#xff09; 前言 在学习Shader光照之前了解一下计算机图形学 一、图形学中的光学 镜面反射的效果例子&#xff1a;物体表面高光 慢反射的效果的例子&#xff1a…...

「UG/NX」BlockUI 选择小平面区域 Select Facet Region

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「UG/NX」BlockUI集合&#x1f4da;全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C」C/C程序设计「Win」Windows程序设计「DSA」数据结构与算法「File」数据文件格式 目录 控件说…...

【完全二叉树魔法:顺序结构实现堆的奇象】

本章重点 二叉树的顺序结构堆的概念及结构堆的实现堆的调整算法堆的创建堆排序TOP-K问题 1.二叉树的顺序结构 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构…...