当前位置: 首页 > news >正文

Docker/K8S


文章目录

  • 项目地址
  • 一、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中的容器
      • 1. 容器的生命周期
        • 2. 生命周期的回调
        • 3. 容器重启策略
        • 4. 自定义容器启动命令
        • 5. 容器探针
        • 6. 容器资源限制
        • 7. init容器
    • 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是本机,所以必须唯一

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 控制器

在这里插入图片描述

相关文章:

Docker/K8S

文章目录 项目地址一、Docker1.1 创建一个Node服务image1.2 volume1.3 网络1.4 docker compose 二、K8S2.1 集群组成2.2 Pod1. 如何使用Pod(1) 运行一个pod(2) 运行多个pod 2.3 pod的生命周期2.4 pod中的容器1. 容器的生命周期2. 生命周期的回调3. 容器重启策略4. 自定义容器启…...

32、【OS】【Nuttx】OSTest分析(1):stdio测试(二)

背景 接上篇wiki 31、【OS】【Nuttx】OSTest分析(1):stdio测试(一) 继续stdio测试的分析,上篇讲到标准IO端口初始化,单从测试内容来说其实很简单,没啥可分析的,但这几篇…...

git push到远程仓库时无法推送大文件

一、错误 remote: Error: Deny by project hooks setting ‘default’: size of the file ‘scientific_calculator’, is 164 MiB, which has exceeded the limited size (100 MiB) in commit ‘4c91b7e3a04b8034892414d649860bf12416b614’. 二、原因 本地提交过大文件&am…...

Vue.js路由管理与自定义指令深度剖析

Vue.js 是一个强大的前端框架,提供了丰富的功能来帮助开发者构建复杂的单页应用(SPA)。本文将详细介绍 Vue.js 中的自定义指令和路由管理及导航守卫。通过这些功能,你可以更好地控制视图行为和应用导航,从而提升用户体验和开发效率。 1 自定义指令详解 1.1 什么是自定义…...

NVIDIA GPU介绍:概念、序列、核心、A100、H100

概述 入职一家大模型领域创业公司,恶补相关知识。 概念 一些概念: HPC:High Performance Computing,高性能计算SoC:System on Chip,单片系统FLOPS:Floating Point Operations Per Second&am…...

【PyTorch】6.张量运算函数:一键开启!PyTorch 张量函数的宝藏工厂

目录 1. 常见运算函数 个人主页:Icomi 专栏地址:PyTorch入门 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术&…...

C语言练习(31)

有5个学生,每个学生有3门课程的成绩,从键盘输入以上数据(包括学号、姓名、3门课程成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中。 设5名学生的学号、姓名和3门课程成绩如下&am…...

什么是长短期记忆网络?

一、概念 长短期记忆网络(Long Short-Term Memory, LSTM)是一种特殊的循环神经网络(RNN),旨在解决标准RNN在处理长序列时的梯度消失和梯度爆炸问题。LSTM通过引入三个门(输入门、遗忘门和输出门&#xff09…...

git中有关old mode 100644、new mode 10075的问题解决小结

在 Git 版本控制系统中,文件权限变更是一种常见情况。当你看到类似 old mode 100644 和 new mode 100755 的信息时,这通常表示文件的权限发生了变化。本文将详细解析这种情况,并提供解决方法和注意事项。 问题背景 在 Git 中,文…...

Jenkins上生成的allure report打不开怎么处理

目录 问题背景: 原因: 解决方案: Jenkins上修改配置 通过Groovy脚本在Script Console中设置和修改系统属性 步骤 验证是否清空成功 进一步的定制 也可以使用Nginx去解决 使用逆向代理服务器Nginx: 通过合理调整CSP配置&a…...

JSR303校验教学

1、什么是JSR303校验 JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。…...

使用DeepSeek技巧:提升内容创作效率与质量

一、引言 在当今快节奏的数字时代,内容创作的需求不断增加,无论是企业营销、个人博客还是学术研究,高效且高质量的内容生成变得至关重要。DeepSeek作为一款先进的人工智能写作助手,凭借其强大的语言生成能力,为创作者…...

【第六天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-一种常见的贪心算法(持续更新)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Python数据结构与算法的详细介绍1.Python中的常用的贪心算法2.贪心算法3.详细的贪心代码1)一种常见的贪心算法 总结 前言 提示:这里…...

C# Winform制作一个登录系统

using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace 登录 {p…...

算法总结-哈希表

文章目录 1.赎金信1.答案2.思路 2.字母异位词分组1.答案2.思路 3.两数之和1.答案2.思路 4.快乐数1.答案2.思路 5.最长连续序列1.答案2.思路 1.赎金信 1.答案 package com.sunxiansheng.arithmetic.day14;/*** Description: 383. 赎金信** Author sun* Create 2025/1/22 11:10…...

向下调整算法(详解)c++

算法流程: 与⽗结点的权值作⽐较,如果⽐它⼤,就与⽗亲交换; 交换完之后,重复 1 操作,直到⽐⽗亲⼩,或者换到根节点的位置 大家可能会有点疑惑,这个是大根堆,22是怎么跑到…...

蓝桥杯之c++入门(一)【C++入门】

目录 前言5. 算术操作符5.1 算术操作符5.2 浮点数的除法5.3 负数取模5.4 数值溢出5.5 练习练习1:计算 ( a b ) ⋆ c (ab)^{\star}c (ab)⋆c练习2:带余除法练习3:整数个位练习4:整数十位练习5:时间转换练习6&#xff…...

使用Python爬虫获取1688商品拍立淘API接口(item_search_img)的实战指南

在电商领域,通过图片搜索商品(拍立淘)已经成为一种重要的商品检索方式。1688平台的item_search_img接口允许用户通过上传图片来搜索相似商品,这为商品信息采集和市场分析提供了极大的便利。本文将详细介绍如何使用Python爬虫技术调…...

ElasticSearch-文档元数据乐观并发控制

文章目录 什么是文档?文档元数据文档的部分更新Update 乐观并发控制 最近日常工作开发过程中使用到了 ES,最近在检索资料的时候翻阅到了 ES 的官方文档,里面对 ES 的基础与案例进行了通俗易懂的解释,读下来也有不少收获&#xff0…...

使用Navicat Premium管理数据库时,如何关闭事务默认自动提交功能?

使用Navicat Premium管理数据库时,最糟心的事情莫过于事务默认自动提交,也就是你写完语句运行时,它自动执行commit提交至数据库,此时你就无法进行回滚操作。 建议您尝试取消勾选“选项”中的“自动开始事务”,点击“工…...

华为云AI开发平台ModelArts

华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

AI,如何重构理解、匹配与决策?

AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)&#xff…...