Kubernetes集群搭建

一、概述

Kubernetes是一个Google开源的全新的分布式容器集群管理系统,由于从第一个字母到字母s中间有8个字母,所以简称K8s。

二、准备

ip角色内存
192.168.187.130master4G
192.168.187.131node2G
192.168.187.132node2G

小提示: 设置静态ip的步骤,请看https://blog.csdn.net/u010132847/article/details/135991017?spm=1001.2014.3001.5501
说明:本次是在Wndow10系统上安装,CentOS是7.9版本。

三、安装

3.1、共性操作

该操作要求每个节点均需执行的操作,包括修改hosts、时间同步、禁用firewalld、禁用selinux、禁用swap、网桥设置和安装K8s等。

3.1.1、修改hosts

$: cat >> /etc/hosts <<EOF
 192.168.187.130 master
 192.168.187.131 node1
 192.168.187.132 node2
 EOF

3.1.2、时间同步(本次使用chrony方式同步)

$: yum -y install chrony #安装chrony
$: systemctl enable --now chronyd #启动chrony服务
$: vim /etc/chrony.conf #修改配置文件,内容看说明
$: systemctl restart chronyd #重启chrony
$: hwclock -w  #硬件时间向系统时间同步
$: date #查看时间是否正确

说明:编辑文件chrony.conf时,注释已有的server开头的配置,新增“server npt.aliyun.com iburst”.

​ chrony.conf文件原来内容:
在这里插入图片描述
​ chrony.conf文件修改后的内容:
在这里插入图片描述

3.1.3、禁用firewalld

$: systemctl stop firewalld #停止firewalld服务
$: systemctl disable firewalld #开机禁止启动

3.1.4、禁用selinux

$: setenforce 0  #临时关闭
$: vim /etc/selinux/config #永久关闭
...
SELINUX=disabled #值由enforcing改成disabled
...

小提示
​ 1、操作/etc/selinux/config时,将“SELINUX=enforcing”改成“SELINUX=disabled”,并且需要重启后才会生效,如下图。
在这里插入图片描述

3.1.5、禁用swap

$:swapoff -a #临时关闭
$:vim /etc/fstab #永久关闭
...
#/dev/mapper/centos-swap swap  swap    defaults        0 0  ##注释掉这一行
...

在这里插入图片描述
说明:默认情况下,K8s为了追求高性能,不建议使用交换分区,为此它要求每个节点禁用swap,否则各个节点中的kubelet无法运行。

3.1.6、网桥设置

$: cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
EOF
$: systemctl --system  #将设置生效

3.1.7、安装docker

1)安装

$:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$:yum makecache fast
$:yum -y install docker-ce
$:systemctl enable docker && systemctl start docker
$:docker -v

小提示

​ 1、如果执行“yum-config-manager”出现“yum-config-manager: command not found”时,则需要安装,命令如“yum -y install yum-utils”。

注意:yum -y install docker只能安装docker-1.13.x老版本的docker, 2017年后版本有了ce(社区版本)和EE(企业版本),所以新版本使用yum -y install docker-ce。

2)设置镜像地址

为了快速让docker从第三方公共镜像仓库中下载镜像,我们改成阿里云。默认是从国外的网址下载比较慢,我们改成从阿里云下载, 设置daemon.json:

$: mkdir -p /etc/docker
$: tee /etc/docker/daemon.json <<-'EOF'
{
	"exec-opts":["native.cgroupdriver=systemd"],
	"registry-mirrors":["https://ha65u7j9.mirror.aliyuns.com"]
}
EOF
$:systemctl daemon-reload && systemctl restart docker #重新加载并重启docker

说明:在某个节点(master节点或node节点)中运行cat /var/lib/kubelet/config.yaml|grep group命令可以看出kubelet默认cgroup驱动为systemd, 而docker默认驱动为cgroupfs,但k8s官网要求docker和kubelet服务中的cgroup驱动必须一致,为此设置daemon.json时添加了"exec-opts":[“native.cgroupdriver=systemd”]配置。

3.1.8、安装K8S

  1. 镜像
$: cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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
$: cat /etc/yum.repos.d/kubernetes.repo #查看文件内容是否成功写入
  1. 安装
$:yum install -y kubeadm-1.23.17 kubectl-1.23.17 kubelet-1.23.17
$:systemctl enable kubelet #启动kubelet
$:journalctl -xefu kubelet #查看kubelet运行日志

kubelet运行日志如下:
在这里插入图片描述

3.2、异性操作

K8s环境搭建过程中有些命令需要在不同角色的节点执行,异性操作罗列了不同角色计算机执行的命令。

3.2.1、master操作

  1. 设置hostname:
$: hostnamectl set-hostname master

2)初始化Kubernetes, 保存该命令输出的一个join命令, 该join命令需要在node角色的节点上执行。

$: kubeadm init \
--apiserver-advertise-address=192.168.187.130 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.17 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all

说明

apiserver-advertise-address: 集群通告地址(master机器ip)
image-repository: 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
kubernetes-version: k8s版本,与上面安装的一致
service-cidr: 集群内部虚拟网络,pod统一访问入口
pot-network-cidr: pod网络,与下面部署的CNI网络组件yami中保持一致

提示:执行完命令后,最后的“kubeadm join …”内容需要记下来,后面配置node节点时用到。
在这里插入图片描述

3)环境配置

如果是普通用户执行如下:

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

如果是root用户执行如下:

$: echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
$: source /etc/profile

如果不配置环境变量,则执行时会提示如下错误:

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

4)配置flannel

flannel([ˈflænl])和calico([ˈkælɪkoʊ])都是用于k8s节点之间容器网络通信的一个k8s组件,flannel可以为不同node节点的分配不同的子网,实现容器间的跨机通信,从而实现整个kubernetes层级通信。

  1. 下载:
$: cd /opt
$: wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

小提示:如果一直下载不下来,可以在/etc/hosts文件中添加一条“199.232.68.133 raw.githubusercontent.com”再下载(配置后仍让下载不下来,多执行几次可以成功)。

  1. 上传
$: kubectl apply -f /opt/kube-flannel.yml

3.2.2、node操作

1)设置hostname

$:hostnamectl set-hostname node[n]

每个node节点都要执行上面命令,n的值和/etc/hosts文件丛节点相一致。

2)执行kubeadm join命令,该命令是master节点初始化k8s时生成的(在步骤3.2.1的第二步生成的)。

$: kubeadm join 192.168.187.130:6443 --token l8z2iz.yoh8hzigfnlkea4t \
	--discovery-token-ca-cert-hash sha256:e7386bef149c10542bd2a442079587587175918459501cbc71815db1fb6998c4

提示:出现如下表示节点已经成功加入集群中。
在这里插入图片描述

注意:上面命令中token默认有效时间为24小时,过期后可以在master节点执行kubeadm token create --print-join-command重新创建token

3)环境配置

$: echo "export KUBECONFIG=/etc/kubernetes/kubelet.conf" >> /etc/profile
$: source /etc/profile

3.2.3、查看节点状态

$:kubectl get node

在这里插入图片描述

3.2.4、问题

描述:如果执行kubectl get node命令时发现有些节点一直处于NotReady状态,在这些节点执行journalct -xefu kubelet命令则提示如下错误:

在这里插入图片描述

原因:故障节点没有自动生成/etc/cni/net.d/10-flannel.conflist。

方案:将正常节点上/etc/cni/net.d/10-flannel.conflist拷贝到故障节点对应目录。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【课程作业_01】国科大2023模式识别与机器学习实践作业

国科大2023模式识别与机器学习实践作业 作业内容 从四类方法中选三类方法&#xff0c;从选定的每类方法中 &#xff0c;各选一种具体的方法&#xff0c;从给定的数据集中选一 个数据集&#xff08;MNIST&#xff0c;CIFAR-10&#xff0c;电信用户流失数据集 &#xff09;对这…

TCP TIME_WAIT 过多怎么处理

文章目录 1.什么是 TCP TIME_WAIT&#xff1f;2.为什么要 TIME_WAIT?3.TIME_WAIT 过多的影响4.解决办法4.1 调整短连接为长连接4.2 调整系统内核参数 5.小结参考文献 1.什么是 TCP TIME_WAIT&#xff1f; TCP 断开连接四次挥手过程中&#xff0c;主动断开连接的一方&#xff…

ctfshow——文件包含

文章目录 web 78——php伪协议第一种方法——php://input第二种方法——data://text/plain第三种方法——远程包含&#xff08;http://协议&#xff09; web 78——str_replace过滤字符php第一种方法——远程包含&#xff08;http://协议&#xff09;第二种方法——data://&…

游戏被DDOS攻击无法访问时该如何处理

游戏行业随着时代的发展有着突飞猛进的变化&#xff0c;尤其是互联网时代智能手机的普及&#xff0c;让游戏行业发展上了一个新的台阶。因为游戏带来的巨大利润&#xff0c;游戏行业一直是DDoS攻击的首选目标。 DDoS是Distributed Denial of Service的缩写&#xff0c;即分布式…

学习Android的第二天

目录 Android User Interface 用户界面 UI Android View与ViewGroup的概念 Android View android.view.View android.view.View XML 属性 android:id 属性 Android ViewGroup android.view.ViewGroup ViewGroup.LayoutParams ViewGroup.MarginLayoutParams ViewGr…

Redis核心技术与实战【学习笔记】 - 19.Pika:基于SSD实现大容量“Redis”

前言 随着业务数据的增加&#xff08;比如电商业务中&#xff0c;随着用户规模和商品数量的增加&#xff09;&#xff0c;就需要 Redis 能保存更多的数据。你可能会想到使用 Redis 切片集群&#xff0c;把数据分散保存到不同的实例上。但是这样做的话&#xff0c;如果要保存的…

java社区养老年人服务系统springboot+vue

为了帮助用户更好的了解和理解程序的开发流程与相关内容&#xff0c;本文将通过六个章节进行内容阐述。 第一章&#xff1a;描述了程序的开发背景&#xff0c;程序运用于现实生活的目的与意义&#xff0c;以及程序文档的结构安排信息&#xff1b; 第二章&#xff1a;描述了程序…

uniapp 高德地图显示

1. uniapp 高德地图显示 使用前需到**高德开放平台&#xff08;https://lbs.amap.com/&#xff09;**创建应用并申请Key   登录 高德开放平台&#xff0c;进入“控制台”&#xff0c;如果没有注册账号请先根据页面提示注册账号   打开 “应用管理” -> “我的应用”页面…

Leetcode 85. 最大矩形

题目信息 LeetoCode地址: 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目理解 该题是84题的升级版。84题给出了一个一维数组&#xff0c;即一行数据&#xff0c;每个元素是高度。而该题则是给出了二维数组&#xff0c;只需我们将每一行的高度…

太强了,AI数字人从制作到变现一次搞定

AI数字人从制作到变现 如果说GPT类大模型是我们人类的第二大脑&#xff0c;数字人就是我们人类在互联网上的第二个身体。随着 AI 的迅速发展&#xff0c;2024 年 AI 模型开始从大型语言模型向大型视觉模型转变。数字人技术作为其分支之一&#xff0c;正日益成为科技、娱乐、教…

【GAMES101】Lecture 14 15 辐射度量学

目录 辐射度量学 Radiant flux&#xff08;光通量&#xff09; intensity&#xff08;发光强度&#xff09; irradiance radiance 辐射度量学 主要讲述了物理学中的Basic radiometry (辐射度量学)&#xff0c;就是我们在之前的计算光照中没有用具体的物理单位去衡量和描述…

C++新特性 协程

本篇文章我们来讲述一下C协程 协程&#xff08;Coroutine&#xff09;是一种能够挂起个恢复的函数过程 是一种轻量级的并发编程方式&#xff0c;也称为用户级线程。它与传统的线程&#xff08;Thread&#xff09;相比&#xff0c;具有更低的开销和更高的执行效率。 协程通常运…

爬虫学习笔记-scrapy爬取汽车之家

1.终端运行scrapy startproject scrapy_carhome,创建项目 2.接口查找 3.终端cd到spiders,cd scrapy_carhome/scrapy_carhome/spiders,运行 scrapy genspider audi https://car.autohome.com.cn/price/brand-33.html 4.打开audi,编写代码,xpath获取页面车型价格列表 5.运行项目…

深度学习技巧应用35-L1正则化和L2正则在神经网络模型训练中的应用

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用35-L1 正则化和L2正则在神经网络模型训练中的应用。L1正则化和L2正则化是机器学习中常用的两种正则化方法,用于防止模型过拟合并提高模型的泛化能力。这两种正则化方法通过在损失函数中添加惩罚项来控制模型的复杂性。…

面试八股文(4)

文章目录 1.sleep和wait区别2.为什么调用start()方法会执行run()方法&#xff0c;为什么不能直接调用run()方法3.synchronized关键字4.并发编程的三个重要特性5.synchronized和volatile关键字区别6.ThreadLocal7.为什么要用线程池&#xff1f;8.实现Runnable接口和Callable接口…

课时13:变量基础_变量场景

2.1.1 变量场景 学习目标 这一节&#xff0c; 我们从 数据存储、变量场景、小结 三个方面来学习。 数据存储 数据存储 所谓的数据存储&#xff0c;我们从三方面来理解这句话&#xff1a;1、数据保存到哪里 -- 各种媒介&#xff0c;CPU、内存、磁盘、磁带、网盘...2、数据保…

react+ts+antd-mobile 动态tabs➕下拉加载

1.初始化项目 //搭建项目 npm create vitelatest react-jike-mobile -- --template react-ts//安装依赖 npm i //运行 npm run dev清理项目目录结构 安装ant design mobile ant design mobile是ant design家族里专门针对于移动端的组件库 npm install --save antd-mobile测试…

日志报错 git -c dif.mnemonicprefix=false -c core.guotepath=false 解决方法

前言: 在进行下面操作前,必须确保,你是否安装了Git。 查看Git 在命令行窗口中输入`git --version`: 如果这个命令成功显示了Git的版本信息,这表明Git已经被安装。 1. 使用Sourcetree SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端…

C++核心deque容器,stack容器,queue容器,list容器,set容器,pair ,map容器

3.deque容器 1.deque容器的基本概念 Vector容器是单向开口的连续内存空间&#xff0c;deque则是一种双向开口的连续线性空间。所谓的双向开口&#xff0c;意思是可以在头尾两端插入元素&#xff0c;但是在其头部操作效率奇差&#xff0c;无法被接受。 deque容器和vector容器最…

MongoDB索引详情

文章目录 MongoDB索引MongoDB索引数据结构WiredTiger数据文件在磁盘的存储结构 索引的分类索引设计原则索引操作创建索引查看索引删除索引 索引类型单键索引&#xff08;Single Field Indexes&#xff09;复合索引&#xff08;Compound Index&#xff09;多键索引&#xff08;M…