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
项目地址
- 教程作者:
- 教程地址:
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
- 创建node的image
FROM node // 从官方镜像下载,默认为最新
WORKDIR /app //创建image里的工作目录
COPY . /app //将当前程序目录的所有文件复制到docker里的/app目录
RUN npm install //安装项目所需要的包
EXPOSE 80 //让dokcer将项目的端口暴露为80
CMD ["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.json
RUN npm install //安装项目所需要的包
COPY . /app //将当前程序目录的所有文件复制到docker里的/app目录
EXPOSE 80 //让dokcer将项目的端口暴露为80
CMD ["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 和 GitOps(ArgoCD)实现自动化部署和回滚。
-
配置 HPA 和 Cluster Autoscaler,动态调整资源以应对流量波动,降低 30% 的云资源成本。
-
部署 Prometheus 和 Grafana 监控系统,设置告警规则,确保 99.99% 的系统可用性。
-
使用 Istio 实现服务网格,优化流量管理和安全策略,支持蓝绿部署和灰度发布。
**Control Plane C:**控制器
- Pod:可以看成一个docker 容器
- Control Plane:资源调度,master节点,只跑CP组件;
- api:接收外部的指令,restful风格的api;
- etcd:集群所有的后台数据以key-value的形式存储的数据库;(可理解为内部redis)
- kube- scheduler:用来监视和控制未指定运行节点的pods的,资源调度的
- kube-controller-manager:负责运行控制器节点的 ①节点控制器:负责node出现故障时进行响应;②任务控制器:检测一次性job对象,然后创建pods来运行任务直到完成;③端点分片控制器:提供serivice和Pod的连接;④服务账号控制器:未新的命名空间创建服务账号;调度pods的控制进程
Node组件:
- Kubelet:启动pods的工作,由kubelet进行调度,确保pods健康运行,
- kube-proxy:维护网络规则,负责集群内外部网络交互
2.2 Pod
- Pod:Pod类似于豌豆荚,豌豆则是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