一文学会K8s集群搭建

环境准备

  • 节点数量:2台虚拟机 centos7
  • 硬件配置:master节点内存至少3G(2G后面在master节点初始化集群时会报错,内存不够),node节点可以2G,CPU至少2个,硬盘至少30G
  • 网络要求:多个节点之间网络互通,每个节点能访问外网

集群规划

这两个名称是准备设置的主机名称

  • k8s-master
  • k8s-node1

设置主机名

hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
# 查看主机名
hostname

同步host文件

如果DNS不支持主机名称解析,还需要在每台机器的/etc/hosts文件添加主机名和ip的对应关系。所有机器都要同步。我自己只搞了2台虚拟机做集群。

cat >> /etc/hosts <<EOF
192.168.35.133 k8s-master
192.168.35.132 k8s-node1
EOF

关闭防火墙

所有机器都要关闭

systemctl stop firewalld && systemctl disable firewalld

关闭SELINUX

setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disable/g' /etc/selinux/config

关闭swap分区

每一台机器都要关闭。为什么要关?自己百度去

swapoff -a && sed -ri 's/ .*swap.*/#&/' /etc/fstab

同步时间

yum install ntpdate -y
ntpdate ntp1.aliyun.com;hwclock --systohc

安装containerd

每台机器都要安装

# 安装yum-config-manger依赖
yum install -y yum-utils device-mapper-persistent-data lvm2# 添加containerd yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装containerd
yum install -y containerd.io cri-tools# 配置containerd
cat > /etc/containerd/config.toml <<EOF
disabled_plugins = ["restart"]
[plugins.linux]
shim_debug = true
[plugins.cri.registry.mirrors."docker.io"]
endpoint = ["https://frz7i079.mirror.aliyuncs.com"]
[plugins.cri]
sandbox_image="registry.aliyuncs.com/google_containers/pause:3.2"
EOF# 启动containerd服务 并设置开机启动
systemctl enable containerd && systemctl start containerd && systemctl status containerd# 配置 containerd 配置
cat > /etc/modules-load.d/containerd.conf << EOF
overlay
br_netfilter
EOF# 配置k8s网络配置
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF# 加载overlay br_netfilter模块
modprobe overlay
modprobe br_netfilter# 查看当前配置是否生效
sysctl -p /etc/sysctl.d/k8s.conf

添加源

每台机器都安装。你的cpu是x86的就选择x86的,反之选择arm的。

# 查看源
yum repolist

添加x86的源

cat <<EOF > kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gogkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF# 移动并修改
mv kubernetes.repo /etc/yum.repos.d

添加arm的源

cat << EOF > kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gogkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF# 移动并修改
mv kubernetes.repo /etc/yum.repos.d

安装K8s

每台机器都要安装。

# 安装最新版本
yum install -y kubelet kubeadm kubectl# 指定版本安装
yum install -y kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0# 启动kubelet
sudo systemctl enable kubelet && sudo systemctl start kubelet && systemctl status kubelet

初始化集群

只需要在master节点上初始化即可。

kubeadm init \
--apiserver-advertise-address=192.168.35.133 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16
  • --apiserver-advertise-address:master节点的IP地址
  • --image-repository:选择用于拉取控制平面镜像的容器仓库,默认的太慢了,换成阿里云的
  • --pod-network-cidr:指明pod网络可以使用的IP地址段。设置后控制平面将会为每一个节点自动分派CIDRs

K8s集群搭建

# master节点执行
mkdir -p $HOME/.kube# master节点执行
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config# master节点执行
sudo chown $(id -u):$(id -g) $HOME/.kube/config

node加入集群

# 所有node节点执行
kubeadm join 192.168.35.133:6443 --token bzotcq.9uev0sf5a19pgilp \
--discovery-token-ca-cert-hash sha256:98183ddb45ca9f9ee224c3a77fac6b524d2bf1dd31f911f5d023639f80abd43f

K8s集群搭建

master检查是否加入集群成功

kubectl get nodes

K8s集群搭建

解决节点NotReady状态

虽然集群搭建起来,但是不可用,需用通过网络插件解决该问题 https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 在master节点创建kube-flannel.yml,输入下面内容

vi kube-flannel.yml---
kind: Namespace
apiVersion: v1
metadata:name: kube-flannellabels:k8s-app: flannelpod-security.kubernetes.io/enforce: privileged
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:labels:k8s-app: flannelname: flannel
rules:
- apiGroups:- ""resources:- podsverbs:- get
- apiGroups:- ""resources:- nodesverbs:- get- list- watch
- apiGroups:- ""resources:- nodes/statusverbs:- patch
- apiGroups:- networking.k8s.ioresources:- clustercidrsverbs:- list- watch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:labels:k8s-app: flannelname: flannel
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: flannel
subjects:
- kind: ServiceAccountname: flannelnamespace: kube-flannel
---
apiVersion: v1
kind: ServiceAccount
metadata:labels:k8s-app: flannelname: flannelnamespace: kube-flannel
---
kind: ConfigMap
apiVersion: v1
metadata:name: kube-flannel-cfgnamespace: kube-flannellabels:tier: nodek8s-app: flannelapp: flannel
data:cni-conf.json: |{"name": "cbr0","cniVersion": "0.3.1","plugins": [{"type": "flannel","delegate": {"hairpinMode": true,"isDefaultGateway": true}},{"type": "portmap","capabilities": {"portMappings": true}}]}net-conf.json: |{"Network": "10.244.0.0/16","Backend": {"Type": "vxlan"}}
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-dsnamespace: kube-flannellabels:tier: nodeapp: flannelk8s-app: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/osoperator: Invalues:- linuxhostNetwork: truepriorityClassName: system-node-criticaltolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cni-pluginimage: docker.io/flannel/flannel-cni-plugin:v1.1.2#image: docker.io/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.2command:- cpargs:- -f- /flannel- /opt/cni/bin/flannelvolumeMounts:- name: cni-pluginmountPath: /opt/cni/bin- name: install-cniimage: docker.io/flannel/flannel:v0.22.0#image: docker.io/rancher/mirrored-flannelcni-flannel:v0.22.0command:- cpargs:- -f- /etc/kube-flannel/cni-conf.json- /etc/cni/net.d/10-flannel.conflistvolumeMounts:- name: cnimountPath: /etc/cni/net.d- name: flannel-cfgmountPath: /etc/kube-flannel/containers:- name: kube-flannelimage: docker.io/flannel/flannel:v0.22.0#image: docker.io/rancher/mirrored-flannelcni-flannel:v0.22.0command:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN", "NET_RAW"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: EVENT_QUEUE_DEPTHvalue: "5000"volumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/- name: xtables-lockmountPath: /run/xtables.lockvolumes:- name: runhostPath:path: /run/flannel- name: cni-pluginhostPath:path: /opt/cni/bin- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg- name: xtables-lockhostPath:path: /run/xtables.locktype: FileOrCreate
kubectl apply -f kube-flannel.yml
 

K8s集群搭建

如果node节点还是NotReady状态,可尝试重启服务,等待几分钟再次查询

# 重启kubelet
sudo systemctl restart kubelet

K8s集群搭建

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

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

相关文章

Ant-Design-Pro-V5: ProTable前端导出excel表格。

Prtable表格中根据搜索条件实现excel表格导出。 代码展示&#xff1a; index.jsx import React, { useRef, useState, Fragment, useEffect } from react; import { getLecturerList, lecturerExportExcel } from /services/train/personnel; import { getOrgList, getSelec…

服务器性能指什么如何优化

服务器性能指什么如何优化 性能最通俗的衡量指标就是“时间”&#xff0c;CPU的使用率指的是CPU用于计算的时间占比&#xff0c;磁盘使用率指的是磁盘操作的时间占比。 当CPU使用率100%时&#xff0c;意味着有部分请求来不及计算&#xff0c;响应时间增加或者超时&#xff1b…

Navicat Premium 16.2.7 for Mac

Navicat Premium 16是一款功能强大的跨平台数据库管理工具&#xff0c;支持多种数据库类型&#xff0c;如MySQL、MariaDB、Oracle、SQLite、PostgreSQL等等。它提供了丰富的数据库管理功能和工具&#xff0c;可以帮助开发人员和数据库管理员快速地创建、管理和维护数据库。 Nav…

VS Code 快速消除前置空格和常用快捷键

目录 介绍&#xff1a; 消除前置空格&#xff1a;SHIFTTAB 常用的 VS Code 快捷键 介绍&#xff1a; 在使用 Visual Studio Code (VS Code) 进行代码编辑时&#xff0c;熟练掌握一些快捷键和编辑技巧可以大幅提高开发效率。本文将重点介绍如何使用快捷键 SHIFTTAB 快速消除代…

【Vue3 知识第七讲】reactive、shallowReactive、toRef、toRefs 等系列方法应用与对比

文章目录 一、reactive()二、readonly()三、shallowReactive()四、shallowReadonly()五、isReactive() 和 isReadonly()六、toRef()七、toRefs()八、toRaw()九、ref、toRef、toRefs 异同点 一、reactive() reactive() 函数用于返回一个对象的响应式代理。与 ref() 函数定义响应…

Vue2 与Vue3的区别?面试题

Vue 2和Vue 3是Vue.js框架的不同版本&#xff0c;在面试中经常涉及到它们之间的区别。以下是Vue 2和Vue 3的主要区别&#xff1a; 性能提升&#xff1a;Vue 3在性能方面进行了优化。Vue 3引入了更高效的Diff算法&#xff0c;提高了渲染性能。此外&#xff0c;Vue 3还进行了代码…

stable diffusion实践操作-大模型介绍

本文专门开一节写大模型相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 模型下载网站 国内的是&#xff1a;https://www.liblibai.com 国外的是&#xff1a;https://civitai.com&#xff08;科学上网&#xff09; 一、发展历…

自动化驱动程序管理

在部署操作系统时&#xff0c;每次都从下载和分发所需的驱动程序中实现真正的独立性可能是一场艰苦的战斗。特别是具有硬件多样化的环境&#xff0c;并且需要支持新的硬件类型时。借助 OS Deployer&#xff0c;可以对所有端点使用一个映像&#xff0c;无论品牌和型号如何&#…

SpringBoot项目--电脑商城【用户登录】

1. 用户登录功能 先分析一下思路:当用户输入用户名和密码将数据提交给后台数据库进行查询,如果存在对应的用户名和密码则表示登录成功,登录成功之后跳转到系统的主页就是index.html页面,跳转在前端使用jQuery来完成 2.持久层[Mapper] 规划需要执行的SQL语句 依据用户提交的用…

Android-Broadcast动态注册

广播的动作分别为&#xff1a;注册、发送、接收。 1. 定义接收器 public class MyReceiver extends BroadcastReceiver {Overridepublic void onReceive(Context context, Intent intent) {} } 2. 注册广播 final MyReceiver[] receivers {null};Button registerBroad fi…

【用unity实现100个游戏之7】从零开始制作一个仿杀戮尖塔卡牌回合制游戏

文章目录 前言素材资源开始一、UI框架二、挂载脚本三、事件监听&#xff0c;用于绑定按钮事件四、声音管理器五、excel转txt文本六、游戏配置七、用户信息表八、战斗管理器九、 敌人管理器十、玩家血量、能量、防御值、卡牌数十一、敌人血量 行动显示逻辑十二、UI提示效果实现十…

最新基于MATLAB 2023a的机器学习、深度学习教程

详情点击链接&#xff1a;最新基于MATLAB 2023a的机器学习、深度学习教程 前沿 MATLAB 2023版的深度学习工具箱&#xff0c;提供了完整的工具链&#xff0c;能够在一个集成的环境中进行深度学习的建模、训练和部署。与Python相比&#xff0c;MATLAB的语法简洁、易于上手&#…

vue 获取当前日期所属月的第一天和最后一天的日期

学习目标&#xff1a; 学习目标 - [ ] vue 获取当前日期所属月的第一天和最后一天的日期 学习内容&#xff1a; 学习内容如下所示&#xff1a; 1. 使用 JavaScript 的 Date 对象来获取当前日期所属月的第一天和最后一天的日期 // 获取当前日期 const today new Date();//…

第四篇 DirectShow 采集调用结构关系

第一篇: DirectShow视频采集_会头痛的可达鸭的博客-CSDN博客 一、GraphBuilder 1、IFilterGraph2、IGraphBuilder、ICaptureGraphBuiler2 (1)、CLSID IFilterGraph CLSID_FilterGraphIFilterGraph2 CLSID_CaptureGraphBuilderIGraphBuilder CL…

零碎的C++

构造函数和析构函数 构造函数不能是虚函数&#xff0c;而析构函数可以是虚函数。原因如下&#xff1a; 构造函数不能是虚函数&#xff0c;因为在执行构造函数时&#xff0c;对象还没有完全创建&#xff0c;还没有分配内存空间&#xff0c;也没有初始化虚函数表指针。如果构造…

Jetsonnano B01 笔记1:基础理解—网络配置—远程连接

今日开始学习 Jetsonnano B01&#xff0c;这是一台小电脑&#xff0c;可以用来&#xff1a; 运行现代 AI 负载&#xff0c;并行运行多个神经网络&#xff0c;以及同时处理来自多个高清传感器的数据&#xff0c;可广泛应用与图像分类、对象检测、图像分割、语音处 理等领域。它…

【python爬虫】15.Scrapy框架实战(热门职位爬取)

文章目录 前言明确目标分析过程企业排行榜的公司信息公司详情页面的招聘信息 代码实现创建项目定义item 创建和编写爬虫文件存储文件修改设置 代码实操总结 前言 上一关&#xff0c;我们学习了Scrapy框架&#xff0c;知道了Scrapy爬虫公司的结构和工作原理。 在Scrapy爬虫公司…

配置本地maven

安装maven安装包 修改环境变量 vim ~/.bash_profile export JMETER_HOME/Users/yyyyjinying/apache-jmeter-5.4.1 export GOROOT/usr/local/go export GOPATH/Users/yyyyjinying/demo-file/git/backend/go export GROOVY_HOME/Users/yyyyjinying/sortware/groovy-4.0.14 exp…

手写Mybatis:第10章-使用策略模式,调用参数处理器

文章目录 一、目标&#xff1a;参数处理器二、设计&#xff1a;参数处理器三、实现&#xff1a;参数处理器3.1 工程结构3.2 参数处理器关系图3.3 入参数校准3.4 参数策略处理器3.4.1 JDBC枚举类型修改3.4.2 类型处理器接口3.4.3 模板模式&#xff1a;类型处理器抽象基类3.4.4 类…

linux 进程隔离Namespace 学习

一、linux namespace 介绍 1.1、概念 Linux Namespace是Linux内核提供的一种机制&#xff0c;它用于隔离不同进程的资源视图&#xff0c;使得每个进程都拥有独立的资源空间&#xff0c;从而实现进程之间的隔离和资源管理。 Linux Namespace的设计目标是为了解决多个进程之间…