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

【Kubernetes】Kubernetes 如何进行容器编排和调度?如何使用 kubectl`创建和管理 Pod、Deployment、Service?

容器编排和调度:

1. 集群架构

  • Master 节点:负责控制整个集群的状态,包括调度、控制和管理。
  • Node 节点:运行容器的工作节点,每个节点上有 Kubelet 代理管理 Pod 的生命周期。

2. 容器编排

Kubernetes 通过定义期望状态(Desired State)来管理容器,确保实际运行状态与期望状态保持一致。

  • Pod 控制器:如 Deployment、StatefulSet、DaemonSet 等,管理容器副本数量、滚动更新等。
  • 服务发现和负载均衡:通过 Service 资源进行服务暴露,并提供负载均衡功能。
  • 存储管理:支持持久卷(Persistent Volume)和存储类(Storage Class)管理持久化存储。

3. 调度器(Kube-Scheduler)

Kubernetes 调度器负责决定将 Pod 分配到哪个 Node 节点。调度器会考虑:

  • 资源请求(CPU、内存等)
  • 节点亲和性(Node Affinity)
  • 污点和容忍度(Taints and Tolerations)
  • Pod 反亲和性(Pod Anti-Affinity)
  • 节点健康状况

4. 自动扩缩

  • 水平自动扩展(HPA):根据 CPU 或内存使用情况自动扩展 Pod 数量。
  • 集群自动扩展(Cluster Autoscaler):自动增加或减少节点数量。
  • 垂直自动扩展(VPA):动态调整 Pod 的资源请求。

5. 健康检查和自愈

  • Liveness Probe:检测容器是否存活,出现故障时重启。
  • Readiness Probe:检测容器是否准备好接收流量。
  • 自动重启:节点或 Pod 故障时,Kubernetes 自动在健康节点上重新调度。

6. 网络与安全

  • 网络插件(CNI):如 Flannel、Calico 提供容器网络通信。
  • Network Policy:实现网络隔离和安全策略。
  • RBAC(基于角色的访问控制):确保权限管理和安全性。

通过 kubectl 命令行工具,创建和管理 Pod、Deployment 和 Service。

1. 创建 Pod

创建一个最小的 Pod YAML 文件 (如 pod-demo.yaml):

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
spec:
  containers:
  - name: my-container
    image: nginx
    ports:
    - containerPort: 80

创建 Pod

kubectl apply -f pod-demo.yaml

查看 Pod 状态

kubectl get pods

检查 Pod 详细信息

kubectl describe pod my-pod

2. 创建 Deployment

创建 Deployment YAML 文件 (如 deployment-demo.yaml):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
  labels:
    app: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx
        ports:
        - containerPort: 80

创建 Deployment

kubectl apply -f deployment-demo.yaml

查看 Deployment 状态

kubectl get deployments

扩展或缩容副本数

kubectl scale deployment my-deployment --replicas=5

滚动更新镜像

kubectl set image deployment/my-deployment my-container=nginx:1.21

3. 创建 Service

创建 Service YAML 文件 (如 service-demo.yaml):

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: ClusterIP

创建 Service

kubectl apply -f service-demo.yaml

查看 Service

kubectl get services

访问 Service

如果是 NodePort 类型,使用节点 IP 和端口访问;如果是 ClusterIP 类型,需要在集群内部访问。


4. 常用管理命令

  • 查看所有资源
kubectl get all
  • 删除资源
kubectl delete pod my-pod
kubectl delete deployment my-deployment
kubectl delete service my-service
  • 查看日志
kubectl logs -f my-pod
  • 进入容器内部
kubectl exec -it my-pod -- /bin/bash

https://github.com/0voice


http://www.kler.cn/a/589458.html

相关文章:

  • 51单片机指令系统入门
  • 国产编辑器EverEdit - 命令窗口的使用
  • CRTP奇异递归模板模式
  • SSM框架——Spring面试题
  • 因果推荐|可解释推荐系统的反事实语言推理
  • Spring Boot 整合 Elasticsearch:打造高性能全文检索实战
  • Mac电脑python 有没有ros接口 查看lidar的数据
  • WEB安全--SQL注入--DNSlog外带
  • 时区转换工具
  • X86 RouterOS 7.18 设置笔记六:端口映射(IPv4、IPv6)及回流问题
  • 无SIM卡时代即将来临?eSIM才是智联未来?
  • 一键批量txt转DWG,DWG转txt——插件实现 CAD c#二次开发
  • 基于Flask的东方财富网股票数据可视化分析系统
  • 基于python的图书馆书目推荐数据分析与可视化-django+spider+vue
  • 直击行业痛点,赛逸展2025科技创新奖推陈出新
  • Flutter_学习记录_ ImagePicker拍照、录制视频、相册选择照片和视频、上传文件
  • PHP:从入门到进阶的编程之旅
  • 语言大模型的模型微调方法LoRA
  • Linux进程状态详解:僵尸进程与孤儿进程的深度探索与实践
  • idea如何新建springboot项目