概述大纲

云平台

  • 云服务器作为应用的最终载体
  • VPC为所有云服务器提供网络隔离
  • 所有云服务器都是绑定某个私有网络
  • 安全组控制每个服务器的防火墙规则
  • 公网IP使得资源可访问
  • 端口转发的方式访问到具体服务器

行成局域网 VPC

可固定IP数量

维度具体好处简要说明
网络隔离安全独立私有网络空间资源与公网、其他租户逻辑隔离,避免直接暴露
自定义安全组 / 防火墙精细控制入站、出站流量,只开放必要端口
子网分段规划可划分公网子网、私有子网,核心数据不触达公网
网络可控性自定义网段与 IP自由规划内网 IP 段(如 192.168.xx、10.xx),不冲突
路由表自主管理控制流量走向,指定哪些子网走公网、哪些走内网
弹性公网 IP 绑定可独立申请、解绑公网 IP,灵活对外提供服务
访问与连接支持 VPN / 专线接入企业本地机房与云上 VPC 安全互通,构建混合云
同区域 / 跨区域互联VPC 对等连接,实现多业务系统内网互通
内网访问云服务走内网访问数据库、对象存储等,更安全更快
性能与成本内网流量低延迟、免费同 VPC 内云产品内网通信,速度快且不计公网流量费
带宽灵活控制独立管理公网出口带宽,避免资源争抢
运维与扩展架构标准化适合按环境划分(开发 / 测试 / 生产),互不干扰
高可用与容灾跨可用区部署资源,VPC 统一网络平面
易扩展迁移网络架构稳定,新增资源可直接加入现有规划

Docker

入门

Docker是一种虚拟化容器技术。Docker基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行环境,容器之间互相隔离。

docker rm -f 容器名 # 先删容器 docker rmi 镜像名 # 再删镜像

1.docker build -docker shell脚本编写

2.docker save / docker load -打包压缩 -解压

3.docker pull docker push-拉取-上传

4.docker images docker rmi-查看镜像 删除镜像

5..docker run 运行

6.docker logs- docker exec 日志退出

7.docker ps docker rm-查看容器-删除容器

docker案例基础操作

docker pull nginx

docker images
docker save -o nginx.tar nginx:latest
docker rmi nginx:latest
docker load -i nginx.tar
docker run -d --name nginx -p 80:80 nginx

docker stop nginx

docker start nginx

docker ps

docker logs -f nginx

docker exec -it nginx bash

exit

docker rm nginx

docker stop nginx

docker rm nginx
数据卷

容器内的磁盘 是最小系统体 没有vim等编辑软件 如果想要更改内容就会灰常复杂 数据卷是一个虚拟目录 它将宿主机目录映射到1容器内目录 完成相互映射

映射图

数据卷指令

数据卷挂载

run -v 参数 数据卷:容器内目录

当创建容器时,如果数据卷不存在,会自动创建数据卷

docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx

docker volume inspect html

挂载目录:/var/lib/docker/volumes/html/_data

随便修改 成功

本地目录挂载
docker inspect mysql 
-mysql自带一个匿名卷

 
"Mounts": [
           {
               "Type": "volume",
               "Name": 
"958f2ac10e1cffd31f52ef1781b9def6a1e6a4dbb29ee83151a70d2a5ad8aa61",
               "Source": 
"/var/lib/docker/volumes/958f2ac10e1cffd31f52ef1781b9def6a1e6a4dbb29ee83151a
70d2a5ad8aa61/_data",
               "Destination": "/var/lib/mysql",
               "Driver": "local",
               "Mode": "",
               "RW": true,
               "Propagation": ""
           }
       ],

该目录存储这mysql的数据

mysql--容器内--本主机 匿名卷--名字很长 问题

mysql版本升级 删旧版容器 改新容器 新版本容器 生成新的卷 只能拷贝 ---  

将mysql的数据映射到本地 这样每次新的mysql容器到来 我们继续指向映射地址 达到数据不变化

自定义镜像

什么是镜像:镜像包含了应用程序 程序运行的系统函数库

构建镜像就是把上述过程打包 部署jave镜像过程

1.准备linux服务器 2.安装jre并配置环境变量 3.拷贝jar包 4.运行jar包

docker镜像制作

对此镜像的指令

有好心人已经将基础包搭建好了 我们只需要拷贝jar包 指定入口即可

加载命令

docker build -t 容器名字 .(dockerfile的名字)--jar的镜像已经导入

容器网络互联

场景 我们的java容器要访问mysql内的资源 就需要网络互相连接

由ip绑定 如果ip改变又得更改 配置 故此我们自定义网桥

通过容器名实现互连

docker network create ii

docker network connect ii nginx

docker network connect ii my-mysql

docker exec -it nginx bash

root@778bbc619985:/# ping my-mysql

PING my-mysql (172.18.0.3) 56(84) bytes of data. 64 bytes from my-mysql.ii (172.18.0.3): icmp_seq=1 ttl=64 time=0.059 ms

  • Nginx 可以反向代理后端服务
  • 后端服务可以用 my-mysql:3306 连接数据库
  • 所有通信走内网,不暴露端口到宿主机

Kubernetes

维度传统部署虚拟化部署容器化部署
隔离级别无隔离硬件级 / 系统级强隔离进程级弱隔离
系统开销无高(完整 OS)极低(仅应用 + 依赖)
启动速度秒级(应用启动)分钟级(系统开机)秒级(进程启动)
镜像大小无统一镜像GB 级MB 级
资源利用率极低中等极高
适用场景单应用、高性能需求强隔离、多 OS 需求微服务、云原生、快速迭代
特性

kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移、部署模式等。 例如,Kubernetes 可以轻松管理系统的 Canary 部署。

架构
工作方式

Kubernetes Cluster = N Master Node + N Worker Node:N主节点+N工作节点; N>=1

组件架构

Control Plane Components

控制平面组件概述

控制平面的组件对集群做出全局决策(比如调度),以及检测和响应集群事件(例如,当不满足部署的 replicas 字段时,启动新的 pod)。

控制平面组件可以在集群中的任何节点上运行。 然而,为了简单起见,设置脚本通常会在同一个计算机上启动所有控制平面组件, 并且不会在此计算机上运行用户容器。

kube-apiserver

API 服务器是 Kubernetes 控制面的组件, 该组件公开了 Kubernetes API。 API 服务器是 Kubernetes 控制面的前端。

Kubernetes API 服务器的主要实现是 kube-apiserver。 kube-apiserver 设计上考虑了水平伸缩,也就是说,它可通过部署多个实例进行伸缩。 你可以运行 kube-apiserver 的多个实例,并在这些实例之间平衡流量。

etcd

etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。

你的 Kubernetes 集群的 etcd 数据库通常需要有个备份计划。

kube-scheduler

控制平面组件,负责监视新创建的、未指定运行节点(node)的 Pods,选择节点让 Pod 在上面运行。

调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间干扰和最后时限。

kube-controller-manager

在主节点上运行控制器的组件。

从逻辑上讲,每个控制器都是一个单独的进程, 但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。

这些控制器包括:

  • 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应
  • 任务控制器(Job controller): 监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成
  • 端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)
  • 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌

cloud-controller-manager

云控制器管理器是指嵌入特定云的控制逻辑的控制平面组件。 云控制器管理器允许您链接集群到云提供商的应用编程接口中, 并把和该云平台交互的组件与只和您的集群交互的组件分离开。

cloud-controller-manager 仅运行特定于云平台的控制回路。 如果你在自己的环境中运行 Kubernetes,或者在本地计算机中运行学习环境, 所部署的环境中不需要云控制器管理器。

与 kube-controller-manager 类似,cloud-controller-manager 将若干逻辑上独立的控制回路组合到同一个可执行文件中,供你以同一进程的方式运行。 你可以对其执行水平扩容(运行不止一个副本)以提升性能或者增强容错能力。

下面的控制器都包含对云平台驱动的依赖:

  • 节点控制器(Node Controller): 用于在节点终止响应后检查云提供商以确定节点是否已被删除
  • 路由控制器(Route Controller): 用于在底层云基础架构中设置路由
  • 服务控制器(Service Controller): 用于创建、更新和删除云提供商负载均衡器
Node 组件

节点组件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境。

kubelet

一个在集群中每个节点(node)上运行的代理。 它保证容器(containers)都 运行在 Pod 中。

kubelet 接收一组通过各类机制提供给它的 PodSpecs,确保这些 PodSpecs 中描述的容器处于运行状态且健康。 kubelet 不会管理不是由 Kubernetes 创建的容器。

K8s 组件类比角色核心职责
kube-apiserver秘书部集群入口、API 网关、认证授权
etcd资料库集群状态存储、数据一致性保障
kube-scheduler调度者Pod 节点调度、资源分配
kube-controller-manager决策者集群状态监控、自动化运维、自愈
cloud-controller-manager外联部云厂商 API 对接、云资源联动
kubelet厂长节点代理、Pod 生命周期管理
kube-proxy门卫大爷节点网络规则、Service 负载均衡
Master/Control Plane硅谷总部集群管控、全局决策
Node分厂业务运行、指令执行

kubeadm创建集群

主从

Master Node(控制平面)

Master 节点是集群的管控中心,所有调度、决策都在这里完成,核心组件如下:

组件核心作用关键细节
kube-apiserver 秘书部集群的「唯一入口」所有操作(包括 kubectl 命令、其他组件通信)都必须通过它,是唯一能直接读写 etcd 的组件,提供 RESTful API,负责认证、授权、准入控制
etcd 资料库集群的「分布式数据库」存储整个集群的所有状态数据(节点信息、Pod 信息、配置等),是 K8s 的「数据大脑」,保证数据一致性
kube-scheduler 调度者集群的「调度器」负责为新创建的 Pod 选择最合适的 Worker 节点部署,会根据资源、亲和性、负载等策略调度
kube-controller-manager 外联部集群的「控制器管家」运行各类控制器(节点控制器、副本控制器、端点控制器等),持续维护集群状态,确保实际状态与用户期望一致
cloud-controller-manager(可选)云服务商适配组件对接云厂商 API,实现云资源(负载均衡、存储、网络)的自动化管理
组件核心作用关键细节
kubelet 厂长节点的「代理管家」每个 Worker 节点的核心进程,负责:1. 向 Master 汇报节点状态2. 接收 Master 指令,创建 / 启动 / 停止 Pod3. 持续监控 Pod 健康状态(存活 / 就绪探针)
kube-proxy 门卫节点的「网络代理」维护节点上的网络规则,实现 Pod 之间、Pod 与外部的网络通信,负责 Service 的负载均衡和流量转发
容器运行时(Container Runtime)容器的「运行引擎」负责实际拉取镜像、启动 / 停止容器,常见实现:Docker、containerd、CRI-O 等
Pod(应用载体)应用的「运行单元」K8s 中最小的部署单元,一个 Pod 可以包含一个或多个紧密关联的容器(图中的「应用 1/2/3」就是运行在 Pod 中)

核心观念

Pod

Pod 是 Kubernetes 中最小的部署单元,最核心的特性就是「共享网络命名空间 + 共享存储卷」:

  • 默认遵循「一个 Pod 一个容器」:99% 的场景都应该这么做,这是 K8s 设计的初心,也是微服务的标准实践。
  • 多容器仅用于 Sidecar 模式:只有当两个容器强耦合、必须同生共死、需要本地通信时,才考虑多容器,否则绝对禁止。
  • 绝对避免「把多个独立应用塞进一个 Pod」:这是典型的反模式,会带来扩缩容、运维、故障恢复的一系列问题。
  • 图中的 nginx+tomcat 是 Sidecar 模式的示例:nginx 作为代理,tomcat 作为业务容器,两者强耦合,本地通信,是合法的多容器场景;而两个 nginx 是错误的,因为是两个独立应用,端口冲突,违背设计原则
Deployment

Deployment:代表一次部署,产生1个或多个Pod

Deployment:扩缩容

扩容 kubectl scale
Pod
缩容 kubectl scale

Deployment:自愈&故障转移

Deployment:滚动更新

ClusterIP 模式 Service 解析

组件作用图中示例
Pod运行应用的最小容器单元,IP 随重启 / 调度动态变化3 个 app=my-dep 标签的 Pod,容器端口 80
Deployment管理 Pod 副本的控制器,保证 Pod 数量、状态稳定后台管理系统,维护 3 个 my-dep Pod
Service (ClusterIP)为 Pod 提供固定的虚拟 IP、负载均衡与服务发现my-dep Service,虚拟 IP 10.96.8.0,服务端口 8000
K8s 核心 DNS为 Service 生成固定域名,实现服务名访问my-dep.default.svc(服务名。命名空间.svc)

Service 类型对比

Service 类型访问范围适用场景
ClusterIP仅集群内微服务内部通信(默认)
NodePort集群外通过节点 IP: 端口访问临时测试、小型服务
LoadBalancer公网访问(云厂商支持)生产环境对外服务
ExternalName集群内访问外部服务映射外部域名到集群内

kubectl expose deploy my-dep --port=8000 --target-port=80 --type=ClusterIP

  • expose deploy my-dep:为名为 my-dep 的 Deployment 创建 Service
  • --port=8000:Service 端口
  • --target-port=80:Pod 容器端口
  • --type=ClusterIP:指定 Service 类型为 ClusterIP(K8s 默认类型)
  • ClusterIP
  • 集群内唯一默认的 Service 类型,无需额外配置即可使用
  • 提供固定的访问入口,解决 Pod IP 动态变化的问题
  • 内置负载均衡,自动分发流量到后端 Pod
  • 支持 DNS 服务发现,微服务间通过服务名通信,解耦依赖
  • ❌ 使用限制

  • 仅支持集群内访问,无法直接被集群外(如公网、本地开发环境)访问
  • 若需外部访问,需配合 Ingress、NodePort 或 LoadBalancer 类型 Service
# 查看 Service 信息
kubectl get svc my-dep
# 查看 Service 后端端点(关联的 Pod IP)
kubectl get endpoints my-dep
# 测试集群内访问(需在集群内 Pod 中执行)
curl my-dep.default.svc:8000
Service-NodePort

负载均衡

Ingress

Service的统一网关入口

外部流量如何通过 Ingress 进入集群内部并转发给对应服务

存储抽象

K8s 中 Pod 是动态调度、随时销毁重建的,Pod 内的文件默认存在「容器可写层」,Pod 销毁后数据会彻底丢失。

  • 业务需求:日志、数据库、配置文件等数据需要持久化、跨 Pod 共享、跨节点迁移。
  • 解决方案:通过「存储抽象层」,把底层不同的存储系统(NFS、Ceph、GlusterFS 等)统一封装,让 Pod 用「标准接口」就能使用存储,不用关心底层是哪种存储、在哪个节点

这是真正存储数据的物理 / 网络存储,K8s 通过「存储插件(CSI)」对接不同的存储系统

存储系统特点适用场景
NFS网络文件系统,简单易用,部署成本低中小集群、共享文件存储、日志存储
CephFS分布式文件系统,高可用、可扩展、支持快照 / 配额生产级大规模集群、数据库、高并发业务
GlusterFS开源分布式文件系统,高可用、横向扩展企业级共享存储、虚拟化 / 容器场景
NFS PV  PVC

[NFS 物理存储] ←→ [PV(存储资源抽象)] ←→ [PVC(存储资源申请)] ←→ [Pod(业务应用)]

  • 解耦设计:PV 是「存储池」,PVC 是「申请单」,业务(Pod)只需要通过 PVC 申请存储,完全不用关心底层是 NFS、Ceph 还是云盘;管理员只需要维护 PV,不用关心哪个业务用了存储。
  • 绑定规则:K8s 会自动匹配 PVC 与 PV,匹配条件包括:存储容量、访问模式、存储类完全一致时,才会完成绑定。
ConfigMap

ConfigMap:配置集。抽取应用的配置

Secret

更多推荐