不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • Docker

  • K8S

    • 01_Kubernetes概述

    • 02_二进制搭建K8s集群

    • 03_kubeadm部署K8s

    • 04_Kubectl命令行管理工具

    • 05_资源编排(YAML)

    • 06_Pod对象管理

    • 07_Pod对象调度

    • 08_常用负载控制器

      • 01.常用负载控制器
        • 2.1 Deployment功能介绍
        • 2.2 部署nginx 1.15版本
        • 2.3 Deployment:滚动升级
          • 2.3.1 修改.yaml文件升级
          • 1.3.2 kubectl set命令行升级
        • 2.4 Deployment:水平扩缩容
        • 2.5 Deployment:回滚
        • 2.6 下线
    • 09_Service统一入口访问

    • 10_Ingress对外暴露应用

    • 11_项目中实际应用K8s

  • 容器原理

  • Istio

  • 容器
  • K8S
  • 08_常用负载控制器
xiaonaiqiang
2021-02-12
目录

01.常用负载控制器

# 01.工作负载控制器是什么

工作负载控制器(Workload Controllers)是K8s的一个抽象概念,用于更高级层次对象,部署和管理Pod。

常用工作负载控制器:

  • Deployment : 无状态应用部署

    • deployment认为所有的pod都是一样的,不用考虑顺序的要求
    • 不用考虑在哪个node节点上运行,可以随意扩容和缩容
  • StatefulSet : 有状态应用部署

    • 稳定,唯一的网络标识符,持久存储(例如: etcd 配置文件,节点地址发生变化,将无法使用)
    • 有序,优雅的部署和扩展、删除和终止(例如: mysql 主从关系,先启动主,再启动从)
  • DaemonSet : 确保所有Node运行同一个Pod

    • 在每一个Node上运行一个Pod,新加入的Node也同样会自动运行一个Pod
    • 比如:用DaemonSet 控制器类型创建nginx pod资源
      • 没有指定副本replicats,它会根据node节点的个数创建
      • 如果再新加一个node节点,也会给新node节点创建pod
  • Job : 一次性任务

  • Cronjob : 定时任务

控制器的作用:

  • 管理Pod对象
  • 使用标签与Pod关联
  • 控制器实现了Pod的运维,例如滚动更新、伸缩、副本管理、维护Pod状态等。

# 02.Deployment

# 2.1 Deployment功能介绍

本质:在升级时,杀掉旧的镜像,部署新镜像

  • Deployment的功能:

    • 管理Pod和ReplicaSet
    • 具有上线部署、副本6设定、滚动升级、回滚等功能
    • 提供声明式更新,例如只更新一个新的Image
  • 应用场景:网站、API、微服务

  • 项目生命周期

# 2.2 部署nginx 1.15版本

[root@k8s-master ~]# vim deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: web
        image: nginx:1.15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@k8s-master ~]# kubectl delete -f .               # 一键卸载所有部署的服务(当前文件夹下所有部署文件)
[root@k8s-master ~]# kubectl apply -f deployment.yaml 
[root@k8s-master ~]# kubectl get pods -o wide            # 确定pod是否被正确部署
[root@k8s-master ~]# kubectl expose deployment web --port=80 --target-port=80 --type=NodePort
http://192.168.56.62:30610/
1
2
3
4
5

# 2.3 Deployment:滚动升级

[root@k8s-master ~]# kubectl get ep
NAME           ENDPOINTS                                AGE
kubernetes     192.168.56.61:6443                            2d2h
nginx        10.244.169.129:80,10.244.169.130:80,10.244.36.66:80      2d
web          10.244.169.129:80,10.244.169.130:80,10.244.36.66:80     4m32s
1
2
3
4
5

# 2.3.1 修改.yaml文件升级

  • 直接修改deployment.yaml文件中 image: nginx:1.15修改成image: nginx:1.18

# 1.3.2 kubectl set命令行升级

[root@k8s-master ~]# kubectl set image deployment/web web=nginx:1.16
[root@k8s-master ~]# kubectl describe deployment web               # 确定是否已经升级为 nginx:1.16
1
2

# 2.4 Deployment:水平扩缩容

# 2.5 Deployment:回滚

'''1.查看当前pod升级历史记录 '''
[root@k8s-master ~]# kubectl rollout history deployment web
deployment.apps/web 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
[root@k8s-master ~]#  kubectl rollout undo deployment/web               # 回滚上一个版本 
[root@k8s-master ~]#  kubectl rollout undo deployment/web --to-revision=2     # 回滚历史指定版
'''2.可以看到pod回滚到了 nginx:1.5版本'''
[root@k8s-master ~]# kubectl describe deployment web
1
2
3
4
5
6
7
8
9
10

# 2.6 下线

[root@k8s-master ~]#  kubectl delete deploy/web
[root@k8s-master ~]#  kubectl delete svc/web
1
2

# 03.DaemonSet

  • 在每一个Node上运行一个Pod
  • 新加入的Node也同样会自动运行一个Pod
  • 应用场景:网络插件(kube-proxy、calico)、其他Agent

# 04.Job

# 05.CronJob

上次更新: 2024/3/13 15:35:10
01.深入理解Pod对象调度
01.Service同一访问入口

← 01.深入理解Pod对象调度 01.Service同一访问入口→

最近更新
01
04.数组双指针排序_子数组
03-25
02
08.动态规划
03-25
03
06.回溯算法
03-25
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式