2024年k8s最新版本使用教程

news2024/11/19 3:36:20

2024年k8s最新版本使用教程

    • 3. YAML语言入门
      • 3.1 基本语法规则
      • 3.2 支持的数据结构
      • 3.3 其他语法
    • 4 资源管理
      • 4.1 k8s资源查询
      • 4.2 资源操作命令
      • 4.3 资源操作方式
        • 4.3.1 命令行方式
        • 4.3.2 YAML文件方式
    • 5 Namespace
      • 5.1 查看命名空间
      • 5.2 创建命名空间
      • 5.3 删除命名空间
      • 5.4 命名空间资源限额
    • 6 Pod
      • 6.1 创建pods
      • 6.2 查看pods
      • 6.3 删除pods
      • 6.4 资源清单
    • 7 Label标签
      • 7.1 标签操作
      • 7.2 分组管理
    • 8 Pod控制器
      • 8.1 Pod控制器概念
      • 8.2 Pod控制器种类
      • 8.3 ReplicaSet
        • 8.3.1 常见操作
        • 8.3.2 资源清单
        • 8.3.3 pod数量固定
        • 8.3.4 pod数量扩缩容
        • 8.3.5 pod镜像更改
      • 8.4 Deployment
        • 8.4.1 常见操作
        • 8.4.2 资源清单
        • 8.4.3 pod镜像更改
        • 8.4.4 pod镜像更改操作
      • 8.5 HPA控制器
        • 8.5.1 自动扩缩容
        • 8.5.2 指标API可用安装
      • 8.6 DaemonSet
        • 8.6.1 资源清单
      • 8.7 Job控制器
        • 8.7.1 资源清单
      • 8.8 CronJob
        • 8.8.1 资源清单

如果需要K8S安装观看2024年k8s最新版本安装教程博客

3. YAML语言入门

YAML是一门简洁的非标记语言,常用来做配置文件,文件后缀是yaml。

3.1 基本语法规则

key: value键值对方式(:与value之间有空格)

name: buddha

key书写区分大小写

name: buddha

Name: buddha

使用缩进表示层级关系(缩进只能用空格,没有规定需要多少个空格,相同层级左对齐即可;不能用tab键替代空格键,除非编辑器内认可的tab键;)

person:
 name: buddha
 age: 18

支持单行注释,#是单号注释符

# 下面是开发环境配置
name: buddha

---...配合使用,如下就相当于写了两个配置文件

---
name: buddha
age: 18
...

---
name: jack
age: 12
...

3.2 支持的数据结构

字面量,单个、不能再分的值。date(日期、时间)、boolean、number(整数、浮点数)、null(~)、string(字符串一般不用引号,双引号特殊字符会转义,单引号不会转义处理)

name: buddha
age: 18
flag: true
remark: ~
day: 2024-01-01

对象,键值对的集合

# 行内写法,k与v之间可以不加空格
o: {k1: v1,k2: v2,k3: v3}

# 一般写法
o:
 k1: v1
 k2: v2
 k3: v3

数组,一组按次序排列的值

k: [v1,v2,v3]

k:
 - v1
 - v2
 - v3

3.3 其他语法

允许使用两个感叹号,强制转换数据类型

a: !!str 123
b: !!str true

多行字符串可以使用|保留换行符,也可以使用>折叠换行

this: |
  Foo
  Bar
that: >
  Foo
  Bar

可以用这个网站检验yaml文件书写是否正确

https://www.json2yaml.com/convert-yaml-to-json

4 资源管理

4.1 k8s资源查询

在k8s中,所有内容都抽象为资源进行管理。通过kubectl api-resources命令查看k8s有哪些资源。

常用资源有:

资源分类资源名称资源名称简写说明
集群级别资源nodesno集群节点
namespacesns命名空间
pod资源podspo容器运行在pod里面
pod控制器资源replicationcontrollersrc控制pod资源
replicasetsrs
deploymentsdeploy
daemonsetsds
jobs
cronjobscj
horizontalpodautoscalershpa
statefulsetssts
服务发现资源servicessvc统一pod对外接口
ingressing
存储资源volumeattachments存储
persistentvolumespv
persistentvolumeclaimspvc
配置资源configmapscm配置
secrets配置

4.2 资源操作命令

k8s对资源如何操作,可以通过kubectl --help命令获取帮助信息

常用操作有:

操作分类命令说明
基本命令create创建资源
edit编辑资源
patch更新资源
get获取资源
delete删除资源
explain展示资源文档
运行和调试run运行一个pod
expose暴露资源为Service
describe显示资源内部信息
logs输出容器在pod中的日志
attach进入运行中的容器
exec执行容器中的一个命令
cp在pod内外复制文件
rollout管理资源的发布
scale扩(缩)容pod的数量
autoscale自动调整pod的数量
其他apply通过文件对资源进行配置
label更新资源上的标签
cluster-info显示集群信息
version显示当前Server和Client的版本

4.3 资源操作方式

4.3.1 命令行方式

语法:

kubectl [command] [type] [name] [flags]

说明:

command,要对资源执行的操作,例如create、get、delete

type,资源类型,比如deployment、pod、service

name,资源名称

flags,额外可选参数

示例:

# kubectl [command] [type]
kubectl get pod

# kubectl [command] [type] [name]
kubectl get pod nginx-pod

# kubectl [command] [type] [name] [flags]
kubectl get pod nginx-pod -o yaml
4.3.2 YAML文件方式

创建nginx-pod.yaml文件

---
apiVersion: v1
kind: Namespace
metadata:
 name: prod
...

---
apiVersion: v1
kind: Pod
metadata:
 name: nginx-pod
 namespace: prod
spec:
 containers:
  - name: nginx-container
    image: nginx:latest
...
# 执行create命令,创建资源
kubectl create -f nginx-pod.yaml

# 使用apply操作资源,如果资源不存在,就创建;如果资源已存在,就更新
[root@k8s-master ~]# kubectl apply -f nginx-pod.yaml
namespace/prod created
pod/nginx-pod created
[root@k8s-master ~]# kubectl apply -f nginx-pod.yaml
namespace/prod unchanged
pod/nginx-pod unchanged
[root@k8s-master ~]# kubectl create -f nginx-pod.yaml 
namespace/prod created
pod/nginx-pod created
[root@k8s-master ~]# kubectl get -f nginx-pod.yaml
NAME             STATUS   AGE
namespace/prod   Active   21s

NAME            READY   STATUS    RESTARTS   AGE
pod/nginx-pod   1/1     Running   0          21s

小结:

# 创建/更新资源
kubectl apply -f  xxx.yaml

# 删除资源
kubectl delete -f  xxx.yaml

# 查看资源
kubectl get -f  xxx.yaml
kubectl describe -f  xxx.yaml

5 Namespace

k8s的命名空间(Namespace)可以将集群的资源进行逻辑上的划分和隔离。

作用:

  • 隔离和资源划分:命名空间允许将集群资源进行逻辑上的划分和隔离。
  • 多租户支持:通过使用命名空间,可以在同一个Kubernetes集群中支持多个租户或团队。
  • 访问控制和权限管理:命名空间提供了一种在集群中实施访问控制和权限管理的机制。
  • 资源管理和监控:通过将相关的资源放置在同一个命名空间下,可以更方便地进行资源管理和监控。

在这里插入图片描述

5.1 查看命名空间

资源查看命名空间

[root@k8s-master ~]# kubectl api-resources | grep Namespace
NAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KIND
namespaces                        ns           v1                                     false        Namespace

命名空间查看命令

常用命令

# 查看所有的命名空间
kubectl get ns

# 查看某个命名空间
kubectl get ns 命名空间名称

# 查看某个命名空间详情
kubectl describe ns 命名空间名称

# 查看命名空间指定格式输出
# 常见wide、json、yaml格式
kubectl get ns -o yaml
kubectl get ns 命名空间名称 -o yaml

示例:

[root@k8s-master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   3d3h
kube-node-lease   Active   3d3h
kube-public       Active   3d3h
kube-system       Active   3d3h

[root@k8s-master ~]# kubectl get ns default
NAME      STATUS   AGE
default   Active   3d3h
[root@k8s-master ~]# kubectl describe ns default
Name:         default
Labels:       kubernetes.io/metadata.name=default
Annotations:  <none>
Status:       Active

No resource quota.

No LimitRange resource.

[root@k8s-master ~]# kubectl describe ns default
Name:         default
Labels:       kubernetes.io/metadata.name=default
Annotations:  <none>
Status:       Active

No resource quota.

No LimitRange resource.

[root@k8s-master ~]# kubectl get ns default -o yaml
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: "2023-12-18T07:51:02Z"
  labels:
    kubernetes.io/metadata.name: default
  name: default
  resourceVersion: "45"
  uid: e88e80f3-8a34-46c1-9978-41014cd3a179
spec:
  finalizers:
  - kubernetes
status:
  phase: Active

5.2 创建命名空间

kubectl create ns 命名空间名称

kubectl create -f 文件名.yaml

kubectl apply -f 文件名.yaml

示例:

[root@k8s-master ~]# kubectl create ns dev
namespace/dev created
# ns-dev.yaml
# create dev namespace yaml
apiVersion: v1
kind: Namespace
metadata:
  name: dev
[root@k8s-master ~]# kubectl apply -f ns-dev.yaml 
namespace/dev created

5.3 删除命名空间

kubectl delete ns 命名空间名称

kubectl delete -f 文件名.yaml

示例:

[root@k8s-master ~]# kubectl delete ns dev
namespace "dev" deleted
[root@k8s-master ~]# kubectl delete -f ns-dev.yaml 
namespace "dev" deleted

5.4 命名空间资源限额

通过ResourceQuota,可以对Namespace资源(包括CPU、内存、存储等)使用限制。编写YAML文件时,可以采用kubectl explain 资源类型或资源类型.属性获得帮助信息。

备注:如果命名空间做了限制,那么对应pod也要做资源限制

示例:

apiVersion: v1
kind: Namespace
metadata:
  name: dev
---
apiVersion: v1
kind: ResourceQuota
metadata:
  name: uat-quota
  namespace: dev
spec:
  hard:
    requests.cpu: 2
    requests.memory: 2Gi
    limits.cpu: 2
    limits.memory: 2Gi
[root@k8s-master ~]# kubectl apply -f ns-dev.yaml 
namespace/dev created
resourcequota/uat-quota created
[root@k8s-master ~]# kubectl get -f ns-dev.yaml
NAME            STATUS   AGE
namespace/dev   Active   7m35s

NAME                      AGE     REQUEST                                     LIMIT
resourcequota/uat-quota   7m35s   requests.cpu: 0/2, requests.memory: 0/2Gi   limits.cpu: 0/2, limits.memory: 0/2Gi

配置含义说明:

资源名称说明
limits.cpu所有非终止状态的 Pod,其 CPU 限额总量不能超过该值
limits.memory所有非终止状态的 Pod,其内存限额总量不能超过该值
requests.cpu所有非终止状态的 Pod,其 CPU 需求总量不能超过该值
requests.memory所有非终止状态的 Pod,其内存需求总量不能超过该值
hugepages-对于所有非终止状态的 Pod,针对指定尺寸的巨页请求总数不能超过此值
cpu与 requests.cpu 相同
memory与 requests.memory 相同

6 Pod

程序运行在容器中,容器运行在pod中,pod属于某个命名空间
在这里插入图片描述

[root@k8s-master ~]# kubectl api-resources | grep Pod
pods                              po           v1                                     true         Pod

6.1 创建pods

语法:

kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client]
[--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]
kubectl apply -f 文件名.yaml

kubectl create -f 文件名.yaml

示例:

[root@k8s-master ~]# kubectl run nginx-test --image=nginx --port=80 -n dev
pod/nginx-test created

6.2 查看pods

[root@k8s-master ~]# kubectl get pods -n dev
NAME         READY   STATUS    RESTARTS   AGE
nginx-test   1/1     Running   0          26s

[root@k8s-master ~]# kubectl get pods nginx-test -n dev
NAME         READY   STATUS    RESTARTS   AGE
nginx-test   1/1     Running   0          108s

[root@k8s-master ~]# kubectl get pods -o wide -n dev
NAME         READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
nginx-test   1/1     Running   0          51s   10.244.36.80   k8s-node1   <none>           <none>

[root@k8s-master ~]# kubectl describe pods nginx-test -n dev[root@k8s-master ~]# kubectl get pods -o wide -n dev
# 在k8s各个节点上都可以访问nginx-test pod里面的nginx服务
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES           AGE     VERSION
k8s-master   Ready    control-plane   3d20h   v1.28.2
k8s-node1    Ready    <none>          3d19h   v1.28.2
k8s-node2    Ready    <none>          3d19h   v1.28.2
k8s-node3    Ready    <none>          3d19h   v1.28.2

[root@k8s-master ~]# curl 10.244.36.80:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

[root@k8s-node1 ~]# curl 10.244.36.80:80[root@k8s-node2 ~]# curl 10.244.36.80:80[root@k8s-node3 ~]# curl 10.244.36.80:80

6.3 删除pods

[root@k8s-master ~]# kubectl delete pods nginx-test
pod "nginx-test" deleted

6.4 资源清单

apiVersion: v1     #必选,版本号,例如v1
kind: Pod         #必选,资源类型,例如 Pod
metadata:         #必选,元数据
  name: string     #必选,Pod名称
  namespace: string  #Pod所属的命名空间,默认为"default"
  labels:           #自定义标签列表
    name: string                 
spec:  #必选,Pod中容器的详细定义
  containers:  #必选,Pod中容器列表
  - name: string   #必选,容器名称
    image: string  #必选,容器的镜像名称
    imagePullPolicy: [ Always|Never|IfNotPresent ]  #获取镜像的策略 
    command: [string]   #容器的启动命令列表,如不指定,使用打包时使用的启动命令
    args: [string]      #容器的启动命令参数列表
    workingDir: string  #容器的工作目录
    volumeMounts:       #挂载到容器内部的存储卷配置
    - name: string      #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
      mountPath: string #存储卷在容器内mount的绝对路径,应少于512字符
      readOnly: boolean #是否为只读模式
    ports: #需要暴露的端口库号列表
    - name: string        #端口的名称
      containerPort: int  #容器需要监听的端口号
      hostPort: int       #容器所在主机需要监听的端口号,默认与Container相同
      protocol: string    #端口协议,支持TCP和UDP,默认TCP
    env:   #容器运行前需设置的环境变量列表
    - name: string  #环境变量名称
      value: string #环境变量的值
    resources: #资源限制和请求的设置
      limits:  #资源限制的设置
        cpu: string     #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
        memory: string  #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
      requests: #资源请求的设置
        cpu: string    #Cpu请求,容器启动的初始可用数量
        memory: string #内存请求,容器启动的初始可用数量
    lifecycle: #生命周期钩子
		postStart: #容器启动后立即执行此钩子,如果执行失败,会根据重启策略进行重启
		preStop: #容器终止前执行此钩子,无论结果如何,容器都会终止
    livenessProbe:  #对Pod内各容器健康检查的设置,当探测无响应几次后将自动重启该容器
      exec:         #对Pod容器内检查方式设置为exec方式
        command: [string]  #exec方式需要制定的命令或脚本
      httpGet:       #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
        path: string
        port: number
        host: string
        scheme: string
        HttpHeaders:
        - name: string
          value: string
      tcpSocket:     #对Pod内个容器健康检查方式设置为tcpSocket方式
         port: number
       initialDelaySeconds: 0       #容器启动完成后首次探测的时间,单位为秒
       timeoutSeconds: 0          #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
       periodSeconds: 0           #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
       successThreshold: 0
       failureThreshold: 0
       securityContext:
         privileged: false
  restartPolicy: [Always | Never | OnFailure]  #Pod的重启策略
  nodeName: <string> #设置NodeName表示将该Pod调度到指定到名称的node节点上
  nodeSelector: obeject #设置NodeSelector表示将该Pod调度到包含这个label的node上
  imagePullSecrets: #Pull镜像时使用的secret名称,以key:secretkey格式指定
  - name: string
  hostNetwork: false   #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
  volumes:   #在该pod上定义共享存储卷列表
  - name: string    #共享存储卷名称 (volumes类型有很多种)
    emptyDir: {}       #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
    hostPath: string   #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
      path: string                #Pod所在宿主机的目录,将被用于同期中mount的目录
    secret:          #类型为secret的存储卷,挂载集群与定义的secret对象到容器内部
      scretname: string  
      items:     
      - key: string
        path: string
    configMap:         #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
      name: string
      items:
      - key: string
        path: string

7 Label标签

label标签的意思,给资源添加标签,实现对资源进行分类分组

标签是以键值对(key: value 或 key=value)添加到资源上(node、pods、pods控制器、service等)

一个标签可以添加到多个资源上;一个资源也可以添加多个标签

常见标签:

版本标签:version: “1.0”

环境标签:env: dev

7.1 标签操作

语法:

kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N
[--resource-version=version] [options]

示例:

1、前提工作

[root@k8s-master ~]# kubectl run nginx-pod --image=nginx --port=80 -n dev
pod/nginx-pod created

[root@k8s-master ~]# kubectl get pods -n dev
NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          19s

2、添加标签

[root@k8s-master ~]# kubectl label Pod nginx-pod env=dev version=1.0 -n dev
pod/nginx-pod labeled

3、更新标签

[root@k8s-master ~]# kubectl label --overwrite Pod nginx-pod version=2.0 -n dev
pod/nginx-pod labeled

4、查看标签

[root@k8s-master ~]# kubectl get pods nginx-pod -n dev --show-labels
NAME        READY   STATUS    RESTARTS   AGE     LABELS
nginx-pod   1/1     Running   0          7m26s   env=dev,run=nginx-pod,version=2.0

5、删除标签

[root@k8s-master ~]# kubectl label Pod nginx-pod version- -n dev
pod/nginx-pod unlabeled

# 验证标签是否删除
[root@k8s-master ~]# kubectl get pods nginx-pod -n dev --show-labels
NAME        READY   STATUS    RESTARTS   AGE     LABELS
nginx-pod   1/1     Running   0          9m18s   env=dev,run=nginx-pod

6、添加、更新、删除标签也都可以在文件中实施

# nginx-pod.yaml文件
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  namespace: dev
  labels:
    env: dev
    version: "2.0"
spec:
  containers:
    - name: nginx-container
      image: nginx:latest
[root@k8s-master ~]# kubectl apply -f nginx-pod.yaml 
pod/nginx-pod created

[root@k8s-master ~]# kubectl get pods -n dev --show-labels
NAME        READY   STATUS    RESTARTS   AGE   LABELS
nginx-pod   1/1     Running   0          25s   env=dev,version=2.0

7.2 分组管理

Label Selector选择器通过一个过滤的语法进行查找到对应标签的资源

匹配规则:

  • key=value:这类是直接匹配

  • key!=value:匹配标签中没有key=value的资源

  • key in (A,B):匹配所有具有key=A和key=B标签的资源

  • key not in (A):匹配所有不具有标签A的资源

  • 多个条件匹配,用逗号隔开

示例:

[root@k8s-master ~]# kubectl get pods -n dev --show-labels
NAME        READY   STATUS    RESTARTS   AGE   LABELS
nginx-pod   1/1     Running   0          19m   env=dev,version=2.0


[root@k8s-master ~]# kubectl get pods -l env=dev -n dev
NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          19m

[root@k8s-master ~]# kubectl get pods -l env!=dev -n dev
No resources found in dev namespace.

[root@k8s-master ~]# kubectl get pods -l env=dev,version=2.0 -n dev
NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          21m

在这里插入图片描述

selector: # 选择器,通过它指定该控制器管理哪些pod
  matchLabels: # Labels匹配规则
    app: nginx-pod
  matchExpressions: # Expressions匹配规则
    - { key: app, operator: In, values: [ nginx-pod ] }

通过类似上面这种方式实现资源的互相绑定,这个是后话。

8 Pod控制器

Pod是k8s最小管理单元,在k8s中,按照pods的创建方式分为两类:

  • 自主式pod:kubectl run直接创建,这种pods删除后就没有了,也不会重建

  • 控制器创建的pods:通过控制器创建的pods,直接删除pods会自动新建,得直接删除控制器才行

8.1 Pod控制器概念

Pod控制器是管理pod的中间层,通过Pod控制器,按照控制器的策略,维护pods
在这里插入图片描述

8.2 Pod控制器种类

在k8s中,有很多类型的Pod控制器,每种都有自己的适合的场景,常见的Pod控制器有下面这些:

kind名称简称apiVersion说明备注
ReplicationControllerreplicationcontrollersrcv1比较原始的pod控制器,由ReplicaSet替代废弃
ReplicaSetreplicasetsrsapps/v1pod数量固定,支持pod数量扩缩容,镜像升级
Deploymentdeploymentsdeployapps/v1控制ReplicaSet操作Pod,并支持滚动升级、回退版本
HorizontalPodAutoscalerhorizontalpodautoscalershpaautoscaling/v2根据集群负载自动调整Pod数量,实现削峰填谷
DaemonSetdaemonsetsdsapps/v1指定节点运行一个Pod,用于守护进程任务
Jobjobsbatch/v1完成一次性任务
CronJobcronjobscjbatch/v1定时任务,不需要持续后台运行
StatefulSetstatefulsetsstsapps/v1管理有状态应用

8.3 ReplicaSet

pod数量固定,支持pod数量扩缩容,镜像升级
在这里插入图片描述

8.3.1 常见操作
# 查
kubectl get replicasets -n 命名空间

kubectl get replicasets -n 命名空间 -o wide/json/yaml

kubectl get replicasets rs控制器名 -n 命名空间 -o wide/json/yaml

kubectl describe replicasets rs控制器名 -n 命名空间

# 建
kubectl create/apply -f 文件名.yaml

# 编辑
kubectl edit replicasets rs控制器名 -n 命名空间
kubectl apply -f 文件名.yaml

kubectl set SUBCOMMAND [options]
# SUBCOMMAND选项,可以通过类似kubectl set image --help帮助信息
env              Update environment variables on a pod template
image            Update the image of a pod template
resources        使用 Pod 模板更新对象的资源请求/限制
selector         为资源设置选择器
serviceaccount   Update the service account of a resource
subject          Update the user, group, or service account in a role binding or cluster role

# 删除
kubectl delete -f 文件名.yaml
kubectl delete replicasets rs控制器名 -n 命名空间
8.3.2 资源清单
apiVersion: apps/v1 # 版本号
kind: ReplicaSet    # 类型       
metadata:           # 元数据
  name:             # rs名称 
  namespace:        # 所属命名空间 
  labels:           # 标签
    controller: rs
spec:               # 详情描述
  replicas: 3       # 副本数量
  selector:         # 选择器,通过它指定该控制器管理哪些pod
    matchLabels:    # Labels匹配规则
      app: nginx-pod
    matchExpressions: # Expressions匹配规则
      - { key: app, operator: In, values: [ nginx-pod ] }
  template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80

示例:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: rs-nginx
  namespace: dev
  labels:
    controller: rs-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
    matchExpressions:
      - { key: app, operator: In, values: [ nginx-pod ] }
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80
[root@k8s-master ~]# kubectl get replicasets -n dev
NAME       DESIRED   CURRENT   READY   AGE
rs-nginx   3         3         3       3m50s

[root@k8s-master ~]# kubectl get pods -n dev
NAME             READY   STATUS    RESTARTS   AGE
rs-nginx-4znwr   1/1     Running   0          3m56s
rs-nginx-6g6t2   1/1     Running   0          3m56s
rs-nginx-6rtm2   1/1     Running   0          3m56s

[root@k8s-master ~]# kubectl get pods -o wide -n dev
NAME             READY   STATUS    RESTARTS   AGE     IP               NODE        NOMINATED NODE   READINESS GATES
rs-nginx-4znwr   1/1     Running   0          6m50s   10.244.36.81     k8s-node1   <none>           <none>
rs-nginx-6g6t2   1/1     Running   0          6m50s   10.244.169.135   k8s-node2   <none>           <none>
rs-nginx-6rtm2   1/1     Running   0          6m50s   10.244.107.199   k8s-node3   <none>           <none>
8.3.3 pod数量固定

ReplicaSet管理的pod数量保持稳定,假如删除一个pod,马上又会重新启动一个pod

示例:

[root@k8s-master ~]# kubectl delete pods rs-nginx-4znwr -n dev
pod "rs-nginx-4znwr" deleted
[root@k8s-master ~]# kubectl get pods -n dev
NAME             READY   STATUS              RESTARTS   AGE
rs-nginx-6g6t2   1/1     Running             0          8m33s
rs-nginx-6rtm2   1/1     Running             0          8m33s
rs-nginx-ss8kw   0/1     ContainerCreating   0          6s

[root@k8s-master ~]# kubectl get pods -n dev
NAME             READY   STATUS    RESTARTS   AGE
rs-nginx-6g6t2   1/1     Running   0          8m48s
rs-nginx-6rtm2   1/1     Running   0          8m48s
rs-nginx-ss8kw   1/1     Running   0          21s
8.3.4 pod数量扩缩容

ReplicaSet管理的pod数量可以进行扩缩容,增加pod数量,或者减少pod数量

示例:

1、查看replicasets名称

[root@k8s-master ~]# kubectl get replicasets -n dev
NAME       DESIRED   CURRENT   READY   AGE
rs-nginx   3         3         3       16m

2、方式一修改pod数量

# 修改数量为5
[root@k8s-master ~]# kubectl edit replicasets rs-nginx -n dev
replicaset.apps/rs-nginx edited

3、方式一修改pod数量是否生效

[root@k8s-master ~]# kubectl get replicasets -n dev
NAME       DESIRED   CURRENT   READY   AGE
rs-nginx   5         5         4       18m

4、方式二修改pod数量

# 修改数量为4
[root@k8s-master ~]# kubectl scale replicasets rs-nginx --replicas=4 -n dev
replicaset.apps/rs-nginx scaled

5、方式二修改pod数量是否生效

[root@k8s-master ~]# kubectl scale replicasets rs-nginx --replicas=4 -n dev
replicaset.apps/rs-nginx scaled

6、方式三修改pod数量

# # 修改数量为6
[root@k8s-master ~]# vim controller-rs-nginx.yaml 
[root@k8s-master ~]# kubectl apply -f controller-rs-nginx.yaml 
replicaset.apps/rs-nginx configured

7、方式三修改pod数量是否生效

[root@k8s-master ~]# kubectl get replicasets -n dev
NAME       DESIRED   CURRENT   READY   AGE
rs-nginx   6         6         4       24m
8.3.5 pod镜像更改

ReplicaSet管理的pod容器镜像进行更改

示例:

1、查看replicasets的镜像

[root@k8s-master ~]# kubectl get replicasets -n dev -o wide
NAME       DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES         SELECTOR
rs-nginx   3         3         0       6s    nginx        nginx:1.13.0   app=nginx-pod,app in (nginx-pod)

2、方式一修改容器镜像

# 修改容器镜像为nginx:1.15.0
[root@k8s-master ~]# kubectl edit replicasets rs-nginx -n dev
replicaset.apps/rs-nginx edited

3、方式一修改容器镜像验证

[root@k8s-master ~]# kubectl get replicasets -n dev -o wide
NAME       DESIRED   CURRENT   READY   AGE     CONTAINERS   IMAGES         SELECTOR
rs-nginx   3         3         3       3m13s   nginx        nginx:1.15.0   app=nginx-pod,app in (nginx-pod)

4、方式二修改容器镜像

# 修改容器镜像为nginx:1.15.5
[root@k8s-master ~]# vim controller-rs-nginx.yaml 
[root@k8s-master ~]# kubectl apply -f controller-rs-nginx.yaml 
replicaset.apps/rs-nginx configured

5、方式二修改容器镜像验证

[root@k8s-master ~]# kubectl get replicasets -n dev -o wide
NAME       DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES         SELECTOR
rs-nginx   3         3         3       12m   nginx        nginx:1.15.5   app=nginx-pod,app in (nginx-pod)

6、方式三修改容器镜像

# 修改容器镜像为nginx:1.23.0
[root@k8s-master ~]# kubectl set image replicasets rs-nginx nginx=nginx:1.23.0  -n dev
replicaset.apps/rs-nginx image updated

7、方式三修改容器镜像验证

[root@k8s-master ~]# kubectl get replicasets -n dev -o wide
NAME       DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES         SELECTOR
rs-nginx   3         3         3       14m   nginx        nginx:1.23.0   app=nginx-pod,app in (nginx-pod)

注意:上面方式只是把ReplicaSet控制器容器镜像版本给更改了,但是现有pod容器镜像并不会发生改变,得一个个删掉现有的,重新生成的才是新镜像版本

[root@k8s-master ~]# kubectl delete pods rs-nginx-5gsxg -n dev
pod "rs-nginx-5gsxg" deleted

[root@k8s-master ~]# kubectl get pods -n dev
NAME             READY   STATUS              RESTARTS   AGE
rs-nginx-2s5wm   0/1     ContainerCreating   0          8s
rs-nginx-jjfbq   1/1     Running             0          26m
rs-nginx-tk4th   1/1     Running             0          26m

[root@k8s-master ~]# kubectl get pods -n dev
NAME             READY   STATUS    RESTARTS   AGE
rs-nginx-2s5wm   1/1     Running   0          6m30s
rs-nginx-jjfbq   1/1     Running   0          32m
rs-nginx-tk4th   1/1     Running   0          32m

8.4 Deployment

控制ReplicaSet操作Pod,就是控制器ReplicaSet该有的功能,控制器Deployment都实现。并在pod镜像方面做了升级,pod会自动更换镜像、暂停更换、继续更换、回滚操作
在这里插入图片描述

8.4.1 常见操作
# 查
kubectl get deployments -n 命名空间

kubectl get deployments -n 命名空间 -o wide/json/yaml

kubectl get deployments deploy控制器名 -n 命名空间 -o wide/json/yaml

kubectl describe deployments deploy控制器名 -n 命名空间

# 建
kubectl create/apply -f 文件名.yaml

# 编辑
kubectl edit deployments deploy控制器名 -n 命名空间
kubectl apply -f 文件名.yaml

kubectl set SUBCOMMAND [options]
# SUBCOMMAND选项,可以通过类似kubectl set image --help帮助信息
env              Update environment variables on a pod template
image            Update the image of a pod template
resources        使用 Pod 模板更新对象的资源请求/限制
selector         为资源设置选择器
serviceaccount   Update the service account of a resource
subject          Update the user, group, or service account in a role binding or cluster role

# 删除
kubectl delete -f 文件名.yaml
kubectl delete deployments deploy控制器名 -n 命名空间
8.4.2 资源清单
apiVersion: apps/v1  # 版本号
kind: Deployment     # 类型
metadata:            # 元数据
  name:              # rs名称
  namespace:         # 所属命名空间
  labels:            # 标签
    controller: deploy
spec:                # 详情描述
  replicas: 3        # 副本数量
  revisionHistoryLimit: 3 # 保留历史版本
  paused: false           # 暂停部署,默认是false
  progressDeadlineSeconds: 600 # 部署超时时间(s),默认是600
  strategy:               # 策略
    type: RollingUpdate   # 滚动更新策略
    rollingUpdate:        # 滚动更新
      maxSurge: 30%       # 最大额外可以存在的副本数,可以为百分比,也可以为整数
      maxUnavailable: 30% # 最大不可用状态的 Pod 的最大值,可以为百分比,也可以为整数
  selector:               # 选择器,通过它指定该控制器管理哪些pod
    matchLabels:          # Labels匹配规则
      app: nginx-pod
    matchExpressions:     # Expressions匹配规则
      - { key: app, operator: In, values: [ nginx-pod ] }
  template:               # 模板,当副本数量不足时,会根据下面的模板创建pod副本
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
        - name: nginx
          image: nginx:1.30.1
          ports:
            - containerPort: 80
8.4.3 pod镜像更改

Deployment控制器的容器镜像修改也同ReplicaSet控制器修改容器镜像方法相同,但是pod的容器镜像不需要手动删除,会根据策略进行自动版本更新。

spec.strategy.type有两个值:

  • RollingUpdate:滚动更新,就是杀死一部分,就启动一部分,在更新过程中,存在两个版本Pod
  • Recreate:在创建出新的Pod之前会先杀掉所有已存在的Pod

spec.strategy.rollingUpdate.maxSurge:用来指定在升级过程中不可用Pod的最大数量,默认为25%

spec.strategy.rollingUpdate.maxSurge:用来指定在升级过程中可以超过期望的Pod的最大数量,默认为25%
在这里插入图片描述
示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx
  namespace: dev
  labels:
    controller: deploy
spec:
  replicas: 3
  revisionHistoryLimit: 3
  paused: false
  progressDeadlineSeconds: 600
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 30%
      maxUnavailable: 30%
  selector:
    matchLabels:
      app: nginx-pod
    matchExpressions:
      - { key: app, operator: In, values: [ nginx-pod ] }
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
        - name: nginx
          image: nginx:1.15.5
          ports:
            - containerPort: 80
[root@k8s-master ~]# kubectl apply -f controller-deploy-nginx.yaml 
deployment.apps/deploy-nginx created

[root@k8s-master ~]# kubectl get deployment -n dev -o wide
NAME           READY   UP-TO-DATE   AVAILABLE   AGE    CONTAINERS   IMAGES         SELECTOR
deploy-nginx   3/3     3            3           103s   nginx        nginx:1.15.5   app=nginx-pod,app in (nginx-pod)

[root@k8s-master ~]# kubectl get pods -n dev
NAME                           READY   STATUS    RESTARTS   AGE
deploy-nginx-677f59dd8-2m9ph   1/1     Running   0          83s
deploy-nginx-677f59dd8-c5rbk   1/1     Running   0          83s
deploy-nginx-677f59dd8-t64bl   1/1     Running   0          83s

1、容器镜像版本更改

容器镜像版本更改方式参照ReplicaSet控制器方式

[root@k8s-master ~]# kubectl set image deployment deploy-nginx nginx=nginx:1.23.0  -n dev
deployment.apps/deploy-nginx image updated

2、容器镜像版本更改验证

[root@k8s-master ~]# kubectl get deployment -n dev -o wide
NAME           READY   UP-TO-DATE   AVAILABLE   AGE    CONTAINERS   IMAGES         SELECTOR
deploy-nginx   3/3     2            3           3m1s   nginx        nginx:1.23.0   app=nginx-pod,app in (nginx-pod)

3、观看pods情况,是会进行镜像自动更新

[root@k8s-master ~]# kubectl get pods -n dev
NAME                            READY   STATUS              RESTARTS   AGE
deploy-nginx-677f59dd8-2m9ph    1/1     Running             0          3m12s
deploy-nginx-677f59dd8-t64bl    1/1     Running             0          3m12s
deploy-nginx-7cd566d98b-6sthc   0/1     ContainerCreating   0          12s
deploy-nginx-7cd566d98b-ztl65   1/1     Running             0          14s

[root@k8s-master ~]# kubectl get pods -n dev
NAME                            READY   STATUS    RESTARTS   AGE
deploy-nginx-7cd566d98b-6sthc   1/1     Running   0          2m35s
deploy-nginx-7cd566d98b-sxkn5   1/1     Running   0          101s
deploy-nginx-7cd566d98b-ztl65   1/1     Running   0          2m37s

[root@k8s-master ~]# kubectl describe pods deploy-nginx-7cd566d98b-6sthc -n dev
8.4.4 pod镜像更改操作

pod镜像也可以称为pod版本,通过kubectl rollout --help可知以下常见操作

kubectl rollout SUBCOMMAND [options]
# SUBCOMMAND
status        显示上线的状态
history       显示pod容器镜像(版本)更改记录
pause         暂停pod容器镜像(版本)更改操作
resume        继续已经暂停的pod容器镜像(版本)更改操作
restart       重启pod容器镜像(版本)更改操作
undo          默认回滚到上一次更改pod容器镜像(版本)更改记录(使用--to-revision指定回滚版本)

1、查看pod镜像(版本)更换情况

kubectl rollout status deployments deploy控制器名 -n 命名空间

示例:

[root@k8s-master ~]# kubectl rollout status deploy deploy-nginx -n dev
deployment "deploy-nginx" successfully rolled out

2、查看pod镜像(版本)更换历史

kubectl rollout history deployments deploy控制器名 -n 命名空间

示例:

[root@k8s-master ~]# kubectl rollout history deploy deploy-nginx -n dev
deployment.apps/deploy-nginx 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

3、暂停pod镜像(版本)更换操作

滚动更新是逐个替换,更新是需要一个时间段,暂停更换,就是维持目前pod容器镜像版本现状

kubectl rollout pause deployments deploy控制器名 -n 命名空间

4、暂停继续更换pod镜像(版本)

kubectl rollout resume deployments deploy控制器名 -n 命名空间

5、重启更改pod镜像(版本)

kubectl rollout restart deployments deploy控制器名 -n 命名空间

6、回滚操作

# 默认回滚到上一个版本
kubectl rollout undo deployments deploy控制器名 -n 命名空间

# 回滚到1的版本
kubectl rollout undo deployments deploy控制器名 --to-revision=1 -n 命名空间

8.5 HPA控制器

kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f
FILENAME | TYPE NAME) [options]

kubectl scale可以实现pod数量的更改,实际生产环境中,希望实现自动扩缩容。
在这里插入图片描述

[root@k8s-master ~]# kubectl api-resources | grep Horizontal
horizontalpodautoscalers          hpa          autoscaling/v2                         true         HorizontalPodAutoscaler
8.5.1 自动扩缩容

文档地址:https://kubernetes.io/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics

示例:

# hpa-nginx.yaml 文件
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
 name: hpa-nginx
 namespace: dev
 labels:
  controller: hpa
spec:
  scaleTargetRef: # 指定要控制的信息
    apiVersion: apps/v1
    kind: Deployment
    name: deploy-nginx
  minReplicas: 1 # 最小pod数量
  maxReplicas: 10 # 最大pod数量
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
# 执行
[root@k8s-master ~]# kubectl apply -f hpa-nginx.yaml 
horizontalpodautoscaler.autoscaling/hpa-nginx created

# 查看发现内存查看
[root@k8s-master ~]# kubectl get hpa -n dev
NAME        REFERENCE                 TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
hpa-nginx   Deployment/deploy-nginx   <unknown>/50%   1         10        3          6m4s

# 查看内存、cpu使用情况,发现指标API不可用
[root@k8s-master ~]# kubectl top node
error: Metrics API not available
8.5.2 指标API可用安装

kubectl top命令可用,则需要安装Metrics API

# 下载最新版本high-availability-1.21+.yaml
[root@k8s-master ~]# https://521github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml# 改下面三处内容
hostNetwork: true
- --kubelet-insecure-tls
image: registry.aliyuncs.com/google_containers/metrics-server:v0.6.4

在这里插入图片描述

[root@k8s-master ~]# kubectl apply -f high-availability-1.21+.yaml

[root@k8s-master ~]# kubectl top nodes
NAME         CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
k8s-master   193m         4%     1641Mi          44%       
k8s-node1    68m          3%     755Mi           20%       
k8s-node2    70m          3%     651Mi           37%       
k8s-node3    70m          3%     559Mi           32%

[root@k8s-master ~]# kubectl top pods -n dev
NAME                            CPU(cores)   MEMORY(bytes)   
deploy-nginx-7cd566d98b-6sthc   0m           1Mi             
deploy-nginx-7cd566d98b-sxkn5   0m           1Mi             
deploy-nginx-7cd566d98b-ztl65   0m           7Mi
[root@k8s-master ~]# kubectl top --help
Display resource (CPU/memory) usage.

 The top command allows you to see the resource consumption for nodes or pods.

 This command requires Metrics Server to be correctly configured and working on the server.

Available Commands:
  node          Display resource (CPU/memory) usage of nodes
  pod           Display resource (CPU/memory) usage of pods

Usage:
  kubectl top [flags] [options]

Use "kubectl top <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).

常用命令:

# 查看所有节点cpu、内存情况
kubectl top nodes

# 查看某个节点cpu、内存情况
kubectl top nodes 节点ip/节点域名

# 查看某个命名空间所有pods的cpu、内存情况
kubectl top pods -n 命名空间名称

# 查看某个命名空间某个pods的cpu、内存情况
kubectl top pods pods名称 -n 命名空间名称

8.6 DaemonSet

[root@k8s-master ~]# kubectl api-resources | grep DaemonSet
daemonsets                        ds           apps/v1                                true         DaemonSet

节点级别的控制器,常用来日志收集、节点监控,会随着节点添加新增一个pod,节点移走减少一个pod
在这里插入图片描述

DaemonSet控制器生成的pods也支持使用kubectl rollout回滚操作、暂停、暂停继续、重启等操作。

8.6.1 资源清单
apiVersion: apps/v1 # 版本号
kind: DaemonSet # 类型
metadata: # 元数据
  name: # ds控制器称
  namespace: # 所属命名空间
  labels: #标签
    controller: daemonset
spec: # 详情描述
  revisionHistoryLimit: 3 # 保留历史版本
  updateStrategy: # 更新策略
    type: RollingUpdate # 滚动更新策略
    rollingUpdate: # 滚动更新
      maxUnavailable: 1 # 最大不可用状态的 Pod 的最大值,可以为百分比,也可以为整数
  selector: # 选择器,通过它指定该控制器管理哪些pod
    matchLabels: # Labels匹配规则
      app: nginx-pod
    matchExpressions: # Expressions匹配规则
      - { key: app, operator: In, values: [ nginx-pod ] }
  template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
        - name: nginx-containers
          image: nginx:latest
          ports:
            - containerPort: 80

示例:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: ds-nginx
  namespace: dev
spec:
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
        - name: nginx
          image: nginx:latest
[root@k8s-master ~]# kubectl apply -f ds-nginx.yaml 
daemonset.apps/ds-nginx created

[root@k8s-master ~]# kubectl get pods -n dev -o wide
NAME             READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
ds-nginx-d7dtp   1/1     Running   0          75s   10.244.36.94     k8s-node1   <none>           <none>
ds-nginx-fwlrk   1/1     Running   0          75s   10.244.169.146   k8s-node2   <none>           <none>
ds-nginx-pjqxb   1/1     Running   0          75s   10.244.107.210   k8s-node3   <none>           <none>

8.7 Job控制器

[root@k8s-master ~]# kubectl api-resources | grep Job
jobs                                           batch/v1                               true         Job

在这里插入图片描述

运行一次就结束pods的控制器

8.7.1 资源清单
apiVersion: batch/v1 # 版本号
kind: Job # 类型       
metadata: # 元数据
  name: # Job控制器名称 
  namespace: # 所属命名空间 
  labels: #标签
    controller: job
spec: # 详情描述
  completions: 1 # 指定job需要成功运行Pods的次数。默认值: 1
  parallelism: 1 # 指定job在任一时刻应该并发运行Pods的数量。默认值: 1
  activeDeadlineSeconds: 30 # 指定job可运行的时间期限,超过时间还未结束,系统将会尝试进行终止。
  backoffLimit: 6 # 指定job失败后进行重试的次数。默认是6
  manualSelector: true # 是否可以使用selector选择器选择pod,默认是false
  selector: # 选择器,通过它指定该控制器管理哪些pod
    matchLabels: # Labels匹配规则
      app: counter-pod
    matchExpressions: # Expressions匹配规则
      - { key: app, operator: In, values: [ counter-pod ] }
  template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本
    metadata:
      labels:
        app: counter-pod
    spec:
      restartPolicy: Never # 重启策略只能设置为Never或者OnFailure
      containers:
        - name: counter
          image: busybox:latest
          command: [ "bin/sh","-c","for i in {1..10}; do echo $i;sleep 2;done" ]
关于重启策略设置的说明:
    如果指定为OnFailure,则job会在pod出现故障时重启容器,而不是创建pod,failed次数不变
    如果指定为Never,则job会在pod出现故障时创建新的pod,并且故障pod不会消失,也不会重启,failed次数加1
    如果指定为Always的话,就意味着一直重启,意味着job任务会重复去执行了,当然不对,所以不能设置为Always

8.8 CronJob

[root@k8s-master ~]# kubectl api-resources | grep CronJob
cronjobs                          cj           batch/v1                               true         CronJob

在这里插入图片描述
执行类似定时任务的pods的控制器

8.8.1 资源清单
apiVersion: batch/v1 # 版本号
kind: CronJob # 类型
metadata: # 元数据
  name: # CronJob控制器名称
  namespace: # 所属命名空间
  labels: #标签
    controller: cronjob
spec: # 详情描述
  schedule: # cron格式的作业调度运行时间点,用于控制任务在什么时间执行
  concurrencyPolicy: # 并发执行策略,用于定义前一次作业运行尚未完成时是否以及如何运行后一次的作业
  failedJobHistoryLimit: # 为失败的任务执行保留的历史记录数,默认为1
  successfulJobHistoryLimit: # 为成功的任务执行保留的历史记录数,默认为3
  startingDeadlineSeconds: # 启动作业错误的超时时长
  jobTemplate: # job控制器模板,用于为cronjob控制器生成job对象;下面其实就是job的定义
    metadata:
    spec:
      completions: 1
      parallelism: 1
      activeDeadlineSeconds: 30
      backoffLimit: 6
      manualSelector: true
      selector:
        matchLabels:
          app: counter-pod
        matchExpressions: # 规则
          - { key: app, operator: In, values: [ counter-pod ] }
      template:
        metadata:
          labels:
            app: counter-pod
        spec:
          restartPolicy: Never
          containers:
            - name: counter
              image: busybox:latest
              command: [ "bin/sh","-c","for i in 1 2 3 4 5 6 7 8 9; do echo $i;sleep 20;done" ]
需要重点解释的几个选项:
schedule: cron表达式,用于指定任务的执行时间
	*/1    *      *    *     *
	<分钟> <小时> <日> <月份> <星期>

    分钟 值从 0 到 59.
    小时 值从 0 到 23.
    日 值从 1 到 31.
    月 值从 1 到 12.
    星期 值从 0 到 6, 0 代表星期日
    多个时间可以用逗号隔开; 范围可以用连字符给出;*可以作为通配符; /表示每...
concurrencyPolicy:
	Allow:   允许Jobs并发运行(默认)
	Forbid:  禁止并发运行,如果上一次运行尚未完成,则跳过下一次运行
	Replace: 替换,取消当前正在运行的作业并用新作业替换它

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

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

相关文章

GitOps实践之Argo CD (2)

argocd 【-1】argocd可以解决什么问题? helm 部署是手动的?依赖流水线。而有时候仅仅更新一个小东西,流水线跑好久,CD真的不应该和CI耦合。不同环境的helm配置不同,手动修改问题多,可以用git管理起来,例如分不同环境用目录区分。argocd创建应用可以不通环境部署到不同集…

基于Java+springboot+VUE+redis实现的前后端分类版网上商城项目

基于Java springbootVUEredis实现的前后端分类版网上商城项目 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言…

备忘: 踩坑linux环境部署轻量化的Langchain-Chatchat集成通义千问

看了许多材料,为了利用大模型构建以对话方式驱动的本地应用程序需要使用LangChain-chatchat,其基本介绍参考Langchain-Chatchat项目 通过查询资料&#xff0c;查到win上安装流程使用免费的通义千问 api 最轻量化部署Langchain-Chatchat&#xff0c;原以为在信创Linux系统上非常…

MM01/MM02/MM03物料主数据增强

1.屏幕增强 -在主表中附加结构(判断数据的主表,如MARA,MARC) 增强字段数据元素勾选更改文档以后,会记录字段变更历史 -SPRO-->物流-常规-->物料主数据-->配置物料主记录-->创建定制子屏幕的程序 会生成对应的函数组--里面会包含两个屏幕(0001,0002) 这里的0001屏…

2024年华为HCIA-DATACOM新增题库(H12-811)

801、[单选题]178/832、在系统视图下键入什么命令可以切换到用户视图? A quit B souter C system-view D user-view 试题答案&#xff1a;A 试题解析&#xff1a;在系统视图下键入quit命令退出到用户视图。因此答案选A。 802、[单选题]“网络管理员在三层交换机上创建了V…

【联邦学习综述:概念、技术】

出自——联邦学习综述&#xff1a;概念、技术、应用与挑战。梁天恺 1*&#xff0c;曾 碧 2&#xff0c;陈 光 1 从两个方面保护隐私数据 硬件层面 可 信 执 行 环 境 &#xff08;Trusted Execution Environment&#xff0c;TEE&#xff09;边 缘 计 算&#xff08;Edge Com…

如何成为一名优秀的项目管理者?

如何成为一名优秀的项目管理者&#xff1f; 在一个项目团队里&#xff0c;经常会有很多不同的声音&#xff1a; 有人说&#xff1a;“好的项目管理者就要做打杂的&#xff0c;什么都不用干&#xff0c;什么杂事他都能干”&#xff1b;有人说&#xff1a;“项目管理者经常受到…

vue ui Starting GUI 图形化配置web新项目

前言&#xff1a;在vue框架里面&#xff0c; 以往大家都是习惯用命令行 vue create 、vue init webpack创建新前端项目&#xff0c;而vue ui是一个可视化的图形界面&#xff0c;对于新手来说更加友好了&#xff0c;不但可以创建、管理、还可以更新vue项目&#xff0c;也可以下载…

mabatis 中

手动实现MaBatis底层机制 实现任务阶段一&#x1f34d;完成读取配置文件, 得到数据库连接&#x1f966;分析 代码实现&#x1f966;完成测试 实现任务阶段二&#x1f34d;编写执行器, 输入SQL语句, 完成操作&#x1f966;分析 代码实现&#x1f966;完成测试 实现任务阶段三&…

基于PHP的餐厅管理系统APP设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 MVC 3 1.2 ThinkPHP 3 1.3 MySQL数据库 3 1.4 uni-app 4 1.5 本章小结 4 2 系统分析 5 2.1 功能需求 5 2.2 用例分析 7 2.3 非功能需求 8 2.4 本章小结 8 3 系统设计 9 3.1 系统总体设计 9 3.2 系统详细设计 10 3.3 本章小…

数字图像处理—python

pycahem终端也可以下载库&#xff0c;我只会用终端下载,用的镜像网站 pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple pip install scikit-image -i https://pypi.tuna.tsinghua.edu.cn/simple. pip install matplotlib -i https://pypi.tuna.tsinghua.edu.c…

超标量与多发射和超长指令字设计

前言 大家好我是jiantaoyab&#xff0c;这是我所总结作为学习的笔记第11篇,在这里分享给大家,这篇文章讲超标量与多发射和超长指令字设计&#xff0c;前面文章提到的书籍的pdf大家没有的话可以私信找我要&#xff01; 《计算机组成与设计&#xff1a;硬件 / 软件接口》中4.10…

什么是PLC设备数据采集?

在当今工业4.0和智能制造的大背景下&#xff0c;数据的价值日益凸显。特别是对于PLC&#xff08;可编程逻辑控制器&#xff09;这类核心工业设备&#xff0c;数据采集显得尤为重要。那么&#xff0c;究竟什么是PLC设备数据采集&#xff1f;它又有何价值呢&#xff1f;今天&…

Python打印Linux系统中最常用的linux命令之示例

一、Linux中的~/.bash_history文件说明&#xff1a; 该文件保存了linux系统中运行过的命令的历史。使用该文件来获取命令的列表&#xff0c;并统计命令的执行次数。统计时&#xff0c;只统计命令的名称&#xff0c;以不同参数调用相同的命令也视为同一命令。 二、示例代码&am…

一篇搞定mysql数据库基础

目录 一、MySQL具体的特点 1.关系型数据库&#xff08;RDBMS&#xff09;&#xff1a; 2.MySQL是一个“客户端-服务器”结构的程序 Q1:服务器能不能知道客户端什么时候发请求&#xff1f;&#xff1f; Q2:服务器是只给一个客户端提供服务吗&#xff1f;&#xff1f; 二、M…

靶场:sql-less-18——sqlmap爆库的操作

本文操作环境&#xff1a;KaLi-Linux 靶场链接&#xff1a;Less-18 Header Injection- Error Based- string 1、打开靶场&#xff0c;挂好代理&#xff0c;使用bp抓包 2、复制抓包的数据内容&#xff0c;在kali-Linux中新建文档复制保存 3、打开命令窗口&#xff1a;确定注入点…

【更新】数字金融与企业ESG表现:效应、机制与“漂绿”检验数据集(2011-2022年)

参照温亚东&#xff08;2024&#xff09;的做法&#xff0c;本团队对来自统计与决策《数字金融与企业ESG表现&#xff1a;效应、机制与"漂绿"检验》一文中的基准回归部分进行复刻 一、数据介绍 数据名称&#xff1a;数字金融与企业ESG表现 参考期刊&#xff1a;《统…

Linux--编译链接的过程

一.gcc,g,gdb安装 命令行写gcc,g,gdb根据提示安装: sudo apt install gcc/g/gdb 二.gcc分布编译链接 编译链接的过程&#xff1a;(面试过程一个大的问题&#xff09; (1)预编译: gcc -E main.c -o main.i 用gcc预编译main.c输出main.i(2)编译: gcc -S main.i -o main.s(3)汇编…

Java学习笔记(10)

学生管理系统项目 package exercise;import java.util.ArrayList; import java.util.Scanner;public class StudentProgramme {public static void main(String[] args) {ArrayList<Student> studentArrayList new ArrayList<>();Student newStudent new Student…

Linux——文件标识符

目录 一、文件基础 二、常见的C语言文件接口 三、系统文件接口 四、理解语言与系统文件操作的关系 五、如何理解一切皆文件 六、文件标识符再理解 一、文件基础 一个空文件&#xff0c;也会占用磁盘空间&#xff0c;这是因为文件不仅仅有存放在里面的内容&#xff0c;还…