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

news2025/1/14 18:21:27

文章目录

      • 控制器含义解释
      • 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DRF ImageFiled字段时会加上域名和乱码的问题

问题描述&#xff1a; 一张表的image类型为imageFiled # ############################### 商品 ############################### class Category(models.Model):"""类别名称比如&#xff1a;螃蟹、大米、油等"""categoryname models.CharFie…

Unity 之`Physics.Raycast()`方法,射线检测

文章目录 总述参数解释形参前两个变量可以用Ray 来代替 返回值 总述 当你在Unity中使用Physics.Raycast()方法时&#xff0c;你实际上是在进行一种射线检测&#xff0c;以查看一条射线是否与场景中的碰撞体相交。这可以用来实现很多不同的功能&#xff0c;如点击选择物体、射击…

Windows如何安装Git

一、简介 Git 是一个开源的分布式版本控制系统&#xff0c;是目前世界上最先进、最流行的版本控制系统。可以快速高效地处理从很小到非常大的项目版本管理。特点&#xff1a;项目越大越复杂&#xff0c;协同开发者越多&#xff0c;越能体现出 Git 的高性能和高可用性。 二、…

31、springboot 配置HTTP服务端口及如何通过WebServer实例动态获取项目中的HTTP端口

配置HTTP服务端口及如何通过WebServer实例动态获取项目中的HTTP端口 ★ 设置HTTP服务端口&#xff1a; - server.port或者SERVER_PORT环境变量——总结来说&#xff0c;其实就是要配置server.port外部配置属性。▲ 同样遵守如下优先级&#xff1a; 这些都是外部配置源&#x…

探索Vue生命周期钩子函数:从创生到销毁

Vue这个引领前端开发潮流的框架&#xff0c;其优雅的响应式数据绑定和组件式开发方式&#xff0c;使得它备受瞩目。然而&#xff0c;Vue的魅力绝不仅限于此&#xff0c;它还赋予开发者一组神奇的生命周期钩子函数&#xff0c;能够在组件的各个成长阶段插入自定义代码。本文将带…

css 实现四角边框样式

效果如图 此图只实现 左下与右下边角样式 右上与左上同理 /* 容器 */ .card-mini {position: relative; } /* 左下*/ .card-mini::before {content: ;position: absolute;left: 0;bottom: 0;width: 20px;height: 20px;border-bottom: 2px solid #253d64;border-left: 2px so…

赴日程序员学日语需要学多久?

现在很多国内程序员想转型做赴日IT&#xff0c;但是因为完全没有日语经验&#xff0c;又长期从事解决问题debug的工作&#xff0c;所以非常担心自己学不会日语。其实你的心底里可能比较担心是&#xff0c;投入了很多时间发现学不会文科类型的语言&#xff0c;自己没有学母语以外…

[保研/考研机试] KY124 二叉搜索树 浙江大学复试上机题 C++实现

题目链接&#xff1a; 二叉搜索树_牛客题霸_牛客网判断两序列是否为同一二叉搜索树序列。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/437195121692722892652 描述 判断两序列是否为同一二叉搜索树序列 输入描述&#xff1a; 开始一个数n&#xff0c;(1<…

Python数据采集实战-使用BeautifulSoup框架解析HTML文档并提取所需内容(附源码和实现效果)

实现功能 使用BeautifulSoup框架解析HTML文档并提取所需内容的例子&#xff1a;假设我们要从以下HTML文档中提取所有超链接的链接地址 实现代码 from bs4 import BeautifulSoup import requests# 发送请求并获取HTML文档 url "https://www.baidu.com" response r…

c(Bua-Cpa-Thi-Val-Asn-Cys)-Pro-d-Arg-NEt2 acetate,1647120-04-4,试剂特点介绍

英文名&#xff1a;c(Bua-Cpa-Thi-Val-Asn-Cys)-Pro-d-Arg-NEt2 acetate CAS&#xff1a;1647120-04-4 1.Molecular formula&#xff1a;C44H64ClN11O10S2 2.Molecular weight&#xff1a;1006.63 3.Packaging specification&#xff1a;1g、5g、10g, flexible packaging, inc…

宠物小程序开发

在当今社会&#xff0c;宠物已成为许多人生活中不可或缺的一部分。宠物市场的持续增长为创业者提供了巨大的商机。然而&#xff0c;作为一个创业者&#xff0c;要在竞争激烈的宠物市场中脱颖而出并不容易。因此&#xff0c;开发一个专属于自己的宠物小程序成为了解决这一难题的…

Linux下的Shell编程——Shell概述和入门(一)

前言&#xff1a; Shell还是一个功能相当强大的编程语言&#xff0c;易编写、易调试、灵活性强。为了方便后续的学习&#xff0c;我们需要学习在Linux系统下的Shell编程 目录 一、Shell概述 1.Linux 提供的 Shell 解析器有 2. 默认的解析器是 bash 二、Shell 脚本入门 1.脚…

php+echarts实现数据可视化实例3

效果 全部代码 <?php include(includes/session.inc); include(includes/SQL_CommonFunctions.inc); ?> <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" …

OpenGL —— 2.2、Shader之间数据传输、向Shder传输数据

Shader OpenGL着色器&#xff08;shader&#xff09;是一种用于编写图形渲染代码的编程语言。它们在图形处理单元&#xff08;GPU&#xff09;上运行&#xff0c;用于控制渲染管线的不同阶段。 在OpenGL中&#xff0c;有两种主要类型的着色器&#xff1a;顶点着色器和片段着色器…

Linux 压缩解压(归档管理):tar命令

计算机中的数据经常需要备份&#xff0c;tar是Unix/Linux中最常用的备份工具&#xff0c;此命令可以把一系列文件归档到一个大文件中&#xff0c;也可以把档案文件解开以恢复数据。 tar使用格式 tar [参数] 打包文件名 文件 tar命令很特殊&#xff0c;其参数前面可以使用“-”&…

windows端口被占用——使用taskkill干掉不听话的进程

8080端口被占用为例 1. win R 输入 cmd 回车 进入命令行界面 2. 查看端口占用情况 netstat -aon|findstr 8080 查到8080被24308 进程占用 3. 杀手父进程 使用taskkill 干掉不听话的进程 taskkill /f /t /pid 24308 C:\Users\84869>taskkill /?TASKKILL [/S system…

用户端Web自动化测试-L2

目录&#xff1a; 高级定位-css高级定位-xpath显式等待高级使用高级控件交互方法网页 frame 与多窗口处理文件上传&#xff0c;弹框处理自动化关键数据记录电子商务产品实战 1.高级定位-css css 选择器概念 css 选择器有自己的语法规则和表达式css 定位通常分为绝对定位和相…

k8s-dashboard使用指导手册

一、访问 dashboard http://172.66.209.101:32001 二、选择 Namespace 如下图&#xff1a; 1 在①搜索框中输入 spms 2 在②选择 spms-cloud 三、查找 pod 1 打开 pod 列表 2 打开过滤窗口 3 搜索 pod 在打开的搜索框中输入 pod的关键字&#xff0c;支持模糊搜索 如搜索…

春秋云镜 CVE-2019-16692

春秋云镜 CVE-2019-16692 phpIPAM 1.4 - SQL Injection 靶标介绍 phpIPAM 1.4后台存在SQL Injection。 启动场景 漏洞利用 后台SQL注入&#xff0c;admin/admin888登陆成功。 exp POST /app/admin/routing/edit-bgp-mapping-search.php HTTP/1.1 Host: xxx.com Content-Le…

如何实现24/7客户服务自动化?建设智能客服知识库

客户自助服务是指用户通过企业或者第三方建立的网络平台或者终端&#xff0c;实现相关的自定义处理。实现客户服务自动化&#xff0c;对提高客户满意度、维持客户关系至关重要。客户服务自动化可以帮助企业以更快的速度和更高的效率来满足客户的售后服务要求&#xff0c;以进一…