飞天使-k8s基础组件分析-控制器

文章目录

      • 控制器含义解释
      • pod的标签与注释
      • ReplicaController
      • ReplicaSet
      • Deployments
      • DaemonSet
      • Job
      • Cronjob
        • 参考文档

控制器含义解释

空调遥控器知道吧


ReplicationController: ReplicationController确保在任何时候都运行指定数量的pod副本。换句话说,一个ReplicationController确保一个pod或一组同类的pod总是处于可用状态。

ReplicaSet: ReplicaSet的目的是维护在任何给定时间运行的一组稳定的pod副本。因此,它通常用于保证指定数量的相同pod的可用性。

Deployments: 部署针对Pods和ReplicaSets提供了宣告式的更新。

StatefulSets: StatefulSet常用于管理有状态的应用。

DaemonSet: 它是确保所有的节点或一些节点都运行一个Pod的复本。


pod的标签与注释

标签就是名字的意思
kubectl run httpd \
--image=httpd:2.4 \
--replicas=1 \
--labels="ver=2,env=prod"

查看标签 
kubectl get deployment --show-labels
 kubectl label deployments httpd "canary=true"
kubectl get deployment -L canary
移除 
kubectl get deployment -L canary
显示标签 kubectl get pods --show-labels

选择标签为某个值
kubectl get pod --selector="ver=2"

标签是抓取pod的唯一依据


ReplicaController

管理它自己管理的pod数量保持一致

[root@k8s-01 chapter04]# cat web-rc.yaml 
apiVersion: v1
kind: ReplicationController
metadata:
  name: web
spec:
  replicas: 3
  selector:
    app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80



[root@k8s-01 chapter04]# kubectl create -f web-rc.yaml 
replicationcontroller/web created
[root@k8s-01 chapter04]# kubectl get pod
NAME                    READY   STATUS              RESTARTS   AGE
httpd                   1/1     Running             0          22m
httpd-1                 1/1     Running             0          21m
nginx-97499b967-jzxwg   1/1     Running             0          14h
web-5bq9k               0/1     ContainerCreating   0          4s
web-rvbmm               0/1     ContainerCreating   0          4s
web-x6wxd               0/1     ContainerCreating   0          4s
[root@k8s-01 chapter04]# kubectl  get rc
NAME   DESIRED   CURRENT   READY   AGE
web    3         3         0       14s
[root@k8s-01 chapter04]# kubectl get replicationController
NAME   DESIRED   CURRENT   READY   AGE
web    3         3         1       27s

如果删除一个pod ,会自己新增一个pod
kubectl delete pod/web-x6wxd

新增一个标签看看
[root@k8s-01 chapter04]# kubectl get pod --show-labels
NAME                    READY   STATUS    RESTARTS   AGE     LABELS
nginx-97499b967-jzxwg   1/1     Running   0          14h     app=nginx,pod-template-hash=97499b967
web-rftd7               1/1     Running   0          4m16s   app=nginx
web-rvbmm               1/1     Running   0          7m35s   app=nginx
web-x6wxd               1/1     Running   0          7m35s   app=nginx


[root@k8s-01 chapter04]# kubectl label pod web-rftd7 type=special
pod/web-rftd7 labeled
[root@k8s-01 chapter04]# kubectl get pod --show-labels
NAME                    READY   STATUS    RESTARTS   AGE     LABELS
nginx-97499b967-jzxwg   1/1     Running   0          14h     app=nginx,pod-template-hash=97499b967
web-rftd7               1/1     Running   0          5m20s   app=nginx,type=special
web-rvbmm               1/1     Running   0          8m39s   app=nginx
web-x6wxd               1/1     Running   0          8m39s   app=nginx

覆盖过去
kubectl label pod web-rftd7 app=nginx1 --overwrite



添加pod的标签
# kubectl label pod web-z8stj type=special

更改pod的标签
# kubectl label pod web-z8stj app=foo --overwrite

再次列出pod
# kubectl get pods –L app

修改rc的数量为2个
[root@k8s-01 chapter04]# kubectl get rc
NAME   DESIRED   CURRENT   READY   AGE
web    3         3         3       17m
[root@k8s-01 chapter04]# kubectl edit rc web
replicationcontroller/web edited
[root@k8s-01 chapter04]# kubectl get rc
NAME   DESIRED   CURRENT   READY   AGE
web    2         2         2       18m

修改里面的数量为2 个


水平扩缩容
[root@k8s-01 chapter04]# kubectl scale rc web --replicas=6
replicationcontroller/web scaled
[root@k8s-01 chapter04]# kubectl get pod
NAME                    READY   STATUS              RESTARTS   AGE
nginx-97499b967-jzxwg   1/1     Running             0          14h
web-fhg2l               0/1     ContainerCreating   0          4s
web-nsxsh               0/1     ContainerCreating   0          4s
web-pcwkz               0/1     ContainerCreating   0          4s
web-rvbmm               1/1     Running             0          19m
web-vj48d               0/1     ContainerCreating   0          4s
web-x6wxd               1/1     Running             0          19m

kubectl delete rc web ,删除rc


RC (ReplicaController) 通过标签来控制pod的,改变pod的标签,pod会进行变化

ReplicaSet

针对rc而言,选择更加灵活
 kubectl describe rs


[root@k8s-01 chapter04]# cat web-replicaset.yaml 
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx

生产环境用rs多些


Deployments

Deployment为Pods和ReplicaSets提供声明式的更新。
在部署中描述一个期望的状态,部署控制器以某个控制的速率改变实际的状态到期望的状态

控制更新的节奏和速率

[root@k8s-01 chapter04]# cat nginx-deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80




创建
# kubectl apply –f nginx-deployment.yaml

查看部署
# kubectl get deployment

查看部署的状态
# kubectl rollout status deployment.v1.apps/nginx-deployment

查看通过部署创建的rs
# kubectl get rs

查看pod自动产生的labels
# kubectl get pods –show-labels

更新nginx:1.7.9为nginx:1.9.1
# kubectl –record deployment.apps/nginx-deployment set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1
或者:
# kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1 –record
或者:
# kubectl edit deployment.v1.apps/nginx-deployment

查看更新的状态
# kubectl rollout status deployment.v1.apps/nginx-deployment

通过以下命令查看部署
# kubectl get deployment

查看部署的rs
# kubectl get rs

查看新的pods
# kubectl get pods

查看部署的详情
# kubectl describe deployments

回滚部署
更新一个不存在的镜像
# kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.91 –record=true

通过以下命令查看更新卡住了
# kubectl rollout status deployment.v1.apps/nginx-deployment

查看部署的rs
# kubectl get rs

查看部署的pods
# kubectl get pods

查看部署的描述信息
# kubectl describe deployment

查看部署的版本
# kubectl rollout history deployment.v1.apps/nginx-deployment

查看每个版本的详情
# kubectl rollout history deployment.v1.apps/nginx-deployment –revision=2

回退到先前的版本
# kubectl rollout undo deployment.v1.apps/nginx-deployment

回退到特定的版本
# kubectl rollout undo deployment.v1.apps/nginx-deployment --to-revision=2

检查回退是否成功
# kubectl get deployment nginx-deployment

部署的扩容
扩容副本数量为10
# kubectl scale deployment.v1.apps/nginx-deployment --replicas=10

如果启用了水平的pod自动扩容可以执行如下:
# kubectl autoscale deployment.v1.apps/nginx-deployment --min=10 --max=15 --cpu-percent=80

扩容的比例和刻度
确保部署的10个复本处于运行
# kubectl get deploy

更新一个不存在的镜像,并查看结果
# kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:sometag
# kubectl get rs

更新复本的数量为15个,再次查看结果,然后删除本次部署
#  kubectl scale deployment.v1.apps/nginx-deployment --replicas=15
# kubectl get deployment
# kubectl get rs
# kubectl delete deploy nginx-deployment

暂停和继续部署
创建部署
# kubectl create –f nginx-deployment.yaml

暂停更新
# kubectl rollout pause deployment.v1.apps/nginx-deployment

更新镜像
# kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1

查看是否有新的更新开始
# kubectl rollout history deployment.v1.apps/nginx-deployment

恢复部署
# kubectl rollout resume deployment.v1.apps/nginx-deployment

DaemonSet

使用DaemonSet在每个节点上运行一个pod
DaemonSet确保创建尽可能多的pod,并将每个pod部署到自己的节点上。

使用DaemonSet仅在特定的节点上运行Pods
这可以通过在pod模板中指定node-selector属性来完成的,它是DaemonSet定义的一部分


[root@k8s-01 chapter04]# cat ssd-monitor-daemonset.yaml 
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: ssd-monitor
spec:
  selector:
    matchLabels:
      app: ssd-monitor
  template:
    metadata:
      labels:
        app: ssd-monitor
    spec:
      nodeSelector:
        disk: ssd
      containers:
      - name: main
        image: luksa/ssd-monitor




[root@k8s-01 chapter04]# kubectl get pod -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
nginx-97499b967-jzxwg   1/1     Running   0          16h   10.244.1.2   k8s-02   <none>           <none>

打标签
kubectl label node k8s-02 disk=ssd

kubectl get ds
kubectl get pods

打完标签后指哪打哪

Job

这种是运行一次,直到完成

在Job完成后,它并不会删除Pod,允许我们可以查看它的日志

在Job中运行多个Pod实例
Job可以配置为创建多个Pod实例,依并行或有序的方式运行它们。

按顺序来运行Job
如果需要一个job运行多次,可以将completions设置为希望job的Pod运行多次。
配置请参考文件:multi-completion-batch-job.yaml

以并行的方式运行job pods.
如果让job并行运行多个pods,可以使用parallelism指定并运行pod的数量。
配置请参考文件:multi-completion-batch-job2.yaml

限制Job pod的完成时间
通过设置activedeadlinesecond属性 




[root@k8s-01 chapter04]# cat multi-completion-batch-job.yaml 
apiVersion: batch/v1
kind: Job
metadata:
  name: multi-completion-batch-job
spec:
  completions: 5
  template:
    metadata:
      labels:
        app: batch-job
    spec:
      restartPolicy: OnFailure
      containers:
      - name: main
        image: luksa/batch-job
[root@k8s-01 chapter04]# cat multi-completion-batch-job2.yaml 
apiVersion: batch/v1
kind: Job
metadata:
  name: multi-completion-batch-job2
spec:
  completions: 5
  parallelism: 2
  template:
    metadata:
      labels:
        app: batch-job
    spec:
      restartPolicy: OnFailure
      containers:
      - name: main
        image: luksa/batch-job



在这里插入图片描述

Cronjob

这个是定时计划任务,周期性的

[root@k8s-01 chapter04]# cat batch-job-every-fifteen-minutes.yaml 
apiVersion: batch/v1beta1
# API group的版本是v1beat1,这里不要写错
kind: CronJob
metadata:
  name: batch-job-every-fifteen-minutes
spec:
# 该任务将会在每小时的0,15,30,45分运行
  schedule: "0,15,30,45 * * * *"
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app: periodic-batch-job-every-fifteen-minutes
        spec:
          restartPolicy: OnFailure
          containers:
          - name: main
            image: luksa/batch-job
[root@k8s-01 chapter04]# cat cronjob.yaml 
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
              - /bin/sh
              - -c
              - date; echo Hello from the kubernetes cluster
          restartPolicy: OnFailure




使用以下命令获取它的状态
# kubectl get cronjob hello

也可以通过以下命令获取它的状态
# kubectl get jobs --watch

可以通过以下命令查看上次调度的时间
# kubectl get conrjob hello

删除cronjob
# kubectl delete cronjob hello

参考文档

https://edu.csdn.net/course/detail/27762?spm=1003.2449.3001.8295.2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/85595.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无涯教程-Perl - wantarray函数

描述 如果当前正在执行的函数的context正在寻找列表值,则此函数返回true。在标量context中返回false。 语法 以下是此函数的简单语法- wantarray返回值 如果没有context,则此函数返回undef&#xff1b;如果lvalue需要标量,则该函数返回0。 例 以下是显示其基本用法的示例…

3种获取OpenStreetMap数据的方法【OSM】

OpenStreetMap 是每个人都可以编辑的世界地图。 这意味着你可以纠正错误、添加新地点&#xff0c;甚至自己为地图做出贡献&#xff01; 这是一个社区驱动的项目&#xff0c;拥有数百万注册用户。 这是一个社区驱动的项目&#xff0c;旨在在开放许可下向每个人提供所有地理数据。…

Centos 7 安装系列(8):openGauss 3.0.0

安装依赖包&#xff1a; yum -y install libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core readline-devel openssl-devel sqlite-devel libnsl 安装插件&#xff1a; yum install -y bzip2 net-tools为什么要安装这两个&#xff1f; 安装bzip2 是…

SSRF 服务器端请求伪造

文章目录 SSRF(curl)网址访问通过file协议访问本地文件dict协议扫描内网主机开放端口 SSRF(file_get_content)网站访问http协议请求内网资源通过file协议访问本地文件 SSRF(Server-Side Request Forgery:服务器端请求伪造) 其形成的原因大都是由于服务端提供了从其他服务器应用…

三、MySQL 数据库安装集

一、CentOS—YUM 1. MySQL—卸载 # 1、查看存在的MySQL。 rpm -qa | grep -i mysql rpm -qa | grep mysql# 2、删除存在的MySQL。 rpm -e –-nodeps 包名# 3、查找存在的MySQL目录。 find / -name mysql# 4、删除存在的MySQL目录。 rm -rf 目录# 5、删除存在的MySQL配置文件。…

TCP/IP---网络层

一、网络层的主要功能 1、提供了通讯过程中&#xff0c;必须要使用的另一个地址&#xff1a;逻辑IP地址【ipv4、ipv6】 2、连接不同媒介类型【内网--外网&#xff08;intra -- inter&#xff09;】 3、根据运行的不同的路由协议&#xff0c;选择不同的最佳路径 4、在选择的最好…

【数据结构与算法】迪杰斯特拉算法

迪杰斯特拉算法 介绍 迪杰斯特拉&#xff08;Dijkstra&#xff09;算法是典型最短路径算法&#xff0c;用于计算一个节点到其他节点的最短路径。它的主要特点是以中心向外层层扩展&#xff08;广度优先搜索思想&#xff09;&#xff0c;直到扩展到终点为止。 算法过程 设置…

微信小程序 车牌号输入组件

概述 一个小组件&#xff0c;用于方便用户输入车牌号码 详细 概述 有时候我们开发过程中会遇到需要用户输入车牌号的情况&#xff0c;让客户通过自带键盘输入&#xff0c;体验不好且容易出错&#xff0c;例如车牌号是不能输入O和I的&#xff0c;因此需要有一个自定义的键盘…

2023/8/16 华为云OCR识别驾驶证、行驶证

目录 一、 注册华为云账号开通识别驾驶证、行驶证服务 二、编写配置文件 2.1、配置秘钥 2.2、 编写配置工具类 三、接口测试 3.1、测试接口 3.2、结果 四、实际工作中遇到的问题 4.1、前端传值问题 4.2、后端获取数据问题 4.3、使用openfeign调用接口报错 4.3、前端显示问题…

SQL 语句继续学习之记录二

三&#xff0c; 聚合与排序 对表进行聚合查询&#xff0c;即使用聚合函数对表中的列进行合计值或者平均值等合计操作。 通常&#xff0c;聚合函数会对null以外的对象进行合计。但是只有count 函数例外&#xff0c;使用count(*) 可以查出包含null在内的全部数据行数。 使用dis…

javeee eclipse项目导入idea中

步骤一 复制项目到idea工作空间 步骤二 在idea中导入项目 步骤三 配置classes目录 步骤四 配置lib目录 步骤五 添加tomcat依赖 步骤六 添加artifacts 步骤七 部署到tomcat

数学建模-模型详解(2)

微分模型 当谈到微分模型时&#xff0c;通常指的是使用微分方程来描述某个系统的动态行为。微分方程是描述变量之间变化率的数学方程。微分模型可以用于解决各种实际问题&#xff0c;例如物理学、工程学、生物学等领域。 微分模型可以分为两类&#xff1a;常微分方程和偏微分…

【计算机网络】日志与守护进程

文章目录 日志日志的创建logmessage 函数日志左边部分实现日志右边部分实现 完整代码log.hpp(整体实现)err.hpp (错误信息枚举&#xff09; 守护进程PGID SID TTY 的介绍shell中控制进程组的方式结论 为什么要有守护进程存在&#xff1f;守护进程的创建使用守护进程的条件守护进…

Tomcat线程池梳理

Tomcat梳理 文章目录 Tomcat梳理1.问题2.监控tomcat线程池springboot1.xspringboot2.x转为json格式打印输出 3.SpringBoot内置线程解析测试controlleryaml配置可知ThreadPoolExecutor有如下五种线程池状态。线程池监控指标并发测试并发请求数 < Tomcat最大线程数20并发请求数…

聊聊 Docker

聊聊 Docker Docker 是什么&#xff1f; 定义 Docker 是一款 开源的应用容器引擎。 简单来说&#xff0c;就是 以容器虚拟化技术为基础的软件。可以把应用程序和所依赖的包一起打包到一个可移植的镜像中&#xff0c;发布到 Linux 或者 Windows 上运行。&#xff08;代码 运…

从零开始学习YOLOv5 保姆级教程

一、前言 YOLO系列是one-stage且是基于深度学习的回归方法&#xff0c;而R-CNN、Fast-RCNN、Faster-RCNN等是two-stage且是基于深度学习的分类方法。 YOLOv5是一种单阶段目标检测算法&#xff0c;该算法在YOLOv4的基础上添加了一些新的改进思路&#xff0c;使其速度与精度都得…

使用 wxPython 和 pymupdf进行 PDF 加密

PDF 文件是一种常见的文档格式&#xff0c;但有时候我们希望对敏感信息进行保护&#xff0c;以防止未经授权的访问。在本文中&#xff0c;我们将使用 Python 和 wxPython 库创建一个简单的图形用户界面&#xff08;GUI&#xff09;应用程序&#xff0c;用于对 PDF 文件进行加密…

Lua之Lua源文件批量转换为luac字节码文件

准备的工具&#xff1a;luac.exe CSDNhttps://mp.csdn.net/mp_download/manage/download/UpDetailed Unity版: using System; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine;public static class Bat…

前端开发中移动端开发需要注意什么? - 易智编译EaseEditing

在前端开发中&#xff0c;移动端开发具有一些独特的挑战和注意事项。以下是移动端开发时需要注意的一些重要点&#xff1a; 响应式设计&#xff1a; 移动设备的屏幕尺寸和分辨率多样&#xff0c;因此要采用响应式设计&#xff0c;确保你的网站或应用在各种设备上都能良好地呈…

基于学习交流社区的自动化测试实现

一 项目介绍 项目名称 项目展示链接&#xff1a; 学习交流社区 项目介绍 项目介绍&#xff1a; 学习交流社区是一个基于Spring的前后端分离的在线论坛系统。使用了MySQL数据库来存储相关信息&#xff0c;项目完成后使用Xshell将其部署到云服务器上。 前端页面&#xff1a; 前端…