k8s简介,k8s环境搭建
目录
- K8s简介
- 环境搭建和准备工作
- 修改主机名(所有节点)
- 配置静态IP(所有节点)
- 关闭防火墙和seLinux,清除iptables规则(所有节点)
- 关闭交换分区(所有节点)
- 修改/etc/hosts文件(所有节点)
- 配置ssh免密登录(master节点)
- 加载模块br_netfilter(所有节点)
- 修改内核参数以满足k8s的运行需求(所有节点)
- 配置centos7镜像源(所有节点)
- 安装docker(所有节点)
- 安装k8s(所有节点)
- master节点初始化(master节点)
- 在node1和node2节点执行join
- 使用kubectl管理集群(master节点)
- 安装CNI网络插件
- 安装Calico(master节点)
K8s简介
Kubernetes(简称 K8s)是一个开源的容器编排平台。
起源与发展
- K8s 最初由谷歌公司开发,于 2014 年开源。它借鉴了谷歌内部大规模容器管理的经验和技术,旨在为容器化应用提供一个高效、可靠、可扩展的管理平台。
- 随着容器技术的快速发展和广泛应用,K8s 迅速成为容器编排领域的事实标准,被众多企业和组织广泛采用,并且在不断地发展和完善中,社区活跃度极高,持续推动着 K8s 功能的丰富和性能的提升。
主要组件
- Master 节点:是 K8s 集群的控制中心,负责管理和协调整个集群。包含 API Server、Scheduler、Controller Manager 等组件,API Server 提供了 K8s 的 API 接口,用于接收和处理用户请求;Scheduler 负责将 Pod 调度到合适的 Node 节点上;Controller Manager 负责管理和维护集群中各种资源的状态。
- Node 节点:是 K8s 集群中的工作节点,用于运行容器化应用。包含 kubelet、kube-proxy 等组件,kubelet 负责与 Master 节点通信,接收并执行 Master 节点下达的任务,管理本节点上的容器;kube-proxy 负责实现 Pod 的网络代理和负载均衡功能。
环境搭建和准备工作
使用三台一模一样的centos7虚拟机,内存4G,4核,40G磁盘,一台做master,另外两台做node。
[root@localhost ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]#
修改主机名(所有节点)
分别执行。
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2
配置静态IP(所有节点)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 将BOOTPROTO从dhcp改为static或none
BOOTPROTO=static
# 若没有ONBOOT添加
ONBOOT=yes
# 下面的都需要添加,如果在桥接模式下ip地址要和实体机相同网段,网关要和实体机网关相同。如果是nat则和nat网段相同。
IPADDR=192.168.3.147
PREFIX=24
GATEWAY=192.168.3.1
#DNS服务器可以只配置一个,当然也可以配置两个
DNS1=114.114.114.114
DNS2=8.8.8.8
配置完成后重启网络服务
systemctl restart network
关闭防火墙和seLinux,清除iptables规则(所有节点)
为了防止干扰k8s运行。
# 关闭防火墙并且设置开机不启动
systemctl stop firewalld
systemctl disable firewalld
# 关闭seLinux,getenforce是获取seLinux的状态
# 没有设置过seLinux一般getenforce查询结果为Enforcing,需设置为disable关闭
getenforce
# 直接修改文件,改为SELINUX=disabled,重启之后生效
vim /etc/selinux/config
# 清除iptables规则
iptables -F

关闭交换分区(所有节点)
高版本的k8s要求必须关闭分区。
# 临时关闭
swapoff -a
# 修改/etc/fstab文件永久关闭,将文件中/dev/mapper/centos-swap swap行注释即可,也可以直接运行下面这条命令
sed -i '/swap/ s/^\(.*\)$/#\1/g' /etc/fstab
修改/etc/hosts文件(所有节点)
# 直接运行下面的命令,记得将IP地址修改为自己机器的IP地址,主机名字也换成自己的
cat >> /etc/hosts << EOF
192.168.3.147 master
192.168.3.146 node1
192.168.3.145 node2
EOF
配置ssh免密登录(master节点)
先生成密钥
ssh-keygen
再复制到所有节点
ssh-copy-id master
ssh-copy-id node1
ssh-copy-id node2
测试连接,免密登录
ssh node1
# 登出
exit
加载模块br_netfilter(所有节点)
# 临时加载
modprobe br_netfilter
# 永久加载,创建文件,在文件中写入模块名字br_netfilter
vim /etc/modules-load.d/k8s.confsystemctl restart systemd-modules-load.service
修改内核参数以满足k8s的运行需求(所有节点)
cat <<EOF >> /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
EOF# 重新加载系统参数配置,让上面的修改生效
sysctl -p
配置centos7镜像源(所有节点)
报错:
- Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was
CentOS 7 仓库已经被归档,当前的镜像地址无法找到所需的文件。CentOS 7 的官方支持已经结束,部分仓库已被移至归档库。导致 yum 命令无法找到所需的元数据文件。
cd /etc/yum.repos.d
mv CentOS-Base.repo CentOS-Base.repo.backup
vim CentOS-Base.repo
添加如下内容
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#$baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
#baseurl=http://vault.centos.org/7.9.2009/x86_64/os/
baseurl=http://vault.centos.org/7.9.2009/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
再添加阿里镜像源。
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
执行生效。
um clean all
um makecache
安装docker(所有节点)
#安装工具包
yum install -y yum-utils
# 使用工具包自动下载docker,这是官方的源,太卡
#yum-config-manager \
# --add-repo \
# https://download.docker.com/linux/centos/docker-ce.repo#建议使用阿里云镜像替换官方源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 指定版本安装docker
yum install -y docker-ce-20.10.0 docker-ce-cli-20.10.0 containerd.io# 开启docker服务
systemctl start docker
# 设置开机启动
systemctl enable docker
- 配置Docker使用systemd作为默认Cgroup驱动。
- 配置docker镜像源。
vim /etc/docker/daemon.json
{"registry-mirrors": ["https://71v143bd.mirror.aliyuncs.com","https://docker.m.daocloud.io"],"exec-opts": ["native.cgroupdriver=systemd"]
}#重启docker
systemctl daemon-reload
systemctl restart docker
安装k8s(所有节点)
添加k8s yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装kubeadm,kubelet,kubectl(指定版本)
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
设置kubelet开机自启动
systemctl enable kubelet
安装CoreDNS容器(k8s集群运行时需要CoreDNS提供DNS解析服务)
docker pull registry.aliyuncs.com/google_containers/coredns:v1.8.4
master节点初始化(master节点)
使用kubeadm init命令进行初始化。
- apiserver-advertise-address修改为master主机IP地址。
- –pod-network-cidr有两个值,打算使用calico网络插件时,最好使用192.168.0.0/16,打算使用flannel网络插件时最好使用10.244.0.0/16;这两个都是相应网络插件的默认IP,否则需要修改对应配置文件。
kubeadm init \
--apiserver-advertise-address=192.168.3.147 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
#--pod-network-cidr=10.244.0.0/16
--pod-network-cidr=192.168.0.0/16
--kubernetes-version=v1.23.6
等待几分钟,看到下面的内容说明成功了。
注意红圈中的命令,在节点机器运行kubeadm join部分的命令加入节点。

在node1和node2节点执行join
kubeadm join 192.168.3.147:6443 --token v2q814.ab6aywry0350o52v \--discovery-token-ca-cert-hash sha256:4fe3d2cebdcb34b198e43bfd1453d15bbad5cac7b98c902776a7795bd26214ec
执行成功输出:

使用kubectl管理集群(master节点)
初始化kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
查看节点状态
kubectl get node

到这里发现所有节点为NotReady状态,这是因为完成互通还需要安装CNI(Container Networking Interface)网络插件。
安装CNI网络插件
CNI 全称是“Container Networking Interface”,即容器网络接口,它提供了一种标准的插件机制,用于连接容器到底层网络中。CNI 插件是一种可执行程序,它将实现容器网络连接的一些逻辑打包在一起,允许容器使用不同的网络模型,并提供了一组网络抽象接口。在 Kubernetes 等容器编排平台中,CNI 插件被广泛使用来实现容器网络。
CNI 插件可以由第三方厂商开发和维护,因此,可以选择最适合自己的插件。CNI 插件通常运行在主机上,并由容器运行时调用,例如 Docker、rkt 等。当容器需要连接到主机网络时,CNI 插件将会为其创建必要的网络接口和路由规则。
一些常用的 CNI 插件包括:
- Flannel:一个简单易用的网络解决方案,支持多种部署模式。
- Calico:一个高度可扩展的容器网络方案,旨在为大规模生产环境提供网络和安全性。
- Weave Net:一个分布式的容器网络方案,具有良好的可扩展性和高度自动化的管理。
- Cilium:一个基于 eBPF 的容器网络和安全解决方案,提供强大的流量控制和安全性。
安装Calico(master节点)
先创建个文件夹,用于存放配置文件:
mkdir -p /work/devops/k8s/config
cd /work/devops/k8s/config
下载calico配置文件
wget https://docs.tigera.io/archive/v3.25/manifests/calico.yaml
修改calico配置文件
vim calico.yaml
原来的配置
# - name: CALICO_IPV4POOL_CIDR
# value: "192.168.0.0/16"
修改后的配置(注意:value与上边kubeadm init的–pod-network-cidr参数保持一致)
- 特别注意:修改的两行一定要注意缩进和上面的内容保持一致,否则会报奇奇怪怪的错误。

启用calico
kubectl apply -f ./calico.yaml

查看pod状态
kubectl get pods -A
Calico的状态错误Init:ImagePullBackOff或Init:ErrImagePull,镜像没有拉取成功。

可以删除失败pod,重新拉取,但通常还是失败,calico-node-bvvhc替换成实际镜像名称。
kubectl get pods -n kube-system | grep calico-node-bvvhc | awk '{print$1}'| xargs kubectl delete -n kube-system pods
可以手动拉取calico,注意这一步所有节点都要执行。
docker pull calico/cni:v3.25.0
上一步完成后,再次查询pod状态,镜像已经在拉取了。
kubectl get pods -A

查询节点状态,都是Ready。

相关文章:
k8s简介,k8s环境搭建
目录 K8s简介环境搭建和准备工作修改主机名(所有节点)配置静态IP(所有节点)关闭防火墙和seLinux,清除iptables规则(所有节点)关闭交换分区(所有节点)修改/etc/hosts文件&…...
深入理解MySQL事务(万字详)
文章目录 什么是事务为什么会出现事务事务的版本支持事务的提交方式事务常见操作方式正常演示 - 证明事务的开始与回滚非正常演示1 - 证明未commit,客户端崩溃,MySQL自动会回滚(隔离级别设置为读未提交)非正常演示2 - 证明commit了…...
微信小程序使用picker根据接口给的省市区的数据实现省市区三级联动或者省市区街道等多级联动
接口数据如上图 省市区多级联动,都是使用的一个接口通过传参父类的code。返回我们想要的数据 比如获取省就直接不要参数。市就把省得code传给接口,区就把市的code作为参数。 <picker mode"multiSelector" :range"mulSelect1" …...
Go Fx 框架使用指南:深入理解 Provide 和 Invoke 的区别
1. 什么是 Fx 框架? Fx 是一个基于 Go 语言的依赖注入框架,专注于简化应用程序的生命周期管理和依赖的构建。在复杂的应用程序中,Fx 通过模块化的设计方式将组件连接起来,使开发者能够更高效地管理依赖关系。 Fx 的核心理念是&a…...
VSCode+Continue实现AI辅助编程
Continue是一款功能强大的AI辅助编程插件,可连接多种大模型,支持代码设计优化、错误修正、自动补全、注释编写等功能,助力开发人员提高工作效率与代码质量。以下是其安装和使用方法: 一、安装VSCode 参见: vscode安…...
阿里云服务器在Ubuntu上安装redis并使用
1、redis安装 sudo apt install lsb-release curl gpgcurl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpgecho "deb [signed-by/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.…...
Blazor-Blazor呈现概念
静态和交互式呈现概念 在Blazor开发中,Razor 组件具备两种重要的呈现方式,分别是静态呈现和交互式呈现。 静态呈现 也被称为静态渲染,是一种典型的服务器端方案。在这种模式下,组件呈现时,用户与.NET/C# 代码之间缺…...
14-6-2C++的list
(一)list对象的带参数构造 1.list(elem);//构造函数将n个elem拷贝给本身 #include <iostream> #include <list> using namespace std; int main() { list<int> lst(3,7); list<int>::iterator it; for(itlst.begi…...
StarRocks常用命令
目录 1、StarRocks 集群管理&配置命令 2、StarRocks 常用操作命令 3、StarRocks 数据导入和导出 1、StarRocks 集群管理&配置命令 查询 FE 节点信息 SHOW frontends; SHOW PROC /frontends; mysql -h192.168.1.250 -P9030 -uroot -p -e "SHOW PROC /dbs;"…...
激光雷达和相机早期融合
通过外参和内参的标定将激光雷达的点云投影到图像上。 • 传感器标定 首先需要对激光雷达和相机(用于获取 2D 图像)进行外参和内参标定。这是为了确定激光雷达坐标系和相机坐标系之间的转换关系,包括旋转和平移。通常采用棋盘格等标定工具&…...
PMP–一、二、三模–分类–12.采购管理
文章目录 技巧十二、采购管理 一模12.采购管理--3.控制采购--输出--风险登记册--每个被选中的卖方都会带来特殊的风险。随着早期风险的过时以及新风险的出现,在项目执行期间对风险登记册进行变更。 供应商还未开始做,是一个风险,当做风险进行…...
C++ 标准模板库 (STL, Standard Template Library)
声明:大佬们~这是Tubishu在追寻stl过程中偶然得到了“颢天”大佬的笔记,shushu感觉非常有帮助🔥又颢天佬未曾来过CSDN,索性在此传达颢天大佬的功德🧎 传送门在此➡️颢天笔记✨✨ C 标准模板库 (STL, Standard Templa…...
从spec到iso的koji使用
了解一下Linux发行版流程::从spec到iso的koji使用 for Fedora 41。 Fedora 41有24235个包,我们选择 minimal 的几十个源码包,百多个rpm包构建。 配3台服务器 40C64G 48C64G 80C128G,有点大材小用,一台就够了 …...
【记录自开发的SQL工具】工具字符拼接、Excel转sql、生成编码、生成测试数据
记录自己开发的一个SQL聚合工具 功能介绍: 文本加引号 给多行文本前后添加引号,并用逗号连接,直接复制到 sql 中的 in 条件中 Excel转SQL 适用于将Excel表格的数据,批量导入到数据库的场景 此工具能快速将excel表格转换为i…...
Cesium特效——城市白模的科技动效的各种效果
最终效果图如下: 实现方法: 步骤一:使用cesiumlib生产白模,格式为3dtiles 注意事项:采用其他方式可能导致白模贴地,从而导致不能实现该效果,例如把步骤二的服务地址改为Cesium Sandcastle 里的…...
VS Code i18n国际化组件代码code显示中文配置 i18n ally
VUE项目做i18n国际化之后,代码中的中文都变成了code这时的代码就会显得非常难读,如果有一个插件能把code转换成中文显示就好了 vscode插件搜索“i18n ally” 在项目根文件夹下创建文件:.vscode/settings.json settings.json 内容如下 {"…...
C++ —— 智能指针 unique_ptr (上)
C —— 智能指针 unique_ptr (上) 普通指针的不足普通指针的释放智能指针智能指针 unique_ptr智能指针初始化错误用法get()方法返回裸指针智能指针不支持指针的运算(、-、、- -) 普通指针的不足 new和new [] 的内存需要用delete和…...
技术 · 创作 · 生活 | 我的 2024 全面复盘
目录 🌟2024年度总结:回顾、成长与突破🌟🚀 一、技术成长与突破 🚀🔗 1. 深入区块链与智能合约🔍 2. 探索新兴技术 ✍️ 二、创作与博客历程 ✍️📖 1. 内容创作的演变🏆…...
表的增删改查(MySQL)
1. 表的增删改查 CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除) 1.1 Create 语法: INSERT [INTO] table_name [(column [, column] ...)] VALUES (value_list) [, (value_list)] ...value_list:…...
【设计模式】JAVA 策略 工厂 模式 彻底告别switch if 等
【设计模式】JAVA 策略 工厂 模式 彻底告别switch if 等 目录 【设计模式】JAVA 策略 工厂 模式 彻底告别switch if 等 优势 适用场景 项目结构 关键代码 优势 消除 switch:将分支逻辑分散到独立的策略类中。 开闭原则:新增类型只需添加新的 TypeHa…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...
32位寻址与64位寻址
32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...
欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!
多连接 BLE 怎么设计服务不会乱?分层思维来救场! 作者按: 你是不是也遇到过 BLE 多连接时,调试现场像网吧“掉线风暴”? 温度传感器连上了,心率带丢了;一边 OTA 更新,一边通知卡壳。…...
