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

news2024/10/7 8:31:10

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.gpg
       http://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>&1
  if [ $? -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-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.2.150   #本机ks-m1的ip
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  imagePullPolicy: IfNotPresent
  name: ks-m1
  taints: 
  - effect: NoSchedule
    key: node-role.kubernetes.io/master #节点角色master
---
apiServer:
  timeoutForControlPlane: 4m0s
  certSANs:
  - "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.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 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_METHOD
  value: "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.coloradmin.cn/o/1033766.html

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

相关文章

No2.详解【2023年全国大学生数学建模竞赛】C题——蔬菜类商品的自动定价与补货决策(代码 + 详细输出 + 数据集代码 下载)

只有不回避痛苦和迷茫的人,才有资格去谈乐观和坚定。命运不会厚待谁,悲喜也不会单为你准备。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌟[3] 2022年度博客之星人工智能…

爬虫获取接口数据

上一讲讲的是获取静态网页数据的教程&#xff0c;适用于我们要爬取的数据在网页源代码中出现&#xff0c;但是还是有很多的数据是源代码中没有的&#xff0c;需要通过接口访问服务器来获得&#xff0c;下面我就来讲讲如何爬取这类数据。 以巨潮资讯网爬取比亚迪企业年报为例。…

解决windows端口占用

WINR打开cmd窗口&#xff1b;输入命令查看哪个进程占用&#xff0c;8848为要查询占用的端口号&#xff1a;netstat -ano | findstr 8848&#xff1b; 3.杀死进程&#xff0c;输入taskkill /f /t /im 10672 其中10672为上面命令查出来的进程号。

24. 图论 - 图的表示种类

Hi&#xff0c;你好。我是茶桁。 之前的一节课中&#xff0c;我们了解了图的来由和构成&#xff0c;简单的理解了一下图的一些相关概念。那么这节课&#xff0c;我们要了解一下图的表示&#xff0c;种类。相应的&#xff0c;我们中间需要穿插一些新的知识点用于更好的去理解图…

Python异步编程并发执行爬虫任务,用回调函数解析响应

一、问题&#xff1a;当发送API请求&#xff0c;读写数据库任务较重时&#xff0c;程序运行效率急剧下降。 异步技术是Python编程中对提升性能非常重要的一项技术。在实际应用&#xff0c;经常面临对外发送网络请求&#xff0c;调用外部接口&#xff0c;或者不断更新数据库或文…

漏刻有时数据可视化Echarts组件开发(31):geomap伪3D配置示例

echarts.registerMap("丹东", getData());let data = getData().features.map((item) => {return {name: item.properties.name,};});const points = [[116.289929,40.265374],[116.754101,40.063877],[116.229504,39.764735],[115.883434,39.899721]]let option …

Unity的AB包相关

1、打包 在这个界面左边右键&#xff0c;CreateNewBundle 将要打包的模型制作成预设体 在下面勾选 选好平台路径&#xff0c;点击Build 2、加载AB包 public class ABTest : MonoBehaviour {// Start is called before the first frame updatevoid Start(){//加载AB包AssetB…

pymysql调用存储过程

视频版教程 Python操作Mysql数据库之pymysql模块技术 我们首先创建一个简单的存储过程 DELIMITER //CREATE PROCEDURE test_add(m INT,n INT, OUT result INT) BEGIN SET resultmn;END; //测试&#xff1a; SET s0; CALL test_add(1,2,s); SELECT sPymysql调用存储过程实现&…

从植隆业务中台到金蝶云星空通过接口配置打通数据

从植隆业务中台到金蝶云星空通过接口配置打通数据 数据源系统:植隆业务中台 核心能力以数字化形式沉淀为各种服务中心&#xff0c;其目的是“提供企业能够快速&#xff0c;低成本创新的能力”。业务中台的核心是“构建企业共享服务中心”&#xff0c;其过程是通过业务板块之间的…

代码随想录算法训练营第57天| 647. 回文子串,516.最长回文子序列,动态规划总结

链接: 647. 回文子串 链接: 516.最长回文子序列 链接: 动态规划总结 647. 回文子串 理解dp数组的含义很重 class Solution {public int countSubstrings(String s) {char[] chars s.toCharArray();boolean[][] dp new boolean[s.length()][s.length()];int res 0;// 遍…

FL Studio21水果编曲软件怎么下载中文版?

FL Studio21这款软件在国内被广泛使用&#xff0c;因此又被称为"水果"。它提供音符编辑器&#xff0c;可以针对作曲者的要求编辑出不同音律的节奏&#xff0c;例如鼓、镲、锣、钢琴、笛、大提琴、筝、扬琴等等任何乐器的节奏律动。此外&#xff0c;它还提供了方便快捷…

以小见大,彻底理解 cookie,session,token 之间的关系,通俗易懂

发展史 1、很久很久以前&#xff0c;Web 基本上就是文档的浏览而已&#xff0c;既然是浏览&#xff0c;作为服务器&#xff0c; 不需要记录谁在某一段时间里都浏览了什么文档&#xff0c;每次请求都是一个新的 HTTP 协议&#xff0c;就是请求加响应&#xff0c;尤其是我不用记…

菜单栏图标管理软件Bartender mac 5.0.10中文版介绍

Bartender mac是一款菜单栏图标管理软件&#xff0c;功能强大&#xff0c;可以快速管理菜单栏的图标、显示内容和时间&#xff0c;只需在菜单栏中滑动或滚动、单击菜单栏&#xff0c;或者如果您愿意&#xff0c;只需将鼠标悬停即可立即访问隐藏的菜单栏项目。 Bartender软件介绍…

识别准确率达 95%,华能东方电厂财务机器人实践探索

摘 要&#xff1a;基于华能集团公司大数据与人工智能构想理念&#xff0c;结合东方电厂实际工作需要&#xff0c;财务工作要向数字化、智能化纵深推进&#xff0c;随着财务数字化转型和升级加速&#xff0c;信息化水平不断提升&#xff0c;以及内部信息互联互通不断加深&#x…

AI机器人写作-AI机器人写作技术和工具

在这个数字化时代&#xff0c;文本创作是信息传播的主要方式之一。然而&#xff0c;对于许多人来说&#xff0c;写作可能是一项具有挑战性和耗时的任务。文本创作是广告、文章、社交媒体、小说等领域的核心&#xff0c;但却常常需要大量时间和精力来思考、编写和编辑。许多人可…

Leetcode 剑指 Offer II 045. 找树左下角的值

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底…

C语言指针变量的引用距离

本段代码&#xff0c;测试&#xff0c;C的函数传参中&#xff0c;形参是基础类型参数和地址参数&#xff0c;对于实参的值影响。 #include <stdio.h> add(int a,int b){a;b;printf("add副本a%d\n",a);printf("add副本b%d\n",b);printf("副本ca…

ubuntu右上角的网络连接图标消失解决办法

ubuntu更新了几个文件后&#xff0c;我的ubuntu系统右上角的网络连接图标就消失了&#xff0c;然后怎么也找不到了&#xff0c;怎么办呢&#xff1f; 1、按快捷键ctrlaltt打开终端 2、按以下顺序输入如下的命令行 sudo service network-manager stop sudo rm /var/lib/Netw…

http和https包解析

简介 1.使用工具 bp 2.http和https的resquest和response的包头解析 请求报文 request 请求头 请求行 请求正文和其他的 response 响应包

CRC校验原理与FPGA实现(含推导过程)

CRC校验原理与FPGA实现&#xff08;含推导过程&#xff09; 写在前面一、CRC校验原理1.1 CRC校验基本概念1.2 CRC校验计算1.2.1 发送端CRC校验码计算1.2.1.1 CRC校验码计算方法1.2.1.2 CRC校验码计算例子 1.2.2 接收端CRC校验1.2.2.1 校验通过1.2.2.2 数据段出错1.2.2.3 CRC校验…