Docker/K8S

news/2025/2/2 16:48:05/

文章目录

  • 项目地址
  • 一、Docker
    • 1.1 创建一个Node服务image
    • 1.2 volume
    • 1.3 网络
    • 1.4 docker compose
  • 二、K8S
    • 2.1 集群组成
    • 2.2 Pod
      • 1. 如何使用Pod
        • (1) 运行一个pod
        • (2) 运行多个pod
    • 2.3 pod的生命周期
    • 2.4 pod中的容器
    • 2.5 Deployment 控制器


项目地址

  • 教程作者:
  • 教程地址:
https://www.bilibili.com/video/BV1Zn4y1X7AZ?spm_id_from=333.788.player.switch&vd_source=791e6deaa9c8a56b1f845a0bc1431b71&p=19
  • 代码仓库地址:
  • 所用到的框架和插件:
dbt 
airflow

一、Docker

在这里插入图片描述

1.1 创建一个Node服务image

  1. 创建node的image
FROM node // 从官方镜像下载,默认为最新WORKDIR /app  //创建image里的工作目录 COPY . /app   //将当前程序目录的所有文件复制到docker里的/app目录RUN npm install  //安装项目所需要的包EXPOSE 80 //让dokcer将项目的端口暴露为80CMD ["node", "server.js"] //容器启动时候,启动服务
  1. 创建容器
docker build .
  1. 运行容器
docker run -p 3000:80 
  • 存在问题,当serverr.js 或者其他地方的代码发生,并不会发生任何变化,因为当前代码一旦打包成了image,就是只读属性了

  • 所以,每当代码更改,我们需要重新build image,速度会很快,因为进行了缓存

  • 这种缓存的原因是docker的**Layer base **

  • 使用docker run每次都会创建一个新的image,如果代码没有发生任何变化,请docker start 镜像名称,如果不指定端口,他会按照上一次的端口

  • 优化

FROM node // 从官方镜像下载,默认为最新WORKDIR /app  //创建image里的工作目录 COPY package.jsonRUN npm install  //安装项目所需要的包COPY . /app   //将当前程序目录的所有文件复制到docker里的/app目录EXPOSE 80 //让dokcer将项目的端口暴露为80CMD ["node", "server.js"] //容器启动时候,启动服务

1.2 volume

  • 实现容器数据不丢失
  • 主要是将docker内的文件和服务器指定的文件进行关联映射

1.3 网络

  • List item

在这里插入图片描述

在这里插入图片描述

  • 使用docker run -d --name myngix -p 88:80 ngxin 表示,访问本机的88端口,实际上访问的是myngix容器的80端口
  • 每个容器是隔离的,所以容器80端口可以重复,但是88是本机,所以必须唯一

docker_compose_84">1.4 docker compose

  • 常用指令
    在这里插入图片描述
  • 根据上面的mysql的启动 编写dockercompose
  1. mysql
    在这里插入图片描述

  2. wordpress

在这里插入图片描述

二、K8S

2.1 集群组成

在这里插入图片描述

  • 设计并部署高可用 Kubernetes 集群,优化节点资源配置和网络架构。

  • 使用 Helm Chart 实现应用的标准化部署,支持多环境(Dev/Test/Prod)配置管理。

  • 实现 CI/CD 流水线,通过 Jenkins 和 GitOps(ArgoCD)实现自动化部署和回滚。

  • 配置 HPA 和 Cluster Autoscaler,动态调整资源以应对流量波动,降低 30% 的云资源成本。

  • 部署 Prometheus 和 Grafana 监控系统,设置告警规则,确保 99.99% 的系统可用性。

  • 使用 Istio 实现服务网格,优化流量管理和安全策略,支持蓝绿部署和灰度发布。

**Control Plane C:**控制器

  • Pod:可以看成一个docker 容器
  • Control Plane:资源调度,master节点,只跑CP组件;
    1. api:接收外部的指令,restful风格的api;
    2. etcd:集群所有的后台数据以key-value的形式存储的数据库;(可理解为内部redis)
    3. kube- scheduler:用来监视和控制未指定运行节点的pods的,资源调度的
    4. kube-controller-manager:负责运行控制器节点的 ①节点控制器:负责node出现故障时进行响应;②任务控制器:检测一次性job对象,然后创建pods来运行任务直到完成;③端点分片控制器:提供serivice和Pod的连接;④服务账号控制器:未新的命名空间创建服务账号;调度pods的控制进程

Node组件:

  1. Kubelet:启动pods的工作,由kubelet进行调度,确保pods健康运行,
  2. kube-proxy:维护网络规则,负责集群内外部网络交互

2.2 Pod

  • Pod:Pod类似于豌豆荚,豌豆则是pod里的多个豌豆(容器),pod里的容器共享网络和volume,并且总是一同调度的。简而言之,pod帮我们实现了docker里自己使用docker compose 组织容器
    pod就是用来管理一组容器的集合

1. 如何使用Pod

  1. 不会直接使用单个pod,而是通过Deployment和Job这些kube-controller-manager来创建Pod;
  2. 一个Pod里可以有单个容器,单容器时,K8s直接管理容器而不是pod;
  3. 多个协同工作的容器,Pod封装多个紧密耦合且共享资源的多容器组成;
  • 查看所有运行的pod状态
kubectl get pods
kubectl get pod -o wide -n kube-system
(1) 运行一个pod
  • 创建一个Pod

在这里插入图片描述

  • 应用pod
kubectl apply -f nginx-pod.yml
  • 删除
kubectl delete -f nginx-pod.yml
(2) 运行多个pod

在这里插入图片描述

2.3 pod的生命周期

  • 起始于pending状态,至少有一个正常启动则为running状态,如果全部成功则是successed,如果有一个失败 failed.
  • pod在生命周期里,只会被调用一次,且本身没有自愈能力,当node销毁,他会跟着销毁

2.4 pod中的容器

1. 容器的生命周期

  • 容器状态:
    1. waiting: 拉去镜像 同步数据等
    2. running: 运行中
    3. ternimate : 终止
2. 生命周期的回调
  1. PostStop:
  2. PreStop:
3. 容器重启策略

容器的重启策略=pod的重启策略,因为k8s的最小计算单元是pod:

  1. always
  2. onFailure
  3. never
4. 自定义容器启动命令
  • args: 修改启动命令
  • command:
5. 容器探针
  • prode 对容器进行定期的健康检查
  1. livenessProbe
  2. readnessProbe: 外部服务是否准备好
  3. startProbe1.7+: 如果提供里启动探针,所有其他探针都会被禁用,直到探针成功,如果启动失败,k8s会杀死容器,然后根据重启策略,启动容器
  • 探针检测的方法: grpc, exec, httpGet, tcpSocket
6. 容器资源限制

metrics-server 对请求,内存,以及cpu进行限制

7. init容器

init容器可以pod的容器运行之前,提前运行镜像中不存在的脚本或者安装脚本.

2.5 Deployment 控制器

在这里插入图片描述


http://www.ppmy.cn/news/1568739.html

相关文章

使用Python Dotenv库管理环境变量

使用Python Dotenv库管理环境变量 在开发Python应用程序时,管理配置信息(如API密钥、数据库连接字符串等)是一个常见的需求。为了确保安全性和灵活性,通常不建议将这些敏感信息硬编码在代码中。这时,dotenv库就派上了…

高可用 Keepalived 服务部署流程

一、配置文件 vim /etc/keepalived/keepalived.confGLOBAL CONFIGURATION --- 全局配置部分VRRPD CONFIGURATION --- VRRP协议配置部分LVS CONFIGURATION --- LVS服务管理配置部分[rootlb01 ~]# cat /etc/keepalived/keepalived.…

十分钟快速上手 markdown

前言 本人利用寒假期间,将自己所学的markdown的知识,以及将自己常用的一些操作和注意事项记录下来,希望能够帮助大家 一、markdown是什么 Markdown 是一种轻量级标记语言,说白了就是可以让你利用最简单的语法达到最好的排版效果…

关于ARM和汇编语言

一图流 ARM 计算机组成 输入设备 输出设备 存储设备 运算器 控制器 处理器读取内存程序执行的过程 取指阶段:控制器器通过地址总线向存储器发送想要获取的指令的地址编号,存储器将指定的指令发送给处理器 译码阶段:控制器对指令进行分…

论文阅读的附录(八):Understanding Diffusion Models: A Unified Perspective(五):逐步加噪评分匹配

Understanding Diffusion Models: A Unified Perspective(五):逐步加噪评分匹配 文章概括1. Fisher 散度的定义问题 2. 数学技巧:积分分部法(Integration by Parts)2.1 回顾积分分部法2.2 多维积分分部公式…

【4. C++ 变量类型详解与创新解读】

本章目录: 前言什么是变量?C 基本变量类型1. 基本类型2. 扩展类型 自动类型转换与强制类型转换自动类型转换强制类型转换 声明与定义声明定义 左值与右值结语 前言 在C中,变量是程序存储数据的基本单元。变量的定义和使用涉及多种类型和规则&#xff0c…

认识小程序的基本组成结构

1.基本组成结构 2.页面的组成部分 3.json配置文件 4.app.json文件(全局配置文件) 5.project.config.json文件 6.sitemap.json文件 7.页面的.json配置文件 通过window节点可以控制小程序的外观

零代码搭建个人博客—Zblog结合内网穿透发布公网

目录 一、准备工作二、Z-blog 网站搭建1. XAMPP 环境设置2. Z-blog 安装3. Z-blog 网页测试 三、内网穿透工具 Cpolar 的安装和配置1. Cpolar 安装2. Cpolar 云端设置3. Cpolar 本地设置 四、本地网页发布五、注意六、本次经历总结 大家好,我是学问小小谢。 最近心血…