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

K8S RD: Docker与Kubernetes运维核心技术整合指南

Docker服务快速部署


1 ) 镜像准备

  • 支持在线拉取与离线导入:
    # 在线拉取(如nginx)
    docker pull nginx:latest  
    # 离线导入 
    docker load -i nginx.tar  
    
  • 优先使用预下载镜像提升效率,支持多服务镜像(Nginx/MySQL/Redis/PostgreSQL)。

2 ) 容器运行

docker run -d --name [容器名] -p [宿主机端口]:[容器端口] --network=[网络模式] [镜像名]

参数说明:

参数作用常用值
-p端口映射80:80
--network网络模式host/bridge/none
-v宿主机与容器目录映射/data:/app/data
  • 示例(MySQL):
    docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=your_password mysql:latest
    

Docker Compose编排与Docker对比


特性DockerDocker Compose
管理对象单容器多容器统一编排
部署效率需多次执行run命令单命令启动全栈服务
配置文件命令行参数YAML声明式配置
适用场景简单单服务部署微服务架构复杂环境
效率优势-一键拉起全栈服务

常用命令:

docker-compose build    # 构建镜像  
docker-compose up -d    # 后台启动所有服务  
docker-compose stop     # 停止服务  
docker-compose start    # 启动已停止服务  
docker-compose down     # 删除所有容器及网络  

Docker Compose YAML文件编写


1 ) 编写流程:

  • 定义单服务(测试端口映射/卷挂载)→ 复制模板修改参数 → 执行docker-compose up -d拉起集群。

2 ) 完整示例:

version: '3'
services:web:image: nginx:alpineports:- "80:80"volumes:- ./conf:/etc/nginx  # 配置文件挂载db:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: example volumes:- db_data:/var/lib/mysql  # 数据持久化
volumes:db_data:  # 命名卷声明 

最佳实践:先定义单服务调试,再复制模板扩展多服务。

Docker网络模式


模式作用
host容器直接使用宿主机网络栈,无NAT隔离
container多容器共享同一网络命名空间(IP相同,服务端口不同)
none无网络连接,仅用于内部测试
bridge(默认)NAT网桥模式,通过iptables转发流量

Dockerfile关键指令解析


1 ) 命令执行指令:

  • RUN:构建时执行命令(如RUN apt-get update),生成新镜像层。
  • CMD:容器启动默认命令(如CMD ["nginx", "-g", "daemon off;"]),可被docker run覆盖。
  • ENTRYPOINT:容器入口命令(如ENTRYPOINT ["/entrypoint.sh"]),不可覆盖。

2 ) 文件操作指令:

指令功能
COPY仅复制本地文件/目录(不支持解压或网络资源)
ADD额外支持:
- 自动解压本地压缩包
- 下载网络资源(如ADD http://example.com/data.tar.gz /tmp
# ADD示例:自动解压+网络资源获取 
ADD app.tar.gz /usr/src/app  
ADD https://example.com/data.zip /tmp 

最佳实践:优先使用COPY,仅需解压或远程资源时用ADD

Docker镜像分层机制


1 ) 分层原理:

  • 每条指令(RUN/COPY等)创建独立只读层,当前层不影响上层。
  • 分层设计提升构建效率与镜像复用性,减少冗余数据。
    2 ) 轻量化优势:
  • 仅存储差异层数据,加速镜像拉取与存储。

Kubernetes Pod核心运维


1 ) 创建流程:

调度计算
调用容器运行时
用户请求
API Server
写入ETCD
Scheduler
更新ETCD
Kubelet
创建Pod

四步机制:请求提交 → 配置存储 → 调度计算 → 节点执行

1.1. 请求提交:kubectl或API发起创建请求
1.2. 状态存储:API Server写入配置至ETCD
1.3. 调度决策:Scheduler选择最优节点(基于资源利用率)
1.4. 节点执行:目标节点kubelet创建容器

2 ) 负载均衡实现:

  • Service配置:通过selector匹配Pod标签提供统一入口

    apiVersion: v1 
    kind: Service
    metadata:name: web-svc
    spec:selector:app: nginxports:- protocol: TCP port: 80 targetPort: 8080 
    
  • 依赖组件:kube-proxy维护iptables/IPVS规则实现轮询分发。

  • 流量分发:请求均匀轮询后端Pod

3 ) 状态诊断与处理:

状态含义常见原因解决方案
Pending调度中/镜像拉取中节点资源不足、污点未容忍调整资源请求或添加污点容忍
Running正常运行--
Failed容器启动失败应用错误、配置异常检查日志:kubectl logs <pod>
Succeeded任务型Pod执行完毕--
UnknownMaster与Node通信中断节点故障检查节点网络及kubelet状态
CrashLoop应用崩溃容器启动失败排查应用配置或资源限制

4 ) 批量操作:

# 删除所有Failed状态Pod
kubectl get pods --field-selector=status.phase=Failed -o name | xargs kubectl delete 

Kubernetes集群运维实践


1 ) 节点扩容(Token过期处理):

# Master节点操作 
kubeadm token create --print-join-command  # 生成新Token
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex  # 获取CA哈希# Node节点执行 
kubeadm join <Master_IP>:6443 --token <TOKEN> --discovery-token-ca-cert-hash sha256:<HASH>

2 ) 常见问题解决:

  • 初始化失败:清理残留文件后重试。
    kubeadm reset 
    rm -rf /etc/kubernetes/
    
  • 节点不可见:检查kubelet服务状态(二进制部署需手动安装)。
  • kubectl get cs显示Unhealthy:修改kubelet配置:
    # /var/lib/kubelet/config.yaml
    healthzBindAddress: 0.0.0.0:10248  # 确保端口监听正确
    

3 ) 资源操作命令:

命令特性
kubectl create仅首次创建(不支持更新)
kubectl apply支持创建及增量更新(推荐)

4 ) 批量操作技巧

删除所有Failed状态Pod
kubectl get pods --field-selector=status.phase=Failed -o name | xargs kubectl delete 

Pod资源共享与隔离


1 ) 共享存储:

apiVersion: v1
kind: Pod 
metadata:name: shared-storage 
spec:volumes:- name: log-volumeemptyDir: {}  # 临时目录随Pod生命周期存在 containers:- name: appimage: nginxvolumeMounts:- name: log-volumemountPath: /var/log/app - name: log-collector image: fluentd volumeMounts:- name: log-volume mountPath: /data/logs
  • 应用场景:日志收集(应用容器写入,Sidecar容器读取)。

2 ) 隔离机制:

  • Linux命名空间(Network/PID/UTS/IPC/Mount)实现网络/进程隔离。
  • cgroups控制CPU/内存/磁盘资源限制。

典型运维问题解决方案


1 ) 节点选择器:

类型特点
nodeSelector硬性标签匹配(如disk=ssd),无标签则无法调度
nodeAffinity支持软/硬策略:
- 硬策略(requiredDuringScheduling):必须满足
- 软策略(preferredDuringScheduling):尽量满足
nodeName(少用)绕过调度器直指定节点

节点选择器

spec: nodeSelector: disktype: ssd  # 硬性匹配标签 

节点亲和性

策略类型特性
requiredDuringSchedulingIgnoredDuringExecution必须满足条件(硬策略)
preferredDuringSchedulingIgnoredDuringExecution尽量满足(软策略)

配置示例:

affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: - zone1 

2 ) Pod长期Pending

  • 资源不足:
    resources:requests:memory: "512Mi"cpu: "250m"limits:memory: "1Gi"cpu: "500m"
    
  • 污点未容忍:添加tolerations配置
    tolerations:
    - key: "disk-pressure"operator: "Exists"effect: "NoSchedule"
    

3 ) kubectl get cs显示Unhealthy

  • 修改配置:
    # /var/lib/kubelet/config.yaml 
    healthzBindAddress: 0.0.0.0:10248  # 修正监听端口 
    
  • 重启服务:systemctl restart kubelet

4 ) 初始化失败处理

kubeadm reset 
rm -rf /etc/kubernetes/  # 清理残留配置 

5 ) 节点不可见排查

  • 原因:节点未部署kubelet(常见于二进制部署)
  • 解决:安装并注册kubelet服务至集群

关键总结:

  1. 镜像分层:镜像分层机制是Docker高效构建的核心,Dockerfile每条指令生成独立层(当前层不影响上层)
  2. 服务发现:Service通过Label匹配实现Pod负载均衡
  3. 故障排查黄金命令:describe + logs + events组合定位问题根源
  4. 污点容忍:通过tolerations解决Pod调度限制问题
  5. 节点亲和性策略优先使用nodeAffinity软硬结合
  6. 诊断命令:
    • kubectl describe pod <pod> 查看事件详情
    • kubectl logs <pod> -c <container> 检查容器
    • kubectl get events --sort-by=.metadata.creationTimestamp:按时间排序事件
http://www.dtcms.com/a/588924.html

相关文章:

  • PERL Docker 容器化部署指南
  • root@lll:/data# sudo docker compose up -d 输入这个命令 控制台一直没有任何的反应 我需要如何排查呢?
  • 佛山白坭网站建设wordpress加密修改密码
  • 网站主体必须要与域名注册人相同医院做网站的意义
  • tcprewrite使用方法
  • Rust 练习册 :探索三角形的几何世界
  • SPT:选择性提示调优——让模型自动学习最佳提示插入策略
  • 【Linux篇】信号从哪来?到哪去?—— Linux信号的产生方式与保存机制
  • linux服务-firewalld原理及示例详解
  • 数学基础---四元数
  • 《jQuery Prettydate》深入解析与应用
  • 开发公司自己买自己的商品房西安seo外包机构
  • 【数据结构】单调栈(模板 + 练习)
  • 整体设计 全面梳理复盘 之26 九宫格框架与一体化开发 编程 之5
  • LeetCode算法学习之有效的字母异位词
  • 【算法】递归算法的深度实践:深度优先搜索(DFS)从原理到LeetCode实战
  • BFS 图论【各种题型+对应LeetCode习题练习】
  • 威联通怎么建设网站人类命运共同体
  • 【ElasticSearch实用篇-05】基于脚本script打分
  • 微前端框架选型
  • Java 17 密封类(Sealed Classes)实战:从类型安全到架构解耦的范式升级
  • 保健品网站模板wordpress简约主题分享
  • 前端低代码平台
  • 八字排盘原理
  • 40.交叉编译
  • RT-Thread Studio开发环境搭建
  • jdbc基础(连接篇)
  • 免费云服务器网站有哪些为什么手机进网站乱码
  • 从入门到精通 LlamaIndex RAG 应用开发
  • 算法基础篇:(五)基础算法之差分——以“空间”换“时间”