2、基于kubeadm搭建K8S环境

news2024/11/25 22:49:40

目录

一、环境说明

二、初始化所有节点

三、修改三台服务器主机名,并写入host文件

四、调整内核参数

五、所有节点安装Docker

六、所有节点配置K8S源

七、所有节点安装kubeadm,kubelet和kubectl

八、部署 kubernetes Master 节点

九、k8s-node 节点加入 master 节点

十、master节点部署 CNI 网络插件

十一、检查master节点

十二、测试 kubernetes 集群

十三、token制作


kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具,这个工具能通过两条指令完成一个 kubernetes 集群的部署:

  • 第一,创建一个 Master 节点:kubeadm init
  • 第二, 将 Node 节点加入到当前集群中:kubeadm join <Master 节点的 IP 和端口 >

一、环境说明

虚拟机配置:

服务器类型

角色

IP地址

k8s-master

master

192.168.1.33

k8s-node01

node

192.168.1.31

k8s-node02

node

192.168.1.32

二、初始化所有节点

所有节点,需关闭防火墙规则,关闭selinux,关闭swap交换。

# 关闭防火墙
[root@localhost ~]# systemctl stop firewalld
# 禁用 firewalld 服务
[root@localhost ~]# systemctl disable firewalld
# 临时关闭 selinux
[root@localhost ~]# setenforce 0
[root@localhost ~]# iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
# 关闭 swap
# 临时关闭【立即生效】查看使用 free 命令
[root@localhost ~]# swapoff -a
# 永久关闭【重启生效】
[root@localhost ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab
[root@localhost ~]# free -g
              total        used        free      shared  buff/cache   available
Mem:              7           4           1           0           0           2
Swap:             0           0           0

以master为例,在node01、node02也需要执行:

三、修改三台服务器主机名,并写入host文件

cat >> /etc/hosts << EOF
192.168.1.33 master
192.168.1.31 node01
192.168.1.32 node02
EOF

当然也可以使用hostnamectl set-hostname xxx设置主机名称,如下:

# 【master 节点上操作】
hostnamectl set-hostname master
# 【node01 节点上操作】
hostnamectl set-hostname node01
# 【node02 节点操作】
hostnamectl set-hostname node02

四、调整内核参数

将桥接的 IPV4 流量传递到 iptables 链。

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

以master节点为例,node01、node02也需要执行:

接着在三个节点执行sysctl --system加载参数:

五、所有节点安装Docker

Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker。以master节点为例,node01、node02也需要执行:

# 配置一下 Docker 的 yum 源【阿里云】
cat >/etc/yum.repos.d/docker.repo<<EOF
[docker-ce-edge]
name=Docker CE Edge - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/edge
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF

# 然后 yum 方式安装 docker
yum -y install docker-ce
# 查看 docker 版本
docker --version

# 配置 docker 的镜像源【阿里云】
cat >> /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF

# 启动 docker
systemctl enable docker
systemctl start docker
systemctl status docker

六、所有节点配置K8S源

执行下面的命令, 配置 k8s 的 yum 源【阿里云】 :

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

以master为例,在node01、node02也需要执行:

七、所有节点安装kubeadm,kubelet和kubectl

安装 kubelet、kubeadm、kubectl,同时指定版本:

[root@localhost ~]# yum install -y kubelet-1.21.3 kubeadm-1.21.3 kubectl-1.21.3

以master节点为例,node01、node02也需要执行:

ps:这里根据网速快慢,可能需等待一些时间。

安装完毕之后,如下图。

k8s通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启。

[root@localhost ~]# systemctl enable kubelet.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
[root@localhost ~]# systemctl start kubelet

八、部署 kubernetes Master 节点

这里只需要在master 节点上执行即可,在master节点(192.168.1.33)执行下面的脚本进行【集群初始化】:

kubeadm init \
--apiserver-advertise-address=192.168.1.33 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.21.3 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址,【执行上述命令会比较慢,因为后台其实已经在拉取镜像了】,我们 docker images 命令即可查看已经拉取的镜像。

参数说明:

kubeadm init \
--apiserver-advertise-address=192.168.1.33 \                  #指定master监听的地址,修改为自己的master地址
--image-repository registry.aliyuncs.com/google_containers \   #指定为aliyun的下载源,最好用国内的
--kubernetes-version v1.18.0 \                 #指定k8s版本,1.18.0版本比较稳定
--service-cidr=10.96.0.0/12 \                  #设置集群内部的网络
--pod-network-cidr=10.244.0.0/16                #设置pod的网络
# service-cidr 和 pod-network-cidr 最好就用这个,不然需要修改后面的 kube-flannel.yaml 文件

执行完这个命令后,后台会拉取对应的镜像,需等待一些时间。

如下图就是拉取完成之后的结果:

这里我们继续回去看刚刚拉取的日志,有几个关键的信息:

通过注释,我们可以看到,如果要开始使用集群,需要执行上述框起来的脚本:

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

下面的kubeadm join脚本其实就是将node1、node2添加到master集群的命令,这个我们在下一个步骤使用。

九、k8s-node 节点加入 master 节点

这里我们只需要在node01(192.168.1.31)、node02(192.168.1.32)节点执行,我们直接复制前面一张图的kubeadm join脚本,将node01、node02两个节点加入到master集群中,注意只需要在node01、node02节点执行,不要在master节点上面执行,否则会报错。

kubeadm join 192.168.1.33:6443 --token ailzq6.z3r7d3u0ov225p99 \
        --discovery-token-ca-cert-hash sha256:45c01d464d97fe9d14d42c91b629bbe561aba2508e9db823f81b00b911c8ccfa 

默认 token 有效期为 24 小时,当过期之后,该 token 就不可用了。这时就需要重新创建 token,操作如下:

kubeadm token create --print-join-command

当我们把两个节点都加入进来后,就可以在master节点通过kubectl get nodes命令查看当前节点信息:

我们可以看到,node01、node02都成功加入到master集群了,但是状态目前还是NotReady,需要安装网络插件,来进行联网访问。

十、master节点部署 CNI 网络插件

先从GitHub仓库下载kube-flannel.yml:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

国外站点下载很慢,经常连不上:

安装:

kubectl apply -f http://120.78.77.38/file/kube-flannel.yaml

安装完CNI网络插件后,三个节点的状态就变成Ready了。

我们使用kubectl get pod -n kube-system查看pod状态,可以看到,状态都是Running运行状态。

十一、检查master节点

使用kubectl get cs检查master节点状态。

我们看到controller-manager、scheduler的状态为unhealthy,表示不健康的状态。

我们需要修改配置文件:

  • vim /etc/kubernetes/manifests/kube-scheduler.yaml

将 --port=0注释掉。

  • vim /etc/kubernetes/manifests/kube-controller-manager.yaml

将 --port=0注释掉。

然后我们再次查询服务是否正常:

1)、使用kubectl get pods -A命令查询所有pod是否正常运行

2)、使用kubectl get cs命令查询master是否正常

3)、使用kubectl get nodes命令查询node节点是否ready

十二、测试 kubernetes 集群

在 Kubernetes 集群中创建一个 pod,这里我们使用k8s来部署nginx,验证是否正常运行。

# 下载 nginx 【会联网拉取 nginx 镜像】
kubectl create deployment nginx --image=nginx

# 暴露端口,让其它外界能够访问
kubectl expose deployment nginx --port=80 --type=NodePort

# 查看状态
kubectl get pods

通过kubectl get pods和kubectl get svc命令我们可以看到k8s已经成功帮我们自动拉取nginx镜像,并运行了一个容器,暴露端口为:30140。

注意,需要执行kubectl expose deployment nginx --port=80 --type=NodePort暴露端口

测试一下,master和node01、node02都能通过自己的IP的30140端口去访问:

  • 1)、master节点

  • 2)、node01节点

  • 3)、node02节点

可以发现我们的 nginx 已经成功启动了。

十三、token制作

node 节点加入集群需要生成的 token,token 有效期为 24 小时,过期需要重新创建。
创建命令为:kubeadm token create --print-join-command

然后就可以执行复制上面的kubeadm join将node节点加入master集群中。

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

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

相关文章

基于docker的keepalived+MySQL主从实现MySQL高可用

因生产需要对MySQL做高可用&#xff0c;同时&#xff0c;资源有限&#xff0c;因此采用双节点主从keepalived方式实现高勇。另外因需要大批量部署MySQL集群&#xff0c;需要采用模板化部署&#xff0c;本方案采用将MySQL容器化&#xff0c;实现MySQL模板化配置部署。 部署环境及…

SpringMVC学习笔记--上篇

SpringMVC学习笔记 1、SpringMVC 1.1、什么是SpringMVC Spring MVC是Spring Framework的一部分&#xff0c;是基于Java实现MVC的轻量级Web框架。 1.2、SpringMVC的特点 Spring MVC的特点&#xff1a; 轻量级&#xff0c;简单易学高效 , 基于请求响应的MVC框架与Spring兼容…

Python深度学习-有向图合并、排序、最长路径计算

一、有向图方向、权重表示方法 Python通常使用有向图中边的起点和终点来表示边的方向。例如&#xff0c;如果有一条从节点A到节点B的边&#xff0c;则可以使用以下方式表示该有向边&#xff1a; graph {A: {B: 1} }在这个例子中&#xff0c;节点A和节点B之间存在一条权重为1…

谷歌插件下载Redux DevTools管理Redux数据

我们在做 react-redux开发时 很多时候可能无法确定自己的数据有没有成功导进来 这里就有个不错的谷歌插件推荐给大家 大家可以下载我的资源 谷歌插件Redux DevTools 这里 我们打开 Google Chrome浏览器 然后 直接在谷歌浏览器上访问 chrome://extensions/ 如果你的第一次进入 …

【网络安全】学过编程就是黑客?

我们不可否认的是黑客为我们带来了巨大的财产损失于危机&#xff0c;即使其最初的思想是正确的。 个人主页&#xff1a;【&#x1f60a;许思王】 文章目录 前言黑客 &#x1f4bb;起源&#x1f697;发展&#x1f463;黑客守则&#xff08;真的假的&#x1f914;&#xff09;黑…

合并cyclonedx格式的bom文件

1.工具下载 https://github.com/CycloneDX/cyclonedx-cli/releases 2.操作记录 Usage: cyclonedx [options] [command] Options: --version Show version information -?, -h, --help Show help and usage information Commands: add Add information to a BOM (currently…

【图像处理】:相机对焦的原理和实现方法

相机对焦的原理和实现方法 1 原理介绍&#xff1a;1.1点扩散函数“原理:1.2 测距原理:对焦的本质是测距&#xff1a;1.3.相位检测只原理: 2.实现方法2 1 原理介绍&#xff1a; 对焦有三种思路: 1.1点扩散函数“原理: 也就是观测画面中线条边缘的对比度&#xff0c;对比度最高…

微信小程序代码审核,提示需要添加文娱-其他视频类目

这个解决办法有三个 一个是按照指引去申请资质 第二个是通过后端写一个鉴权接口&#xff0c;审核时候去通过接口返回的布尔值去隐藏掉视频模块&#xff0c;通过后再显示出来 第三个是服务除视频内容外还存在其他形式的情况可以通过引入第三方视频插件来解决&#xff0c;但是…

初识Golang,集简洁与性能与一体的语言

文章目录 一、Go语言介绍二、Go语言特性三、Go语言用途四、开发环境搭建五、建立工作区并创建Go程序六、入口文件基本代码介绍七、go命令介绍7.1 基本命令7.2 build 与 run命令7.3 install命令介绍 八、命名规范8.1 变量规范定义8.2 关键字8.3 保留字8.4 需要注意的问题 道阻且…

AIGC 爆火,浪潮信息要做大模型的数据存储大底座

AIGC 在 2023 年爆火&#xff0c;各类大模型层出不穷&#xff0c;参数动辄达到千亿数量级。这些背后&#xff0c;数据的类型和形式也走向复杂多样。例如大模型会采用到我们真实物理世界中的文字、视觉、音频、3D、雷达、多谱等复杂多样的不同模态信号和数据&#xff0c;数据则又…

【Android复习笔记】系统进程(一)

Android 系统进程有哪些 先来一个整体结构图从宏观上理解Android系统的进程结构布局: 这里我们简单总结一下: 系统的第一个进程其实是0号进程(又叫swapper进程/Idle进程) 0号进程fork出了1号进程(init进程)和2号进程(kthreadd进程) 1号进程是所有普通用户进程的祖先,2号进程…

利用Adobe Acrobat DC实现图片和PDF互相转换

一、图片转PDF 可以实现多张或者单张图片转PDF! 这个需要使用到Adobe Acrobat DC的文件合并功能&#xff0c;因为Adobe Acrobat DC的文件合并&#xff0c;不仅可以合并多个pdf文件&#xff0c;也支持合并图片文件。 如图&#xff0c;直接选中多张图片合成即可&#xff1a; 添…

微服务系列文章之 Redisson实现分布式锁(3)

一、概述 1、技术架构 项目总体技术选型 SpringBoot2.4.5 Maven3.5.4 Redisson3.5.4 lombok(插件)2、加锁方式 该项目支持 自定义注解加锁 和 常规加锁 两种模式 自定义注解加锁 DistributedLock(value"goods", leaseTime5)public String lockDecreaseStock(…

84. 求1+2+…+n

链接&#xff1a; 链接 题目&#xff1a; 求 12…n12…n&#xff0c;要求不能使用乘除法、forfor、whilewhile、ifif、elseelse、switchswitch、casecase 等关键字及条件判断语句 (A?B:C)(A?B:C)。 数据范围 1≤n≤500001≤n≤50000。 样例 输入&#xff1a;10输出&#xff1…

【MySQL】不允许你不会使用组合查询

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集 &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0…

ASEMI-1N4007是什么二极管,1N4007是什么类型的二极管

编辑-Z 1N4007是一种常见的二极管&#xff0c;属于快恢复二极管&#xff08;Fast Recovery Diode&#xff09;的一种。它是一种高压、高电流的整流二极管&#xff0c;常用于电源电路中的整流器。1N4007的最大反向电压为1000V&#xff0c;最大正向电流为1A&#xff0c;具有较低…

第十七章 原理篇:Deformable DETR

参考教程&#xff1a; 论文&#xff1a;https://arxiv.org/pdf/2010.04159.pdf 源码&#xff1a;https://github.com/fundamentalvision/Deformable-DETR 文章目录 Deformable ConvDeformable DETR计算量MethodDeformable Attention ModuleDeformAttn计算量Multi-scale Defor…

JVM学习笔记(二)

学习黑马视频&#xff1a;01_什么是jvm_哔哩哔哩_bilibili 一、JVM内存结构 程序计数器 虚拟机栈 本地方法栈 堆 方法区 程序计数器、栈、本地方法栈&#xff0c;都是线程私有的。堆、方法区是线程共享的区域。 1. 虚拟机栈&#xff08;JVM Stacks&#xff09; 1&#xff09…

avue 自定义按钮修改后触发表单自带的校验方法;avue表单提交

代码&#xff1a; <avue-form :option"option" v-model"publishForm" ref"publishForm" submit"handleSubmit"><template slot-scope"{size}" slot"menuForm"><el-button :size"size" …

LayUi之选项卡的详解(附源码讲解)

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于LayUi的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.选项卡是什么 二.选项卡在什么时候使用…