Linux基础学习(18)K8s基础
2026/9/14 21:03:59 网站建设 项目流程

K8s

kubernetes核心概念

1 有了docker 什么要用kubernetes

2 多容器跨主机提供服务

3 多容器分布节点部署

4 多容器的升级

5 高效管理容器

docker管理工具

Docker compose, docker machine, docker swarm

常见的容器编排工具:

kubernetes google伯格系统

swarm 2018已经被docker废弃

mesos marathon 容器编排组件

Kubernetes简介:

Kubernetes(简称 K8s,8 代表 k 和 s 中间的 8 个字母 ubernete),是 Google 开源的容器编排平台,使用 Go 语言开发,基于 Google 内部 Borg 系统演化而来,现在属于 CNCF 云原生基金会毕业项目,是容器编排的事实工业标准。

核心作用:管理大规模 Docker 等容器,实现容器自动化部署、扩缩容、故障自愈,把一堆服务器抽象成一个大资源池。

解决什么问题:

Docker 只解决了单个容器打包、运行;

当几十、上百个容器分布在多台服务器时,手动管理会遇到很多痛点:

1.容器挂掉需要手动重启

2.流量大了手动增加实例,流量下降手动减少

3.容器漂移 IP 变化,访问如何统一

4.多机器容器调度、版本滚动升级、回滚

5.存储、网络统一管理

K8s 就是用来自动化处理以上全部工作。

关键能力:

自愈:容器崩溃、节点宕机,自动重建 Pod

弹性伸缩 HPA:依据 CPU / 内存 / 自定义指标自动增减 Pod 副本

滚动升级 & 回滚:新版本逐步替换旧实例,出问题一键回滚

服务发现与负载均衡:内置 Service 实现内部负载均衡

存储编排:自动挂载本地、云存储

资源限制:给 Pod 设置 CPU、内存 request/limit,防止资源抢占

声明式 API:写 yaml 定义期望状态,K8s 自动向该状态靠拢,不是命令式操作。

和 OpenStack 区别:

OpenStack:IaaS,管理虚拟机、网络、存储,管理虚机生命周期

K8s:容器编排平台,管理容器;可以跑在虚拟机、物理机、云上。

对比项

Kubernetes(K8s)

OpenStack

定位

容器编排平台(CNCF)

IaaS 基础设施云平台

管理对象

容器 (Pod),应用层

虚拟机、裸金属、网络、块存储,硬件基础设施层

核心资源

Pod、Deployment、Service、PV/PVC

VM 实例、Nova、Neutron、Cinder、Glance

运行载体

物理机、虚拟机、公有云都可以跑

部署在物理服务器之上,产出虚拟机资源

生命周期

容器秒级启停,销毁重建是常态

虚拟机分钟级启动,倾向长期运行

网络模型

Pod 网络,Service 服务发现,内部负载均衡

虚拟网络、子网、路由器、浮动 IP,虚拟机网络

存储

PV/PVC 抽象,对接各类存储,给 Pod 使用

Cinder 块存储、Swift 对象存储,给虚拟机挂载磁盘

高可用思路

应用自愈:Pod 异常自动重建、调度到其他节点

基础设施高可用:虚机 HA,节点故障虚拟机迁移

典型场景

微服务、云原生应用、CI/CD、容器化业务

私有云,批量创建虚拟机,传统业务上云,实训云环境

相互关系

K8s 可以跑在 OpenStack 提供的虚拟机之上;OpenStack 也可以对接 K8s 做容器服务

给 K8s 提供底层虚拟机资源;也可独立使用

kubernetes架构与组件

核心架构(主从架构):

分为 Master 控制平面(控制节点) + Node 工作节点

控制平面(Master),集群大脑

kube‑apiserver:集群唯一入口,所有操作都走它,API 接口,鉴权校验,读写 etcd

etcd:分布式键值存储,保存集群全部数据(配置、状态),集群数据库

kube‑controller‑manager:各类控制器,维持资源期望状态,比如 Pod 挂了新建 Pod

kube‑scheduler:调度器,负责把 Pod 分配到合适的 Node 节点

Node 工作节点,真正跑业务容器

kubelet:每个节点代理,跟 Master 通信,管理本机 Pod 生命周期,保证 Pod 正常运行

kube‑proxy:网络代理,维护节点网络规则,实现 Service 访问、负载均衡

容器运行时:docker/containerd,真正执行容器启停

下面,以部署一个nginx服务来说明kubernetes系统各个组件调用关系:

kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库中,一个nginx服务的安装请求会首先被发送到master节点的apiServer组件,apiServer组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上,此时它会从etcd中读取各个node节点的信息,然后按照特定的算法进行选择,并将结果告知apiServer,apiServer调用controller-manager去调度Node节点安装nginx服务,kubelet接收到指令后,会通知docker,然后由docker来启动一个nginx的pod,pod是kubernetes的最小操作单元,容器必须跑在pod中至此,一个nginx服务就运行了,如果需要访问nginx,就需要通过kube-proxy来对pod产生访问的代理。这样外界用户就可以访问集群中的nginx服务了

k8s核心资源对象:

Pod:K8s 最小调度单元,一个 Pod 包含一个或多个紧密耦合容器,共享网络 / 存储;Pod 是临时的,可以随时销毁重建,IP 会变。

Deployment:无状态应用管理,管理 Pod 副本,支持滚动升级、回滚、副本扩缩,日常业务最常用。

StatefulSet:有状态应用(MySQL、Redis),稳定网络标识、稳定存储,有序启停。

DaemonSet:每个(或指定)Node 运行一个 Pod,比如日志采集、监控 agent。

Job/CronJob:一次性任务、定时任务。

Service:给一组 Pod 提供固定访问入口,负载均衡,屏蔽 Pod 动态 IP 变化,ClusterIP/NodePort/LoadBalancer 等类型。

ConfigMap / Secret:配置文件、敏感密码配置,解耦镜像和配置。

PV/PVC:存储抽象,持久化存储管理。

Namespace:命名空间,集群资源逻辑隔离,做项目、环境划分。

K8s 核心组件:

整体分为控制平面(Master) 和 工作节点(Node) 两大部分。

控制平面(集群大脑,管理整个集群)

kube‑apiserver

集群唯一 API 入口,所有 kubectl、yaml 操作都访问它;做鉴权、校验,负责读写 etcd,是集群的网关。

etcd

分布式键值数据库,保存集群全部状态数据(配置、节点信息、Pod 状态),集群唯一存储,必须高可用。

kube‑controller‑manager

控制器管理器,运行各类控制器,持续比对「期望状态」和「实际状态」。

例:Pod 崩溃就新建 Pod、节点故障回收资源。

kube‑scheduler

调度器,监听新创建未绑定节点的 Pod,根据资源、策略,挑选合适 Node 节点,把 Pod 调度过去。

可选组件:cloud‑controller‑manager,对接公有云厂商 API。

Node 工作节点(执行业务容器)

kubelet

每个工作节点上的代理程序。接收 apiserver 指令,管理本机 Pod:创建、销毁、监控 Pod 状态,上报节点状态给控制平面。

kube‑proxy

网络代理。维护节点上网络规则,实现 Service 的负载均衡、服务发现,转发访问 Pod 的流量。

容器运行时(Container Runtime)

真正启动容器的底层软件,如 containerd、docker。负责容器镜像拉取、容器启停。

除了核心组件,还有一些推荐的插件:

CoreDNS:可以为集群中的 SVC 创建一个域名 IP 的对应关系解析的 DNS 服务

Dashboard:为Kubernetes 集群提供了一个 B/S 架构的访问入口

Ingress Controller:官方只能够实现四层的网络代理,而 Ingress 可以实现七层的代理

Prometheus:给 Kubernetes 集群提供资源监控的能力

Federation: 提供一个可以跨集群中心多 Kubernetes 的统一管理功能,提供跨可用区的集群

Kubernetes集群部署

集群搭建示例:

首先规划节点

节点角色

主机名

IP 地址

集群职责

组件

控制平面

manager

192.168.81.161

集群管理、调度、API 入口

apiserver、etcd、controller-manager、scheduler

工作节点

work1

192.168.81.162

运行业务容器

kubelet、kube-proxy、containerd

工作节点

work2

192.168.81.163

运行业务容器

kubelet、kube-proxy、containerd

并配置基础服务,调整基础设置/etc/hosts ipv4等等

关闭firewalld和selinux并关闭swap分区,之后验证

启动时间同步

启动模块并写入配置并检查配置是否写入参数成功

overlay

容器存储驱动,overlay2底层依赖,用来实现 docker/containerd 的镜像分层读写,没有该模块容器无法正常读写镜像。

br_netfilter

网桥过滤模块,让 iptables 可以对网桥内的数据包做转发过滤。K8s Service、kube‑proxy iptables 模式必须依赖。

所有节点配置k8s yum源

安装 containerd 容器运行时 + k8s 组件

生成默认配置文件并修改docker配置,之后检查并设置服务自启

第一条 sed

把 containerd 配置里的镜像地址 registry.k8s.io 替换为阿里云镜像仓库。

Rocky9 环境国内访问 k8s 官方镜像网络很差,不替换会 kubeadm init 镜像拉取失败。

分隔符用#而不是/,避免地址里的斜杠干扰 sed。

第二条 sed

SystemdCgroup = false → 修改成 SystemdCgroup = true

⚠️K8s 硬性要求:容器运行时 cgroup 驱动必须是 systemd。

安装kubeadm kubelet kubectl,版本统一v1.30.0

master 控制平面初始化

root 用户配置 kubeconfig

修改 flannel 配置,指定网卡 ens160,重启 flannel 网络组件并监控pod状态

在master节点生成hash串,在工作节点上进行认证

在master节点检验

此时集群已经成功创建并且状态良好

Ipvs和dashbroad的启用:

首先安装相关组件

启动相关模块并检验

修改配置文件

修改kebu-proxy

重建 kube‑proxy Pod 生效

验证ipvs模式是否生效

接下来部署 Kubernetes Dashboard

修改模式为NodePort

查看端口

创建admin.yaml

生成登录dashbroad时所使用的token

Dashboard 登录成功!集群可视化面板正常可用

示例:Deployment 管理 Nginx

创建 Deployment,3 副本 Nginx,Deployment 不会直接创建 Pod,它会先创建一个ReplicaSet(副本集),由 ReplicaSet 负责维持指定数量 Pod

查看此时pod的状态

查看此时pod是怎么分配的

扩容实验,新增 2 个 Pod,K8s 自动调度到空闲 worker 节点

对nginx镜像镜像升级

查看此时pod的状态

执行回滚(回到 revision=1,nginx1.24)

查看回滚历史

之后创建service暴露nginx端口并在 manager 节点测试访问

查看nginx服务关联哪些pod

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询