小白到运维工程师自学之路 第七十集 (Kubernetes集群部署)
一、概述
Kubernetes(简称K8S)是一个开源的容器编排和管理平台,是由Google发起并捐赠给Cloud Native Computing Foundation(CNCF)管理的项目。它的目标是简化容器化应用的部署、扩展、管理和自动化操作。
以下是Kubernetes的一些关键特性:
1、容器编排:Kubernetes可以管理和调度大规模的容器化应用程序。它能够确保应用程序在集群中的各个节点上正确启动和运行,并根据资源需求和可用性动态调整容器的数量和位置。
2、服务发现和负载均衡:Kubernetes提供了内建的服务发现机制,使得容器之间可以通过服务名来相互通信,而不需要硬编码IP地址或端口。同时,Kubernetes还支持负载均衡,自动将请求分发给可用的容器实例。
3、自动伸缩:Kubernetes能够根据应用程序的负载自动进行水平扩展,即增加或减少容器的数量,以满足应用程序的需求。这种自动伸缩可以基于CPU利用率、内存使用量等指标进行配置。
4、自愈性和故障恢复:Kubernetes具有自动故障检测和修复的能力。当容器或节点发生故障时,Kubernetes会自动重新启动容器、迁移容器到其他健康节点,或者按照指定的策略自动替换故障的节点。
5、云原生底层设施支持:Kubernetes与云原生应用开发和部署的理念紧密结合。它提供了对云平台的适配和整合,能够无缝地部署和管理应用程序到各种云服务提供商的基础设施上。
6、插件和扩展性:Kubernetes拥有丰富的插件和扩展机制,可以通过自定义资源或控制器来扩展和定制其功能。这使得开发者可以根据自己的需求,将Kubernetes与其他工具和平台进行整合。
Kubernetes广泛应用于企业和云服务提供商中,为容器化应用提供了灵活、可靠和可扩展的运行环境。它极大地简化了应用程序的部署和管理,提高了开发和运维的效率,成为云原生应用开发的重要基石之一。
二、工作原理
Kubernetes的工作原理可以分为以下几个关键组件和概念:
1. Master节点:Master节点是Kubernetes集群的控制中心,负责整个集群的管理和控制。它包含以下组件:
- API Server:提供集群的API接口,接收和处理用户和组件的请求。
- Scheduler:根据用户的需求和资源的可用性,决定将容器调度到集群中的哪个节点上。
- Controller Manager:负责监控和管理集群状态,包括自动伸缩、故障恢复等功能。
- etcd:保存集群的配置信息和状态数据,保证高可用和一致性。
2. Worker节点:Worker节点是集群中实际运行容器的节点,也称为Minion节点。每个Worker节点上都有以下组件:
- Kubelet:负责与Master节点通信,管理本节点上的容器和Pod。
- Container Runtime:用于运行容器的底层软件,如Docker。
- kube-proxy:负责网络代理和负载均衡,为容器提供网络服务。
3. Pod:Pod是Kubernetes的最小部署单元,可以包含一个或多个相关的容器。Pod是运行在Worker节点上的实际应用实例,它共享相同的网络和存储资源。每个Pod都有一个唯一的IP地址。
4. ReplicaSet和Deployment:ReplicaSet是Kubernetes中的一个控制器,用于创建和管理拥有相同配置和副本数量的Pod组。它确保指定数量的Pod运行,并在有需要时进行水平扩展或收缩。Deployment是对ReplicaSet的进一步封装,提供了应用程序的版本控制和滚动升级的能力。
5. Service:Service是通过标签选择器与一组Pod进行关联,并提供稳定的服务访问入口。Service可以实现负载均衡、内部服务发现和跨集群通信等功能。
Kubernetes的工作原理可以简要概括为:用户通过API Server与Master节点交互,创建、修改或删除资源对象(如Pod、ReplicaSet、Deployment等)。Master节点根据请求的内容进行相应操作,并将相应配置信息存储在etcd中。Kubelet监听Master节点的指令,在Worker节点上创建、管理和监控Pod的生命周期。kube-proxy负责处理网络请求,将请求转发到合适的Pod。
通过这种架构,Kubernetes可以动态地管理和调度容器化应用程序,实现高可用性、弹性伸缩和自动化操作。它提供了一种高级抽象的方式来描述应用程序和资源对象,并通过自动化和智能调度来确保应用程序的高效运行。

三、安装部署docker
注意:所有主机配置推荐CPU:2C+ Memory:2G+

1、主机初始化配置(所有主机都要配置)
所有主机配置禁用防火墙和selinux
setenforce 0
iptables -F
systemctl stop firewalld
systemctl disable firewalld
systemctl stop NetworkManager
systemctl disable NetworkManager
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
配置主机名并绑定hosts,不同主机名称不同
cat << EOF >> /etc/hosts
192.168.77.14 k8s-master
192.168.77.15 k8s-node01
192.168.77.16 k8s-node02
EOF

关闭交换分区
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
将IPv6的请求转发到IPv4
cat << EOF >> /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
查看
modprobe br_netfilter
sysctl -p

2、部署docker-ce环境
三台主机上分别部署 Docker 环境,因为 Kubernetes 对容器的编排需要 Docker 的支持(安装的版本是19.03.0)
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repoyum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum clean all && yum makecache fast yum -y install docker-ce-cli-19.03.3 containerd.iosystemctl start docker systemctl enable docker配置docker的阿里源
cat << END > /etc/docker/daemon.json
{"registry-mirrors":[ "https://nyakyfun.mirror.aliyuncs.com" ]
}
ENDsystemctl daemon-reloadsystemctl restart docker
四、安装部署Kubernetes集群
1、组件介绍
三个节点都需要安装下面三个组件
①、kubeadm:安装工具,使所有的组件都会以容器的方式运行
②、kubectl:客户端连接K8S API工具
③、kubelet:运行在node节点,用来启动容器的工具
2、配置阿里云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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttps://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
3、安装kubelet kubeadm kubectl(所有主机)
yum -y install kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0
systemctl enable kubelet
kubelet 刚安装完成后,通过 systemctl start kubelet 方式是无法启动的,需要加入节点或初始化为 master 后才可启动成功
如果在命令执行过程中出现索引 gpg 检查失败的情况, 请使用 yum install -y --nogpgcheck kubelet kubeadm kubectl 来安装
4、配置init-config.yaml(只有主节点配置)
Kubeadm 提供了很多配置项,Kubeadm 配置在 Kubernetes 集群中是存储在ConfigMap 中的,也可将这些配置写入配置文件,方便管理复杂的配置项。Kubeadm 配内容是通过 kubeadm config 命令写入配置文件的。
kubeadm config print init-defaults > init-config.yaml
vim /root/init-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 192.168.77.14 //master节点IP地址bindPort: 6443
nodeRegistration:criSocket: /var/run/dockershim.sockname: k8s-master //如果使用域名保证可以解析,或直接使用 IP 地址taints:- effect: NoSchedulekey: node-role.kubernetes.io/master
---
apiServer:timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:type: CoreDNS
etcd:local:dataDir: /var/lib/etcd //etcd 容器挂载到本地的目录
imageRepository: registry.aliyuncs.com/google_containers //修改为国内地址
kind: ClusterConfiguration
kubernetesVersion: v1.19.0
networking:dnsDomain: cluster.localserviceSubnet: 10.96.0.0/12podSubnet: 10.244.0.0/16 //新增加 Pod 网段
scheduler: {}

5、安装master节点
kubeadm config images list --config init-config.yaml 拉取镜像

kubeadm config images pull --config=init-config.yaml 下载镜像


echo "1" > /proc/sys/net/ipv4/ip_forward
kubeadm init --config=init-config.yaml //初始化安装K8S
下面红框中标注的是添加集群主节点的信息,给从指定主需要用到
kubectl 默认会在执行的用户家目录下面的.kube 目录下寻找config 文件,这里是将在初始化时[kubeconfig]步骤生成的admin.conf 拷贝到.kube/config
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
6、安装node节点
两个从节点指定主的信息
kubeadm join 192.168.77.14:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:910a7f7c25bcb32f88f28a66ccd142afa38188ee60d4807e9b8aac27b68a8a4d


到主节点上查看

在初始化 k8s-master 时并没有网络相关配置,所以无法跟 node 节点通信,因此状态都是“NotReady”
今天只学了安装配置,还没有学习网络设置,下一篇文章将学习如何进行网络设置
以上就是Kubernetes的安装与集群部署,如有错误欢迎各位大佬批评指正,我们共同进步
相关文章:
小白到运维工程师自学之路 第七十集 (Kubernetes集群部署)
一、概述 Kubernetes(简称K8S)是一个开源的容器编排和管理平台,是由Google发起并捐赠给Cloud Native Computing Foundation(CNCF)管理的项目。它的目标是简化容器化应用的部署、扩展、管理和自动化操作。 以下是Kube…...
docker 部署mysql 5.6集群
docker搭建mysql的集群(一主双从) 1.拉取镜像 docker pull mysql:5.6 2.启动master容器 docker run -it -d --name mysql_master -p 3306:3306 --ip 192.168.162.100 \ -v /data/mysql_master/mysql:/var/lib/mysql \ -v /data/mysql_master/conf.d…...
mysql基本信息查询
1.查看mysql表的数据量 select table_schema as 数据库, table_name as 表名, table_rows as 记录数, truncate(data_length/1024/1024, 2) as 数据容量(MB), truncate(index_length/1024/1024, 2) as 索引容量(MB) from information_schema.tables order by data_length des…...
C语言初学者必读:使用for循环将数字从大到小排序并输出
在学习C语言编程的过程中,了解数组的输入和排序是非常基础且重要的一部分。本文将以通俗易懂的方式,教你如何使用for循环实现将输入的n个数字按照从大到小的顺序输出,帮助你逐步掌握数组的使用和排序算法。 第一步:获取用户输入 …...
【Vue+Element-plus】记录后台首页多echart图静态页面
一、页面效果 二、完整代码 Index.vue <template><div><div><DateTime /><!-- {{username}} --></div><el-row :gutter"20"><el-col :span"8"><div class"grid-content bg-purple"><P…...
BM5 合并k个已排序的链表 javascript
描述 合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。 数据范围: 示例1 输入: [{1,2,3},{4,5,6,7}] 返回值: {1,2,3,4,5,6,7}示例2 输入: [{1,2},{1,4,5},{6}] 返回值: {1,1,2,4,5,6}解题思路 利用两个…...
1.利用matlab建立符号表达式(matlab程序)
1.简述 、 1. 使用sym命令创建符号变量和表达式 语法: sym(‘变量’,参数) %把变量定义为符号对象 说明:参数用来设置限定符号变量的数学特性,可以选择为’positive’、’real’和’unreal’, ’positive’ 表示为“正、实”符…...
LVS工作环境配置
一、LVS-DR工作模式配置 模拟环境如下: 1台客户机 1台LVS负载调度器 2台web服务器 1、环境部署 (1)LVS负载调度器 yum install -y ipvsadm # 在LVS负载调度器上进行环境安装 ifconfig ens33:200 192.168.134.200/24 # 配置LVS的VIP…...
金蝶,「起舞」在大模型时代
在过去的几年时间里,基于EBC的平台能力,金蝶已经走出了一个新的进化之路,这条路是对自身产品竞争力的重新构建,也更是对企业数字化转型需求的更大程度满足。 如今,苍穹GPT大模型更是让这种竞争力和服务力更向前一步。…...
解决Vs Code工具开发时 保存React文件时出现乱码情况
Vs Code工具开发时 保存React文件时出现乱码情况 插件库搜索:JS-CSS-HTML Formatter 把这个插件禁用或者卸载就解决保存时出现乱码的问题了; 如果没有解决,再看下面方案! 出现乱码问题通常是因为文件的编码格式不正确。您可以尝试以下解决方法: 确认文件编码格式&a…...
Fastjson 使用指南
文章目录 Fastjson 使用指南0 简要说明为什么要用JSON?用JSON的好处是什么?为什么要用JSON?JSON好处 1 常用数据类型的JSON格式值的范围 2 快速上手2.1 依赖2.2 实体类2.3 测试类 3 常见用法3.1 序列化操作核心操作对象转换为JSON串list转换J…...
阿里云内容审核服务使用(图片审核)
说明:在项目中,我们经常会对用户上传的内容(如文字、图片)等资源内容进行审核,审核包括两方面,一方面是内容与描述不符,一方面是违反法律法规。本文介绍使用阿里提供的内容审核服务,…...
git撤回最近一次push操作
git push -f origin HEAD^:branch_name其中,branch_name 是你想要撤回 push 操作的分支的名称。 这个命令将会强制推送到远程仓库,将远程分支回滚到上一个提交(HEAD^ 意味着上一个提交)。这样做会丢失最近一次 push 的更改&#…...
2000-2022年上市公司环境不确定性(原始数据+测算代码+测算结果)
2000-2022年上市公司环境不确定性指数(含原始数据 代码和计算结果) 1、时间:2000-2022年 2、指标:gupiao代码、名称、日期、年份、总资产净利润率ROA、营业收入、上市日期、成立日期、行业代码、年末是否ST或PT、行业、EU未调整…...
网络基本概念
目录 一、IP地址 1. 概念 2. 格式 3. 特殊IP 二、端口号 1.概念 2. 格式 3.注意事项 三、 协议 1. 概念 2. 作用 四、协议分层 1. 网络设备所在分层 五、封装与分用 六、客户端和服务器 1. 客户端与服务器通信的过程 一、IP地址 1. 概念 IP地址主要用于标识网络主机.其他网络…...
2.安装Docker-ce
一、删除之前安装的docker(若之前未安装过,此步骤省略…) 进入centos根目录执行以下命令(\ 是linux系统种命令换行符,如果命令过长,可以用\来换行) yum remove docker \ docker-client \ docker-client-latest \ doc…...
Redis-2
Redis 持久化 Redis 为了保证效率,数据缓存在了内存中,但是会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件中,以保证数据的持久化。总的目的把数据保存到硬盘,有 RDB 和 AOF 两种。 RDB 持久化方案: RDB 是一…...
一分钟了解下Java追随和适应云原生的手段之Java Native Build(JNB)
文章首发地址 为了解决在云原生环境中,Java应用启动慢的问题,出现了很多派系,如拯救派,让应用在原有基础上启动更快(一般都是用资源换时间),还有就是革命派,Java向Golang学习&#x…...
Flutter iOS 与 flutter 相互通信
在混合开发中避免不了通信,简单记录一下,Flutter iOS工程与Flutter 之间相互通信。 Flutter中通过Platform Channel实现Flutter和原生端的数据传递,是怎么进行数据通信,以及怎么配置,下面一一进行详解。 FlutterMetho…...
OpenCV和PIL图像对象转换
OpenCV和PIL(Python Imaging Library)都是常用的Python图像处理库。它们都有自己的图像对象类型,因此在使用它们时需要进行相应的转换。 下面是OpenCV图像对象和PIL图像对象之间的转换方法: 将OpenCV图像对象转换为PIL图像对象&…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
