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

news2024/11/25 7:13:10

目录

一、实验规划

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/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You 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.coloradmin.cn/o/878447.html

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

相关文章

实现两个table一起滚动的效果

效果 代码 css相关 重点是.head-box .body-box-right .body-box-left 三个类的设置 .box {display: flex;justify-content: flex-start;}table {width: 500px;}tr,th {display: flex;justify-content: space-around;align-content: space-around;height: 50px;}td {width: 8…

Vue 使用 vite 创建项目

vite 是新一代前端构建工具,和 webpack 类似。 vite 的启动速度更快。在开发环境中,不需要打包就可以直接运行。 vite 的更新速度更快。当修改内容后,不需要刷新浏览器,页面就会实时更新。 vite 完全是按需编译。它只会编译需要…

(二分查找) 11. 旋转数组的最小数字 ——【Leetcode每日一题】

❓剑指 Offer 11. 旋转数组的最小数字 难度:简单 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转…

LeetCode 37题:解数独

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

Docker中MySQL应用部署操作步骤

在linux系统下安装mysql、安装redis是非常麻烦的,但是docker出现后,应用安装会非常简洁。 1.MySQL部署 2.docker中部署mysql的步骤 创建mysql容器 这样mysql就部署好了。 外部机器连接docker中部署的mysql

Python学习笔记_基础篇_初识python

Python简介 python的创始人为吉多范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。 Python和其他语言的对比&#xff…

15个免费的图标素材网站推荐

想象力没有限制。你在寻找下载免费矢量图标网站吗?本文为需要使用各种图标美化网页布局和界面设计,简单提升更好用户体验的设计师提供了15个矢量图标网站。 1.即时设计资源社区 即时设计是国内一款专业级的 UI 设计工具,像 PC 端的网页&…

htmlCSS-----弹性布局

目录 前言 什么是弹性布局 样式 学习概要 容器和项目 弹性布局的排列方式 1.横向排列(默认样式) 2.父元素容器的属性(*5) (1)主轴 代码示例: (2)交叉轴 3.子元素…

资料分析(三)—— 基期、现期、人口、增长量

基期 基期值 现期值 - 增长量 增长量/增长率 现期值/1&#xff08;间隔)增长率 化除为乘 &#xff1a;当增长率&#xff5c;r| < 5% 时&#xff0c;&#xff0c; 注&#xff1a;当选项首位相同&#xff0c;第二位也相同时&#xff0c;只能用直除 基期和差 (结合选…

Android9开机启动与FBE过程完整介绍与LOG流程

一&#xff0c;开机整体流程概述 Init进程作为Android的第一个user space(用户空间)的进程&#xff0c;它是所有 Android 系统 native service 的祖先&#xff0c;它的进程号是 1。 init进程工作分为第一阶段和第二阶段。 二&#xff0c;init fisrt stage 代码参考&#xff…

js操作剪贴板讲解

文章目录 复制&#xff08;剪切&#xff09;到剪贴板Document.execCommand()Clipboard复制Clipboard.writeText()Clipboard.write() copy&#xff0c;cut事件 从剪贴板进行粘贴document.execCommand(paste)Clipboard粘贴Clipboard.readText()Clipboard.read() paste 事件 安全性…

使用docker快速搭建wordpress服务,并指定域名访问

文章目录 引入使用docker快速跑起服务创建数据库安装wordpress服务配置域名 引入 wordpress是一个基于PHP语言编写的开源的内容管理系统&#xff08;CMS&#xff09;&#xff0c;它有丰富的插件和主题&#xff0c;可以非常简单的创建各种类型的网站&#xff0c;包括企业网站、…

云安全攻防(十一)之 容器编排平台面临的风险

前言 容器技术和编排管理是云原生生态的两大核心部分——前者负责执行&#xff0c;后者负责控制和管理&#xff0c;共同构成云原生技术有机体&#xff0c;我们以 Kubernetes 为例&#xff0c;对容器编排平台可能面临的风险进行分析 容器编排平台面临的风险 作为最为流行的云…

LeetCode150道面试经典题-- 快乐数(简单)

1.题目 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&am…

OpenLayers实战,高德GCJ-02坐标系转WGS-84坐标系

专栏目录: OpenLayers实战进阶专栏目录 前言 本章实现高德GCJ-02坐标系转WGS-84坐标系。日常开发中经常遇到源坐标高德的情况,这时候如果地图不是高德,而是使用的wgs84坐标系的地图,或者其他坐标系的情况下,就会导致位置偏移,本章就是解决高德坐标偏移问题。 二、依赖…

Detecting Twenty-thousand Classes using Image-level Supervision

Detecting Twenty-thousand Classes using Image-level Supervision 摘要背景方法PreliminariesDetic:具有图像类别的检测器loss技术细节扩展Grad-CAMGrad-CAM原理 总结 摘要 摘要 由于检测数据集的规模较小&#xff0c;目前的物体检测器在词汇量方面受到限制。而图像分类器的数…

深入了解Linux运维的重要性与最佳实践

Linux作为开源操作系统的代表&#xff0c;在企业级环境中的应用越来越广泛。而在保障Linux系统的正常运行和管理方面&#xff0c;Linux运维显得尤为关键。本文将介绍Linux运维的重要性以及一些最佳实践&#xff0c;帮助读者更好地了解和掌握Linux系统的运维技巧。 首先&#xf…

【Linux初阶】system V消息队列 + system V信号量

文章目录 一、system V消息队列&#xff08;了解&#xff09;二、system V信号量&#xff08;了解&#xff09;1.信号量是什么2.临界资源和临界区3.互斥4.为什么要信号量 三、IPC资源的组织方式结语 一、system V消息队列&#xff08;了解&#xff09; 消息队列提供了一个从一…

玩转IndexedDB,比localStorage、cookie还要强大的网页端本地缓存

随着浏览器的功能不断增强&#xff0c;越来越多的网站开始考虑&#xff0c;将大量数据储存在客户端&#xff0c;这样可以减少从服务器获取数据&#xff0c;直接从本地获取数据。 现有的浏览器数据储存方案&#xff0c;都不适合储存大量数据&#xff1a;Cookie 的大小不超过 4K…

回归预测 | MATLAB实现基于SAE堆叠自编辑器多输入单输出回归预测

回归预测 | MATLAB实现基于SAE堆叠自编辑器多输入单输出回归预测 目录 回归预测 | MATLAB实现基于SAE堆叠自编辑器多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于SAE堆叠自编辑器多输入单输出回归预测&#xff1b; 2.运行环…