kubeadm部署K8S

部署二主二从

主1:192.168.116.17

主2:192.168.116.18

从1:192.168.116.12

从2:192.168.116.13

注意事项:

master节点的cpu核心数必须要求大于2

K8S最新版本并不一定是最好的,相对于旧版本,核心功能稳定,但是新增功能、接口相对不稳

宿主机尽量升级到centos7.9版本

内核kernel升级到4.19+这种稳定的内核

环境准备

//所有节点,关闭防火墙规则,关闭selinux,关闭swap交换
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
​
swapoff -a                      #交换分区必须要关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab     #永久关闭swap分区,&符号在sed命令中代表上次匹配的结果
​
#加载 ip_vs 模块
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
​
//修改主机名
hostnamectl set-hostname master01
hostnamectl set-hostname master02
hostnamectl set-hostname node01
hostnamectl set-hostname node02
​
//所有节点修改hosts文件
cat >> /etc/hosts << EOF
192.168.116.17 master01
192.168.116.18 master02
192.168.116.12 node01
192.168.116.13 node02
EOF
​
//调整内核参数
cat > /etc/sysctl.d/kubernetes.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
​
//生效参数
sysctl --system  
​
//时间同步
ntpdate ntp.aliyun.com

所有节点安装Docker

yum install -y yum-utils device-mapper-persistent-data lvm2
​
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
​
yum install -y docker-ce docker-ce-cli containerd.io
​
​
​
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "500m", "max-file": "3"}
}
EOF
​
​
​
​
systemctl start docker.service
​
systemctl enable docker.service 
​
​
docker info | grep "Cgroup Driver"

所有节点安装kubeadm,kubelet和kubectl

使用阿里云的镜像资源去安装更快
//定义kubernetes源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
​
yum install -y kubelet-1.20.15 kubeadm-1.20.15 kubectl-1.20.15
​
​
//开机自启kubelet
systemctl enable kubelet.service
#K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启

配置负载均衡器

准备master高可用

192.168.116.14

192.168.116.15

在二进制部署中使用的负载均衡服务器上修改配置文件
vim /etc/nginx/nginx.conf
​
stream {upstream k8s-apiservers {server 192.168.116.17:6443;server 192.168.116.18:6443;}
​
ip a  查看VIP地址

部署K8S集群

在master和node节点中都进行以下命令

cd /opt
mkdir k8s
单独在master01cd k8s
​
初始化kubeadm
方法一:
kubeadm config print init-defaults > ./kubeadm-config.yaml
​
vim kubeadm-config.yaml
12行修改:advertiseAddress: 192.168.116.17  #设置master01地址
22行添加: certSANs:23   - 192.168.116.1724   - 192.168.116.1825   - 192.168.116.200#设置证书的主机列表
30行更改:  controlPlaneEndpoint: "192.168.116.200:6443"         #主控节点的入口,指定VIP地址:6443
37行更改:imageRepository:registry.cn-hangzhou.aliyuncs.com/google_containers          #默认是k8s.gcr.io,更换成阿里云镜像
39行更改:kubernetesVersion: v1.20.15#更改K8S版本
42行更改:serviceSubnet: 10.96.0.0/16#指定service网段
43行添加: podSubnet: "10.244.0.0/16"#指定pod网段,10.244.0.0/16用于匹配flannel默认网段
在最末行添加:--- 
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
​
       

至此K8S初始化配置完成

查看初始化需要的镜像

kubeadm config images list --kubernetes-version 1.20.15

在线拉取镜像

kubeadm config images pull --config /opt/k8s/kubeadm-config.yaml

拉取完后将yaml文件发送给master节点也进行拉取

scp kubeadm-config.yaml master02:/opt/k8s

只在master中拉取镜像,node节点不需要因为它加入到集群中会自动拉取

初始化 master01

kubeadm init --config=./kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
​
--upload-certs 参数可以在后续执行加入节点时自动分发证书文件
tee kubeadm-init.log 用以输出日志
若初始化失败,进行的操作
kubeadm reset -f
ipvsadm --clear 
rm -rf ~/.kube
再次进行初始化
 
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

cd 
cd .kube/
vim config 

在master01初始化生效后,会在上面生成下面图中的命令

将master02加入集群中,在master02上,将下方图片里划出的命令复制到02节点中执行

执行成功后,回到master01上

kubectl get nodes #查看集群中的节点
​
显示notready是因为还没有下载网络插件

用上述方法将所有node节点加入到集群中

目前为止master和node节点都部署好了

部署网络插件

node01 节点上操作

上传flannel软件包到/opt/k8s

cd /opt/k8s
​
unzip flannel-v0.21.5.zip
docker load -i flannel-cni-plugin.tar
docker load -i flannel.tar
 
mkdir /opt/cni/bin
tar zxvf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin

将node01的k8s目录中的所有.tar文件包复制给node02节点里

cd /opt/k8s
scp *.tar node02:/opt/k8s

进入node02节点

docker load -i flannel-cni-plugin.tar
docker load -i flannel.tar
​
docker images

再将node01的插件目录复制到node02节点中

进入node01
cd /opt
scp -r cni/ node02:/opt

将node01的yml文件复制到master节点中

scp kube-flannel.yml master01:/opt/k8s

在master执行yml文件

kubectl apply -f kube-flannel.yml
会自动创建flannel所需要的资源

检查部署是否成功

kubectl get pods -n kube-flannel -owide

当显示node01和node02节点都为running时,即为部署成功 

 
此时使用kubectl get nodes查看
两个节点都为reday
此时k8s集群都为正常了

同时也会在每个安装了flannel插件的节点上自动生成一个flannel.1的一个接口

ifconfig

总结

K8S kubeadm搭建

kubeadm init:在使用kubeadm方式安装K8S集群时,可根据初始化配置文件或配置参数选项快速的初始化生成一个K8S的master管理平台 kubeadm join:根据kubeadm init初始化的提示信息快速的将一个node节点或其它master节点加入到K8S集群里

步骤

1)所有节点进行初始化,安装容器引擎、kubeadm、kubelet、kubectl,部署 nginx/haproxy 负载均衡器和 keepalived 高可用 2)执行 kubeadm config print init-defaults 命令生成K8S集群初始化配置文件并进行修改 3)执行 kubeadm init --config 指定初始化配置文件进行K8S集群的初始化,生成K8S的master管理控制节点 4)在其它节点执行 kubeadm join 命令将node节点或其它master节点加入到K8S集群里 5)安装 cni 网络插件(flannel或calico)

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

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

相关文章

RISC-V SoC + AI | 在全志 D1「哪吒」开发板上,跑个 ncnn 神经网络推理框架的 demo

引言 D1 是全志科技首款基于 RISC-V 指令集的 SoC&#xff0c;主核是来自阿里平头哥的 64 位的 玄铁 C906。「哪吒」开发板 是全志在线基于全志科技 D1 芯片定制的 AIoT 开发板&#xff0c;是目前还比较罕见的使用 RISC-V SoC 且可运行 GNU/Linux 操作系统的可量产开发板。 n…

配置用户通过IPv6方式上网

组网需求 运营商为企业分配了WAN侧的IPv6地址1111:2222:A0EE:6::2/64和LAN侧的IPv6地址1111:3333:E840:2::1/64&#xff0c;企业通过运营商提供的IPv6地址配置上网。 图1 配置用户通过IPv6方式上网 操作步骤 1、在IPS上的配置 interface GigabitEthernet0/0/4 ipv6 enable…

【视频编码\VVC】量化基础知识

量化&#xff1a;是将信号的连续取值&#xff08;大量离散取值&#xff09;映射为有限多个离散赋值的过程。实现信号取值多对一的映射。可以有效减少信号取值的空间&#xff0c;进而获得更好的压缩效果。 根据输出和输入数据的类型&#xff0c;可以将量化器分为标量量化SQ和矢…

java中容器继承体系

首先上图 源码解析 打开Collection接口源码&#xff0c;能够看到Collection接口是继承了Iterable接口。 public interface Collection<E> extends Iterable<E> { /** * ...... */ } 以下是Iterable接口源码及注释 /** * Implementing this inte…

代码随想录Leetcode474. 一和零

题目&#xff1a; 代码(首刷看解析 2024年2月26日&#xff09; class Solution { public:// 二维 0 1背包int findMaxForm(vector<string>& strs, int m, int n) {// 1 二维 [i]表示 0 的个数&#xff0c;上限m; [j]表示 1 的个数&#xff0c;上限nvector<vector…

Project_Euler-13 题解

Project_Euler-13 题解 题目 37107287533902102798797998220837590246510135740250 46376937677490009712648124896970078050417018260538 74324986199524741059474233309513058123726617309629 91942213363574161572522430563301811072406154908250 2306758820753934617117198…

备战蓝桥杯Day17 - 链表

链表 基本概念 链表是由一系列节点组成的元素集合。 每个节点包含两部分&#xff1a;数据域 item 、指向下一个节点的指针 next 通过节点之间的相互链接&#xff0c;形成一个链表 1. 链表的初始化 # 手动建立链表 # 链表的初始化 class Node(object):def __init__(self, …

超声波气泡传感器检测原理

超声气泡传感器 超声波气泡传感器利用超声波在液体和气体中的声阻抗不同的原理来实现对气泡或液体的识别和检测。它具有体积小、重量轻、使用寿命长、检测灵敏度高、响应速度快等优点&#xff0c;广泛应用于医疗、化工、食品和环保等领域。 检测原理&#xff1a; 超声波气泡…

【ArcGIS】基于DEM/LUCC等数据统计得到各集水区流域特征

基于DEM/LUCC等数据统计得到各集水区流域特征 提取不同集水区各类土地利用类型比例步骤1&#xff1a;划分集水区为独立面单元步骤2&#xff1a;批量掩膜提取得到各集水区土地利用类型比例步骤3&#xff1a;导入各集水区LUCC数据并统计得到各类型占比 提取坡度特征流域面坡度河道…

【网络那些事】

【云计算】 云计算&#xff1a;把计算资源放在某个地方&#xff0c;并通过互联网暴露出来&#xff0c;让用户可以按需使用计算资源的方式&#xff0c;就是所谓的云计算 云计算的三种服务&#xff1a; 云平台专业名词 日常叫法 亚马逊云叫法 虚拟机 EC2 &#xff08;Elasti…

GPT润色指令

1. GPT润色指令 Below is a paragraph from an academic paper. Polish the writing to meet the academic style,improve the spelling, grammar, clarity, concision and overall readability. When necessary, rewrite the whole sentence. Paragraph &#xff1a;你的句子…

初谈软件工程(一)

我就读于兰州交通大学的软件工程专业。虽然在全国众多的985、211高校中&#xff0c;兰州交通大学可能并不显眼&#xff0c;似乎未能跻身这些所谓的“顶尖”行列就意味着不被认可。然而&#xff0c;在甘肃省的教育领域中&#xff0c;它无疑是一座璀璨的明珠&#xff0c;名列前茅…

Apache-Camel中的Quartz定时任务

需求&#xff1a;在camel的基础上增加两个定时任务&#xff0c;一个需要发邮件&#xff0c;一个只需要简单调用存储过程并拿回数据记录日志即可 package com.hkt.it.ds.dmg.eip.route;import java.util.List;import com.xxx.DmgCamelRouteConfig; import com.xxx.DmgCamelRout…

全面介绍HTML的语法!轻松写出网页

文章目录 heading(标题)paragraph(段落)link(超链接)imagemap(映射)table(表格)list(列表)layout(分块)form(表单)更多输入:datalistautocompleteautofocusmultiplenovalidatepatternplaceholderrequired head(首部)titlebaselinkstylemetascriptnoscript iframe HTML&#xff…

Java SpringBoot 获取 yml properties 自定义配置信息

Java SpringBoot 获取 yml properties 自定义配置信息 application.yml server:port: 9090servlet:context-path: /app第一种方法 HelloController package com.zhong.demo01.controller;import org.springframework.beans.factory.annotation.Value; import org.springfram…

NVM存储设备MTBF介绍

1. 概念 1.1. MTBF MTBF(Mean Time Between Failure)&#xff0c;平均故障间隔时间&#xff0c;也被称为平均无故障时间&#xff0c;是衡量一个产品的可靠性指标&#xff0c;其单位为小时。其定义为&#xff1a;产品在总的使用阶段累计工作时间与故障次数的比值&#xff1a; …

【加密算法】AES对称加密算法简介

目录 前言 工作原理 SubBytes ShiftRows MixColumns AddRoundKey 应用场景 在Java中使用AES 加密和解密数据 注意事项和最佳实践 结论 前言 AES&#xff08;Advanced Encryption Standard&#xff09;是一种对称加密算法&#xff0c;它在密码学中被广泛应用。AES取代…

如何将本地项目上传到github上

将本地项目上传到github上有很多种方法&#xff0c;这里只讲述我认为最简单快捷的一种&#xff0c;先在github中创建一个仓库&#xff0c;接着在本地建文件夹&#xff0c;用命令行将项目推送到本地仓库&#xff0c;然后连接远程仓库&#xff0c;将本地项目推送到远程仓库上。要…

数学建模【相关性模型】

一、相关性模型简介 相关性模型并不是指一个具体的模型&#xff0c;而是一类模型&#xff0c;这一类模型用来判断变量之间是否具有相关性。一般来说&#xff0c;分析两个变量之间是否具有相关性&#xff0c;我们根据数据服从的分布和数据所具有的特点选择使用pearson&#xff…

分布式ID生成方案详解

✨✨ 祝屏幕前的您天天开心 &#xff0c;每天都有好运相伴。我们一起加油&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. UUID&#xff08;Universally …