k8s常用工作负载

news/2024/11/24 21:08:11/

k8s常用工作负载

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

Deployment:无状态应用部署

StatefulSet:有状态应用部署

DaemonSet:确保所有node运行同一个pod

job:一次性任务

Cronjob:定时任务

控制器的作用:

管理pod对象

使用标签与pod关联

控制器实现了pod的运维,列如滚动更新、伸缩、副本管理、维护pod状态等。

Deployment的功能:

管理pod和ReplicaSet

具体由上线部署、副本设定、滚动升级、回滚等功能

提供声明时更新、列如只更新的一个新的lmage

流程:

应用程序—部署—升级—回滚—下线

Deployment部署

[root@master manifest]# cat test2.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:name: webnamespace: default
spec:replicas: 5selector:matchLabels: app: apachetemplate:metadata:labels: app: apachespec:containers:- image: sktystwd/apache:v0.1imagePullPolicy: IfNotPresentname: httpd[root@master ~]# kubectl get pods
NAME                   READY   STATUS    RESTARTS   AGE
web-6bcd5cffd7-8jfjx   1/1     Running   0          6s
web-6bcd5cffd7-gmmqq   1/1     Running   0          6s
web-6bcd5cffd7-lnfl4   1/1     Running   0          6s
web-6bcd5cffd7-x67cb   1/1     Running   0          6s
web-6bcd5cffd7-zh869   1/1     Running   0          6s

Deployment滚动升级

[root@master manifest]# cat test2.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:name: webnamespace: default
spec:replicas: 5strategy:rollingUpdate:maxSurge: 30%maxUnavailable: 30%type: RollingUpdateselector:matchLabels: app: apachetemplate:metadata:labels: app: apachespec:containers:- image: sktystwd/apache:v0.2imagePullPolicy: IfNotPresentname: httpd

maxSurge:滚动更新过程中最大pod副本数,确保在更新时启动的pod数量比期望(replicas)pod数量最大多出25%

maxUnavailable:滚动更新过程中最大不可用pod副本,确保在更新时最大25%pod数量不可用,确保75%pod数量时可用状态。

查看

[root@master ~]# kubectl get pods
NAME                   READY   STATUS        RESTARTS   AGE
web-5dc777c866-f8cfv   1/1     Running       0          17s
web-5dc777c866-gqp4j   1/1     Running       0          17s
web-5dc777c866-hvvwm   1/1     Running       0          18s
web-5dc777c866-nssgb   1/1     Running       0          18s
web-5dc777c866-vxrzz   1/1     Running       0          18s
web-6bcd5cffd7-8jfjx   1/1     Terminating   0          9m58s
web-6bcd5cffd7-gmmqq   1/1     Terminating   0          9m58s
web-6bcd5cffd7-lnfl4   1/1     Terminating   0          9m58s
web-6bcd5cffd7-x67cb   1/1     Terminating   0          9m58s
web-6bcd5cffd7-zh869   1/1     Terminating   0          9m58s[root@master ~]# kubectl get pods
NAME                   READY   STATUS    RESTARTS   AGE
web-5dc777c866-f8cfv   1/1     Running   0          78s
web-5dc777c866-gqp4j   1/1     Running   0          78s
web-5dc777c866-hvvwm   1/1     Running   0          79s
web-5dc777c866-nssgb   1/1     Running   0          79s
web-5dc777c866-vxrzz   1/1     Running   0          79s

水平扩容(启动多实列,提高并发)

修改yaml里replicas值,在apply

kubectl scale deployment web --replicas=10

[root@master manifest]# cat test2.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:name: webnamespace: default
spec:replicas: 10strategy:rollingUpdate:maxSurge: 60%maxUnavailable: 50%type: RollingUpdateselector:matchLabels: app: apachetemplate:metadata:labels: app: apachespec:containers:- image: sktystwd/apache:v0.1imagePullPolicy: IfNotPresentname: httpd[root@master ~]# kubectl get pods 
NAME                   READY   STATUS              RESTARTS   AGE
web-5dc777c866-7cztl   0/1     Terminating         0          4s
web-5dc777c866-8zn7q   0/1     Terminating         0          4s
web-5dc777c866-fg49j   1/1     Running             0          2m48s
web-5dc777c866-k98nr   0/1     ContainerCreating   0          4s
web-5dc777c866-l5j72   1/1     Running             0          2m48s
web-5dc777c866-l6kcf   0/1     Terminating         0          4s
web-5dc777c866-qr9dl   0/1     ContainerCreating   0          4s
web-5dc777c866-x79lc   1/1     Running             0          2m47s
web-6bcd5cffd7-4cmpp   0/1     ContainerCreating   0          4s
web-6bcd5cffd7-697fx   0/1     Pending             0          4s
web-6bcd5cffd7-hc4h6   0/1     ContainerCreating   0          4s
web-6bcd5cffd7-hl7w7   0/1     Pending             0          4s
web-6bcd5cffd7-j8ks6   0/1     ContainerCreating   0          4s
web-6bcd5cffd7-msnq8   0/1     ContainerCreating   0          4s
web-6bcd5cffd7-v7k2t   0/1     ContainerCreating   0          4s
web-6bcd5cffd7-znvxs   0/1     Pending             0          4s
web-6bcd5cffd7-zvssw   0/1     ContainerCreating   0          4s
web-6bcd5cffd7-zwv86   0/1     Pending             0          4s[root@master ~]# kubectl get pods 
NAME                   READY   STATUS    RESTARTS   AGE
web-6bcd5cffd7-4cmpp   1/1     Running   0          53s
web-6bcd5cffd7-697fx   1/1     Running   0          53s
web-6bcd5cffd7-hc4h6   1/1     Running   0          53s
web-6bcd5cffd7-hl7w7   1/1     Running   0          53s
web-6bcd5cffd7-j8ks6   1/1     Running   0          53s
web-6bcd5cffd7-msnq8   1/1     Running   0          53s
web-6bcd5cffd7-v7k2t   1/1     Running   0          53s
web-6bcd5cffd7-znvxs   1/1     Running   0          53s
web-6bcd5cffd7-zvssw   1/1     Running   0          53s
web-6bcd5cffd7-zwv86   1/1     Running   0          53s

回滚(发布失败回复正常版本)

查看历史发布版本

[root@master ~]# kubectl rollout history deployment/web
deployment.apps/web 
REVISION  CHANGE-CAUSE
9         <none>
10        <none>

回滚到上一个版本(当前位置时12)

[root@master ~]# kubectl rollout undo deployment/web 
deployment.apps/web rolled back[root@master ~]# kubectl rollout history deployment/web
deployment.apps/web 
REVISION  CHANGE-CAUSE
10        <none>
11        <none>

回滚到指定版本

[root@master ~]# kubectl rollout history deployment/web
deployment.apps/web 
REVISION  CHANGE-CAUSE
10        <none>
11        <none>    (当前12)[root@master ~]# kubectl rollout undo deployment/web --to-revision=10
deployment.apps/web rolled back
[root@master ~]# kubectl rollout history deployment/web
deployment.apps/web 
REVISION  CHANGE-CAUSE
11        <none>
12        <none>  (当前13)

revisionHistoryLimit RS历史版本保存数量

[root@master manifest]# cat test2.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:name: webnamespace: default
spec:replicas: 3revisionHistoryLimit: 10strategy:rollingUpdate:maxSurge: 51%maxUnavailable: 50%type: RollingUpdateselector:matchLabels: app: apachetemplate:metadata:labels: app: apachespec:containers:- image: sktystwd/apache:v0.2   #可以多换几个镜像imagePullPolicy: IfNotPresentname: httpd

只有使用2个以上的镜像才会显现出来


[root@master ~]# kubectl rollout history deployment/web
deployment.apps/web 
REVISION  CHANGE-CAUSE
11        <none>
12        <none>
13        <none>
14        <none>

ReplicaSet控制器用途

pod 副本数量管理,不断对比当前pod数量与期望pod数量

deployment每次发布都会创建一个RS作为记录,用于实现回滚

查看rs记录

[root@master ~]# kubectl get rs
NAME             DESIRED   CURRENT   READY   AGE
web-5dc777c866   0         0         0       86m
web-5ff867458d   2         2         2       5m55s
web-6bcd5cffd7   0         0         0       96m
web-77588656d8   3         3         0       5m21s

DaemonSet功能:

在每一个node上运行一个pod

新加入的node也同样自动运行一个pod

[root@master manifest]# cat daemon.yaml 
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: filebeat namespace: kube-system
spec:selector:matchLabels: name: filebeat template:metadata:labels: app: filebeatspec:containers:- image: elastic/filebeat:7.16.2imagePullPolicy: IfNotPresentname: log

job普通任务(job)和定时任务(CronJob)

job使用

[root@master ~]# kubectl explain job
....
[root@master manifest]# cat job.yaml
---
apiVersion: batch/v1
kind: Job
metadata:name: pi
spec:template:spec:containers:- name: piimage: perlcommand: ["perl","-Mbignum=bpi","-wle","print bpi(2000)"]restartPolicy: NeverbackoffLimit: 4 #(重试次数)

在容器里运行那条命令为一次性任务(job)做完结束。

定时任务(CronJob)像linux里的crontab一样

定时任务

应用场景:停止备份

---
apiVersion: batch/v1beta1
kind: CronJob
metadata:name: test
spec:schedule: "*/1 * * * *"jobTemplate:spec:template:spec:containers:- name: testimage: busyboxargs:- /bin/sh- "-c"- "date;echo hello tom"imagePullPolicy: IfNotPresentrestartPolicy: OnFailure[root@master manifest]# kubectl create -f cronjob.yaml 
cronjob.batch/test created[root@master ~]# kubectl get pods
NAME                    READY   STATUS      RESTARTS   AGE
test-1640362140-x9hq7   0/1     Completed   0          20s
[root@master ~]# kubectl get pods
NAME                    READY   STATUS      RESTARTS   AGE
test-1640362140-x9hq7   0/1     Completed   0          2m38s
test-1640362200-5v657   0/1     Completed   0          98s
test-1640362260-4rn5x   0/1     Completed   0          38s

http://www.ppmy.cn/news/292810.html

相关文章

三、K8s常见操作命令

K8s实验环境&#xff1a; 接着上一篇笔记&#xff1a;https://blog.csdn.net/tushanpeipei/article/details/118395393?spm1001.2014.3001.5502 一个manager&#xff0c;2个worker node的Centos7&#xff0c;保证互相能够通信&#xff1a; 1.查看nodes信息&#xff1a; […

spark on k8s

spark从2.3之后开始 在包里面有docker 镜像脚本。 本文主要介绍2.x的镜像打包已经在k8s中怎么去部署spark&#xff0c;3.x的目前自己还没有测试成功&#xff0c;目前3.0自己遇到的问题是在k8s启动后&#xff0c;会提示没有权限创建logs目录。 1.到spark官网中下载2.x的spark&…

k8s 配置dashboard

创建 kubernetes-dashboard 官方仓库 https://github.com/kubernetes/dashboard 下载 wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml也可以直接使用 url kubectl apply -f https://raw.githubusercontent.com/kubernet…

c语言程序设计数字电位器,数字电位器X9C103 100级调节电路和单片机源程序

/* * 按键子函数子函数 * 按键子函数共涉及两个按键检测和控制,分别对应P3^2和P3^3.两个按键每次按下分别实现10K数字 * 电位器中间滑动端往上端和往下端滑动1k数值。 * 数字电位器接口说明:INC接P2^0,U_D接P2^1,CS接P2^2。 */ #include"HEADER.h" #include"…

数字编码电位器c语言,数字电位器x9c103应用电路

描述 数字电位器x9c103应用电路(一) 基础部分 数字电位器X9c103模块是一款宽电压(3V-5V)供电,10K满量程电位器。 电位器中间抽头在0-10k间滑动共100级(电位器滑动端典型阻抗40欧)数字电位器VL和VH端口分别对应滑动变阻器的低端和高端,允许输入电压范围-5V到+5V。数字电位器模…

x9c104数字电位器驱动

该数字电位器里的内部实现其实就是一个调滑阻的实现&#xff0c;下面的代码是在STM32上写的&#xff0c;在这边做一下分享和记录。 先附上数据手册上的时序图和一些说明。这个芯片的输出电阻最小是40欧姆&#xff0c;最大是100K 这个端口接需要分压的电压&#xff0c;也就是相…

ThinkPHP3.2.3通过局域网手机访问项目

折腾一上午&#xff0c; 试了nginx&#xff0c; 试了修改Apache的httpd.conf 试了关闭代理 试了手动配置网络 试了关闭防火墙 试了添加防火墙入站出站规则 问了五个ChatGPT 都没解决。 记录一下 wampserver3.0.4 Apache2.4.18 PHP 5.6.19 MySQL 5.7.11 所有服务启…

endnote x9 word 闪退

endnote x9 word 闪退 https://support.clarivate.com/Endnote/s/article/EndNote-Problematic-field-codes-causing-jumping-cursor-the-range-cannot-be-deleted-or-other-problems-while-formatting?languageen_US 版权声明&#xff1a;本文为引用他人文章&#xff0c;原文…