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

在这里插入图片描述

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

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

相关文章

华为HCIA学习(一)

文章目录 一.根据考试题总结知识点&#xff08;一题一点&#xff09;二.上午学习三.下午学习四.今天只做了70题&#xff0c;需要的可以找我 一.根据考试题总结知识点&#xff08;一题一点&#xff09; 二.上午学习 ① VRP系统是VRP是华为公司从低端到高端的全系列路由器、交换…

探讨基于IEC61499 的分布式 ISA Batch 控制系统

ISA SP88 是批次过程控制的标准&#xff0c;对应的IEC标准是IEC 61512。该标准中一个重要的部分是配方管理&#xff08;Recipe Management&#xff09;。 所谓配方&#xff0c;是根据批量产品的要求&#xff0c;材料设定加工工艺&#xff0c;加工流程和参数。类似于传统制造业的…

层次聚类分析

1、python语言 from scipy.cluster import hierarchy # 导入层次聚类算法 import matplotlib.pylab as plt import numpy as np# 生成示例数据 np.random.seed(0) data np.random.random((20,1))# 使用树状图找到最佳聚类数 Z hierarchy.linkage(data,methodweighted,metric…

千呼万唤openGauss资源池化系列培训来了

应openGauss广大用户要求&#xff0c;社区于近期推出openGauss资源池化培训系列。 关于资源池化 资源池化是openGauss 5.0.0 推出的重点特性&#xff0c;是openGauss基于内存池化和共享存储实现的数据库集群。数据在集群的计算节点内存、共享存储中实现共享。应用可以任意节点…

uni-app 之 解决u-button始终居中问题

uView中u-button始终居中问题如何解决的简单方法&#xff1f; 1&#xff1a;给该元素margin-right: 0;可以达到向右靠齐&#xff1b; 2&#xff1a;给该元素的父元素设置float: right image.png <u-button style"width: 50px; margin-left: 0;" plain"t…

DAQ高频量化平台:引领Ai高频量化交易模式变革

近年来&#xff0c;数字货币投资市场掀起了一股热潮&#xff0c;以&#xff08;BTC&#xff09;为代表的区块链技术带来了巨大的商业变革。数字资产的特点&#xff0c;如无国界、无阶级、无门槛、高流动性和高透明度&#xff0c;吸引了越来越多的人们的关注和认可&#xff0c;创…

Dubbo3应用开发—XML形式的Dubbo应用开发和SpringBoot整合Dubbo开发

Dubbo3程序的初步开发 Dubbo3升级的核心内容 易⽤性 开箱即⽤&#xff0c;易⽤性⾼&#xff0c;如 Java 版本的⾯向接⼝代理特性能实现本地透明调⽤功能丰富&#xff0c;基于原⽣库或轻量扩展即可实现绝⼤多数的 微服务治理能⼒。更加完善了多语言支持&#xff08;GO PYTHON R…

指针笔试题讲解(让指针变得简单易懂)

数组名的理解 : 数组名就是首元素地址 但是有两个例外&#xff1a; 1. sizeof&#xff08;数组名&#xff09;这里的数组名表示整个数组的大小&#xff0c;sizeof&#xff08;数组名&#xff09;计算的是整个数组的大小&#xff0c;单位是字节 2. &数组名 这里的数组…

【音视频】ffplay源码解析-PacketQueue队列

包队列架构位置 对应结构体源码 MyAVPacketList typedef struct MyAVPacketList {AVPacket pkt; //解封装后的数据struct MyAVPacketList *next; //下一个节点int serial; //播放序列 } MyAVPacketList;PacketQueue typedef struct PacketQueue {MyAVPacketList …

安防监控系统/视频云存储/监控平台EasyCVR服务器解释器出现变更该如何修改?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

python excel复制数据保留单元格格式(.xls.xlsx)

最近帮朋友开发一个数据excel根据条件动态过率的功能.读取生成用pandas很方便,但是这里有一点比较麻烦的是得保留原来的单元格格式.这点操作起来就要麻烦一点了.下面总结了.xlsx和.xls处理 1.xlsx 文件处理 xlsx文件处理可以使用openpyxl库进行处理,比较简单,流程如下 1.获取…

[hive]搭建hive3.1.2hiveserver2高可用可hive metastore高可用

参考: Apache hive 3.1.2从单机到高可用部署 HiveServer2高可用 Metastore高可用 hive on spark hiveserver2 web UI 高可用集群启动脚本_薛定谔的猫不吃猫粮的博客-CSDN博客 没用里头的hive on spark,测试后发现版本冲突 一、Hive 集群规划(蓝色部分) ck1ck2ck3Secondary…

【虚幻引擎】UE5 VLC接入网络监控、视频直播、网络直播支持RTSP、RTMP

一、如何更新自己的插件匹配自己想要的UE版本 我们在网上下载的插件一般是UE4版本的插件&#xff0c;这个时候就需要我们自己去修改编译&#xff0c;接下来教大家修改插件来适配自己的引擎。 如果不想自己编译代码&#xff0c;可以直接找我拿编译好的UE5.0、UE5.1、UE5.2的插件…

学习路之PHP--laravel postman 提交表单出现419错误

问题图片 解决&#xff1a; 白名单 有时候你可能希望设置一组不需要 CSRF 保护的 URL 。例如&#xff0c;如果你正在使用 Stripe 处理付款并使用了他们的 webhook 系统&#xff0c;你会需要从 CSRF 的保护中排除 Stripe webhook 处理程序路由&#xff0c;因为 Stripe 不知道要发…

swift 天气

定义不同模式主题 自定义颜色 输入框 委托和协议 扩展 协议 http 请求 调用api 闭包

记录crack某IDE插件过程

声明&#xff1a;本文仅记录学习过程&#xff0c;已对关键位置脱敏处理&#xff0c;未提供任何工具&#xff0c;请支持正版。 反编译jar包 使用cfr进行对插件核心jar包MyBxxxxxx-obfuss.jar进行反编译&#xff0c;在本地生成a.txt。 java -jar cfr-0.152.jar MyBxxxx-obfuss.…

用flask框架flask-sock和websocket创建一个自己的聊天界面

WebSocket 协议在10年前就已经标准化了(在2011年&#xff0c;你能相信吗?)所以我相信你不需要介绍。但是如果你不熟悉它&#xff0c;WebSocket 是 HTTP 协议的一个扩展&#xff0c;它在客户端和服务器之间提供了一个永久的、双向的通信通道&#xff0c;在这里双方可以实时地发…

Hugging Face使用Stable diffusion Diffusers Transformers Accelerate Pipelines VAE

Diffusers A library that offers an implementation of various diffusion models, including text-to-image models. 提供不同扩散模型的实现的库&#xff0c;代码上最简洁&#xff0c;国内的问题是 huggingface 需要翻墙。 Transformers A Hugging Face library that pr…

怎么将几张图片做成pdf合在一起

怎么将几张图片做成pdf合在一起&#xff1f;在我们平时的工作中&#xff0c;图片和pdf都是非常重要的电脑文件&#xff0c;使用也非常频繁&#xff0c;图片能够更为直观的展示内容&#xff0c;而pdf则更加的正规&#xff0c;很多重要文件大多会做成pdf格式的。在职场人的日常工…

C# OpenCvSharp 图片模糊检测(拉普拉斯算子)

效果 项目 代码 using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Windows.Forms.VisualStyl…