炫酷网站源码下载,未明潮网站建设保密协议,wordpress space,网站建设公司 关于我们文章目录 项目地址一、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. 自定义容器启… 文章目录 项目地址一、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. 自定义容器启动命令5. 容器探针6. 容器资源限制7. init容器 2.5 Deployment 控制器 项目地址
教程作者教程地址
https://www.bilibili.com/video/BV1Zn4y1X7AZ?spm_id_from333.788.player.switchvd_source791e6deaa9c8a56b1f845a0bc1431b71p19代码仓库地址 所用到的框架和插件
dbt
airflow一、Docker 1.1 创建一个Node服务image
创建node的image
FROM node // 从官方镜像下载默认为最新WORKDIR /app //创建image里的工作目录 COPY . /app //将当前程序目录的所有文件复制到docker里的/app目录RUN npm install //安装项目所需要的包EXPOSE 80 //让dokcer将项目的端口暴露为80CMD [node, server.js] //容器启动时候启动服务创建容器
docker build .运行容器
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 mysql wordpress 二、K8S
2.1 集群组成 设计并部署高可用 Kubernetes 集群优化节点资源配置和网络架构。 使用 Helm Chart 实现应用的标准化部署支持多环境Dev/Test/Prod配置管理。 实现 CI/CD 流水线通过 Jenkins 和 GitOpsArgoCD实现自动化部署和回滚。 配置 HPA 和 Cluster Autoscaler动态调整资源以应对流量波动降低 30% 的云资源成本。 部署 Prometheus 和 Grafana 监控系统设置告警规则确保 99.99% 的系统可用性。 使用 Istio 实现服务网格优化流量管理和安全策略支持蓝绿部署和灰度发布。
**Control Plane C:**控制器
Pod可以看成一个docker 容器Control Plane资源调度master节点只跑CP组件 api接收外部的指令restful风格的apietcd集群所有的后台数据以key-value的形式存储的数据库可理解为内部rediskube- scheduler用来监视和控制未指定运行节点的pods的资源调度的kube-controller-manager负责运行控制器节点的 ①节点控制器负责node出现故障时进行响应②任务控制器检测一次性job对象然后创建pods来运行任务直到完成③端点分片控制器提供serivice和Pod的连接④服务账号控制器未新的命名空间创建服务账号调度pods的控制进程
Node组件
Kubelet启动pods的工作由kubelet进行调度确保pods健康运行kube-proxy维护网络规则负责集群内外部网络交互
2.2 Pod
PodPod类似于豌豆荚豌豆则是pod里的多个豌豆容器pod里的容器共享网络和volume并且总是一同调度的。简而言之pod帮我们实现了docker里自己使用docker compose 组织容器 pod就是用来管理一组容器的集合
1. 如何使用Pod
不会直接使用单个pod而是通过Deployment和Job这些kube-controller-manager来创建Pod;一个Pod里可以有单个容器单容器时K8s直接管理容器而不是pod多个协同工作的容器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. 容器的生命周期
容器状态: waiting: 拉去镜像 同步数据等running: 运行中ternimate : 终止
2. 生命周期的回调
PostStop:PreStop:
3. 容器重启策略
容器的重启策略pod的重启策略,因为k8s的最小计算单元是pod:
alwaysonFailurenever
4. 自定义容器启动命令
args: 修改启动命令command:
5. 容器探针
prode 对容器进行定期的健康检查
livenessProbereadnessProbe: 外部服务是否准备好startProbe1.7: 如果提供里启动探针,所有其他探针都会被禁用,直到探针成功,如果启动失败,k8s会杀死容器,然后根据重启策略,启动容器
探针检测的方法: grpc, exec, httpGet, tcpSocket
6. 容器资源限制
metrics-server 对请求,内存,以及cpu进行限制
7. init容器
init容器可以pod的容器运行之前,提前运行镜像中不存在的脚本或者安装脚本.
2.5 Deployment 控制器