centos7 部署kubernetes(带自动部署脚本)

目录

一、实验规划

1、规划表

2、安装前宿主机检查

1.配置主机名

2.制作ssh免密(VM1中执行)

 3.修改hosts 文件

4. 修改内核相关参数

5.加载模块

6. 清空iptables、关闭防火墙、关闭交换空间、禁用selinux

7. 安装ipvs与时钟同步

8.配置docker的yum源、安装docker及开机自启

 3、安装kubeadm、kubelet、kubectl

4、部署master节点

1.生成yaml文件及初始化集群

2. 拉取网络组件配置文件 - calico

3.部署calico

4.错误处理

5、worker节点加入集群

6、k8s自动部署环境脚本 

7、worker端运行kubectl 


一、实验规划

1、规划表

设备

主机名

IP

角色

虚拟机1(VM1)

K8s01

192.168.248.20

Master

虚拟机2(VM2)

K8s02

192.168.248.21

Node

虚拟机3(VM3)

K8s03

192.168.248.22

Node

默认已自行配置过IP地址,配置IP方式有很多:netplan、nmtui、nmcli、networking等方式 

2、安装前宿主机检查

1.配置主机名

VM1执行

[root@localhost ~]# hostnamectl set-hostname k8s01

VM2执行

[root@localhost ~]# hostnamectl set-hostname k8s02

VM3执行

[root@localhost ~]# hostnamectl set-hostname k8s03

配置完成后,退出当前连接的远程终端,重新登录自动生效

2.制作ssh免密(VM1中执行)

[root@k8s01 ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''    #生成公钥
#-t rsa指定使用RSA算法生成密钥对
#-f ~/.ssh/id_rsa指定将私钥保存在~/.ssh/id_rsa文件中
#-N ''设置空密码以保护私钥文件[root@k8s01 ~]# ls /root/.ssh/  #查看公私钥是否生成
id_rsa  id_rsa.pub[root@k8s01 ~]# for i in 192.168.248.{20..22}; do ssh-copy-id root@$i; done #将私钥拷贝给需要远程的主机

 3.修改hosts 文件

echo -e "192.168.248.20 k8s01
192.168.248.21 k8s02
192.168.248.22 k8s03" >> /etc/hosts

4. 修改内核相关参数

echo -e "net.ipv4.ip_forward = 1
vm.swappiness = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
fs.may_detach_mounts = 1" > /etc/sysctl.d/k8s.conf
#net.ipv4.ip_forward:将IPv4转发功能开启,允许系统作为路由器转发IP数据包
#net.bridge.bridge-nf-call-ip6tables = 1: 允许通过网桥的IPV6数据包进行iptables规则的处理
#net.bridge.bridge-nf-call-iptables = 1:  允许通过网桥的IPV4数据包进行iptables规则的处理
#fs.may_detach_mounts = 1: 在卸载文件系统时允许解除挂载

5.加载模块

echo -e "#!/bin/bash
modprobe -- br_netfilter
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
" >> /etc/sysconfig/modules/ipvs.modules
#br_netfilter:      加载br_netfilter内核模块,它是用于网桥与网络层之间的过滤器。
#ip_vs:            加载ip_vs内核模块,它提供IPVS(IP Virtual Server)功能,用于实现负载均衡。
#ip_vs_rr:         加载ip_vs_rr内核模块,它是IPVS中的一种负载均衡调度算法,使用轮询方式进行负载均衡。
#ip_vs_wrr:        加载ip_vs_wrr内核模块,它是IPVS中的一种负载均衡调度算法,使用加权轮询方式进行负载均衡。
#ip_vs_sh:         加载ip_vs_sh内核模块,它是IPVS中的一种负载均衡调度算法,使用哈希方式进行负载均衡。
#nf_conntrack_ipv4:加载nf_conntrack_ipv4内核模块,它是IPv4连接跟踪模块,用于跟踪网络连接状态chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules &&  lsmod | grep -E "ip_vs|nf_conntrack_ipv4" > /dev/null

6. 清空iptables、关闭防火墙、关闭交换空间、禁用selinux

iptables -F 
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 
systemctl disable --now firewalld > /dev/null 
swapoff -a  
sed -i 's@/dev/mapper/centos-swap@#/dev/mapper/centos-swap@g' /etc/fstab

7. 安装ipvs与时钟同步

yum install -y ipset ipvsadm bash-completion sshpass 
yum install -y chrony –y > /dev/null 
systemctl enable --now chronyd 
sleep 20 
chronyc sources

8.配置docker的yum源、安装docker及开机自启

yum install wget -y
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
mkdir -p /etc/docker
echo -e '{"registry-mirrors": ["https://u6xekpvk.mirror.aliyuncs.com"]
}' > /etc/docker/daemon.json #替换镜像加速器
systemctl daemon-reload && systemctl restart docker && systemctl enable docker
sleep 3
systemctl status docker

 3、安装kubeadm、kubelet、kubectl

yum install -y kubelet-1.19.16 kubeadm-1.19.16 kubectl-1.19.16
systemctl enable kubelet --now

4、部署master节点

1.生成yaml文件及初始化集群

kubeadm config print init-defaults --component-configs KubeletConfiguration --component-configs KubeProxyConfiguration > kubeadm.yaml #生成kubeadm的yaml文件
sed -i "/advertiseAddress:/ s/:.*/: ${MASTER_IP}/" /root/kubeadm.yaml
sed -i "/imageRepository:/ s%:.*%: registry.aliyuncs.com/google_containers%" /root/kubeadm.yaml
sed -i "/serviceSubnet:/ a \ \ podSubnet: 10.244.0.0/16" /root/kubeadm.yaml
sed -i '/mode: ""/ c mode: "ipvs"' /root/kubeadm.yaml
kubeadm config images pull --config /root/kubeadm.yaml
kubeadm init --config kubeadm.yaml | tee k8s.txt
#出现如下内容说明初始化成功
"To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/Then you can join any number of worker nodes by running the following on each as root:kubeadm join 192.168.248.20:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:233778c959cc5aa1e42813fe04e8a492c8c9aba48882b757d49f617648e7ff65"#修改YAML文件
eval `sed -n '/mkdir/ s/  //p' /root/k8s.txt`
eval `sed -n "/sudo cp/ s/  //p" /root/k8s.txt`
eval `sed -n "/sudo chown/ s/  //p" /root/k8s.txt`
curl https://docs.projectcalico.org/archive/v3.20/manifests/calico.yaml -O
kubectl apply -f calico.yaml

此为worker节点假如集群的命令

 根据提示内容命令,添加环境变量

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

2. 拉取网络组件配置文件 - calico

curl https://docs.projectcalico.org/archive/v3.20/manifests/calico.yaml -O

3.部署calico

kubectl apply -f calico.yaml
kubectl get pods -A #当所有pod都为runing 1/1时表示部署完成

4.错误处理

pod状态一直处于”ContainerCreating“ 或其它状态,通过如下命令强制删除pod,删除后会自动创建新的pod

kubectl delete -n kube-system  pods 容器ID  --force --grace-period=0

5、worker节点加入集群

kubeadm join 192.168.248.20:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:233778c959cc5aa1e42813fe04e8a492c8c9aba48882b757d49f617648e7ff65"
#注意!!!使用init时生成出来的提示命令

6、k8s自动部署环境脚本 

自动部署单master节点 + 双worker脚本

7、worker端运行kubectl 

加入完成后,系统提示使用命令“kubectl get node”查看集群状态,输入命令后,系统会有以下报错:

[root@k8s02 ~]# kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?

使用以下命令将master节点的admin.conf文件拷贝到当前节点

[root@k8s02 ~]# mkdir -p $HOME/.kube
[root@k8s02 ~]# scp root@192.168.248.20:/etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s02 ~]# chown $(id -u):$(id -g) $HOME/.kube/config

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

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

相关文章

ChatGPT收录

VSCode插件-ChatGPT 多磨助手 多磨助手 (domore.run) Steamship Steamship 免费合集 免费chatGPT - Ant Design Pro 免费AI聊天室 (xyys.one)

武汉地铁19号线完成5G专网全覆盖,现场测试下行速率超千兆!

近日,极目新闻记者从中国移动湖北公司获悉,随着武汉地铁19号线全线隧道正式贯通,湖北移动目前已完成新月溪公园至鼓架山站5G网络覆盖,轨行区5G专网全覆盖,并成功进行试车验证,19号线成为国内首条全线实现5G…

实习笔记(一)

自定义注解: 自定义注解中有三个元注解Target,Retention,Document /*** 系统日志注解** author Mark sunlightcsgmail.com*/ Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface SysLog {String value() default "…

面试题解析 | 为什么Redis使用单线程性能会优于多线程?

大家好,我是小米!今天我要和大家聊一个有关Redis的热门面试题:为什么Redis使用单线程性能会优于多线程?相信这个问题在很多同学心中都曾经纠结过,那么接下来,就让我们一起来揭开这个技术之谜吧!…

LeetCode 37题:解数独

题目 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 数独…

IDEA简单拷贝一份新项目记录

IDEA简单拷贝项目记录 拷贝后改项目名,然后iml 配置文件改项目名,然后 .idea 中的compiler.xml 里面的name标签改项目名。 就可以了

【软件工程】软件测试

软件测试的对象 软件程序文档 测试对象:各个阶段产生的源程序和文档。 软件测试的目的 基于不同的立场,对软件测试的目的存在着两种完全对立的观点。 (1)一种观点是通过测试暴露出软件中所包含的故障和缺陷(从用户的角度)&#xf…

ssh-keygen 做好免密登录后不生效

免密说明 通常情况下,我们ssh到其他服务器需要知道服务器的用户名和密码。对于需要经常登录的服务器每次都输入密码比较麻烦,因此我们可以在两台服务器上做免密登录,即在A服务器可以免密登录B服务器。 在A服务器上登录B服务器时,…

Tik Tok娱乐+电商MCN怎么做?

在美国外的热门市场中,TikTok 主要做的区域市场包括中东、拉美、欧洲和东亚,而这里面适合做电商的其实并不多。 欧洲、东亚都属于成熟市场,且 TikTok 本身在欧洲面临 DSA 法案更严格的审查,与在英国相同,欧洲各市场消…

第G1周:生成对抗网络(GAN)入门

🍨 本文为[🔗365天深度学习训练营]内部限免文章(版权归 *K同学啊* 所有) 🍖 作者:[K同学啊] 一、理论基础 生成对抗网络(Generative Adversarial Networks, GAN)是近年来深度学习领域…

Windows安装Go开发环境

Windows安装Go开发环境 一、Go语言下载地址 https://golang.google.cn/dl/ 二、设置工作空间GOPATH目录(Go语言开发的项目路径) 首先进入我的C盘(你放到其他盘也行),新建一个文件夹,名字叫做mygo(这个就是你的工作目…

ArcGIS Maps SDK for JavaScript系列之一:在Vue3中加载ArcGIS地图

目录 ArcGIS Maps SDK for JavaScript简介ArcGIS Maps SDK for JavaScript 4.x 的主要特点和功能AMD modules 和 ES modules两种方式比较Vue3中使用ArcGIS Maps SDK for JavaScript的步骤创建 Vue 3 项目安装 ArcGIS Maps SDK for JavaScript创建地图组件 ArcGIS Maps SDK for …

华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架的UNet-2D案例实现

目录 一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例 二、环境准备与数据读取三、模型解析Transformer基本原理Attention模块 Transformer EncoderViT模型的输入整体构建ViT 四、模型训练与推理模型训练模型验证模型推理 近些年,随着基于自注意&…

改造旧项目-长安分局人事费用管理系统

一、系统环境搭建 1、搭建前台环境 vue3vite构建项目复制“银税系统”页面结构,包括:路由、vuex存储、菜单、登录(复制一个干净的空架子) 2、搭建后台环境 新三大框架 SSMP聚合工程:common、admin,新的…

2023国赛数学建模E题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

Linux服务器上配置HTTP和HTTPS代理

本文将向你分享如何在Linux服务器上配置HTTP和HTTPS代理的方法,解决可能遇到的问题,让你的爬虫项目顺利运行,畅爬互联网! 配置HTTP代理的步骤 1. 了解HTTP代理的类型:常见的有正向代理和反向代理两种类型。根据实际需求…

涉及近300个业务场景,重庆银行数字员工平台建设解析

随着数字化转型战略规划的逐步落地,重庆银行于2022年6月成功建设了数字员工平台,该平台已成为行内数字化转型的标杆应用。数字员工平台以RPA(机器人流程自动化)为基础,AI(人工智能)技术为抓手&a…

PHP最简单自定义自己的框架view使用引入smarty(8)--自定义的框架完成

1、实现效果。引入smarty, 实现assign和 display 2、下载smarty,创建缓存目录cache和扩展extend 点击下面查看具体下载使用,下载改名后放到extend PHP之Smarty使用以及框架display和assign原理_PHP隔壁老王邻居的博客-CSDN博客 3、当前控…

leetcode 力扣刷题 旋转矩阵(循环过程边界控制)

力扣刷题 旋转矩阵 二维矩阵按圈遍历(顺时针 or 逆时针)遍历59. 旋转矩阵Ⅱ54. 旋转矩阵剑指 Offer 29. 顺时针打印矩阵 二维矩阵按圈遍历(顺时针 or 逆时针)遍历 下面的题目的主要考察点都是,二维数组从左上角开始顺…

C# Linq源码分析之Take (一)

概要 在.Net 6 中引入的Take的另一个重载方法,一个基于Range的重载方法。因为该方法中涉及了很多新的概念,所以在分析源码之前,先将这些概念搞清楚。 Take方法基本介绍 public static System.Collections.Generic.IEnumerable Take (this …