kubernetes 的高级资源对象

前面学习了使用yaml直接创建pod,但是在创建的时候遇到了一些问题
1、很多参数无法修改
2、无法多副本

1、控制器

deployment

可以修改pod参数,支持多副本,支持更新策略

statefulset
daemonset
cronjob
job

第三方提供的扩展控制器
阿里云的openkruise
cloneset
advanced statefulset
advanced deamonset

生成一个deployment的pod

[root@cka01 ~]# kubectl create deploy webserver --image=nginx:1.21 --dry-run=client -o yaml> deploy-web.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: webserver
  name: webserver
  namespace: cka
spec:
  replicas: 1 #副本数
  selector:   # 选择带有特定标签的pod。监视pod的状态是否正常,pod的副本数是否正确,所以通过deployment创造的pod的标签不能与其他的pod重复。
    matchLabels:
      app: webserver
      type: backend
  strategy: {}
  template:   # pod.yaml 里面的内容. 不需要指定name,会根据deployment的name,加上hash串生成一个name,也不需要指定namesapce,这里的namespace与deployment一样
    metadata:
      creationTimestamp: null
      labels:
        app: webserver
        type: backend
    spec:
      containers:
      - image: nginx:1.21
        name: nginx
        resources: {}
status{}

可以发现,使用delete pod去删除pod的时候,删不掉,会立马拉起一个新的pod。这是由于 selector在监视pod的状态以及副本数。发现副本数不够则立即拉起新的副本
在这里插入图片描述
怎么删除
1、将yaml里面replicas数量改成0,再重新apply
2、删除对应的deployment,则里面的pod也会删除
在这里插入图片描述

deployment的增删改查
get 操作:
在这里插入图片描述
edit 操作

[root@cka01 deployment]# kubectl edit deploy webserver -n cka

[root@cka01 deployment]# kubectl describe deploy -n cka
[root@cka01 deployment]# kubectl describe deploy -n cka webserver

delete:

[root@cka01 deployment]# kubectl delete deploy -n cka webserver1

滚动更新策略

recreate: 将现有的副本数全部删除,再全部重建

rollingUpdate:滚动更新

  * Maxsurge:先建后删。不管Maxunavailable的值是多少。都先创建Maxsurge个副本数,再删除Maxsurge个旧pod,依次滚动
  
  * MaxUnavailable:先删后建。一般只有maxsurge不可用时,才会执行Maxunavailable。先删除Maxunavalibe个旧pod,再创建Maxunavailable个新pod,依次滚动
Maxsurge/Maxunavaliable:0 表示不生效    25% 表示 总副本数的25%
Maxsurge/Maxunavalive: 1-n .表示先删后建或者先建后删的 n个pod

这两不能同时为0

默认为25%
在这里插入图片描述

statefulset 有状态集

支持副本数
支持容器id名称固定不变
支持分区(分批发布):100个副本,在服务发布的时候可以先发布一个副本,验证该副本是否正常。如果正常,可以继续发布。
不支持更新策略
支持容器顺序启停

缺点:如果副本数很多,statefulset的一次更新很慢。

创建statefulset资源对象的pod

[root@cka01 statefulset]# cat statfulset-web.yaml 
apiVersion: apps/v1
kind: StatefulSet
metadata:
  creationTimestamp: null
  labels:
    app: webserver
  name: webserver
  namespace: cka
spec:
  serviceName: webhahahha   #指定名称id前缀
  replicas: 3 #副本数
  selector:   # 选择带有特定标签的pod。监视pod的状态是否正常,pod的副本数是否正确,所以通过deployment创造的pod的标签不能与其他的pod重复。
    matchLabels:
      app: webserver
      type: backend
  template:   # pod.yaml 里面的内容. 不需要指定name,会根据deployment的name,加上hash串生成一个name,也不需要指定namesapce,这里的namespace与deployment一样
    metadata:
      creationTimestamp: null
      labels:
        app: webserver
        type: backend
    spec:
      containers:
      - image: nginx:1.21
        name: nginx

在这里插入图片描述
分区演示:
默认跟新策略:
在这里插入图片描述

apiVersion: apps/v1
kind: StatefulSet
metadata:
  creationTimestamp: null
  labels:
    app: webserver
  name: webserver
  namespace: cka
spec:
  serviceName: webhahahha   #指定名称id前缀
  replicas: 4 #副本数
  selector:   # 选择带有特定标签的pod。监视pod的状态是否正常,pod的副本数是否正确,所以通过deployment创造的pod的标签不能与其他的pod重复。
    matchLabels:
      app: webserver
      type: backend
  updateStrategy:
    rollingUpdate:
      partition: 2 #保留两个旧副本   通过修改这里的字段值,以控制更新,当想全部更新时,把partition的值设置为0即可。
    type: RollingUpdate
  template:   # pod.yaml 里面的内容. 不需要指定name,会根据deployment的name,加上hash串生成一个name,也不需要指定namesapce,这里的namespace与deployment一样
    metadata:
      creationTimestamp: null
      labels:
        app: webserver
        type: backend
    spec:
      containers:
      - image: nginx:1.21
        name: nginx

daemonset

  • 不知道副本数
  • 不支持更新策略
  • 每个节点都会运行一个,且只会运行一个
    • 适用于agent类型的应用

job

一次性任务,相当于at

[root@cka01 job]# cat job-test.yaml 
apiVersion: batch/v1
kind: Job
metadata:
  labels:
    app: test-job
  name: test-job
  namespace: cka
spec:
  backoffLimit: 3 #副本数
  activeDeadlineSeconds: 120
  manualSelector: true     # 这里job类型的pod的yaml文件,这个是必须的
  selector:   # 选择带有特定标签的pod。监视pod的状态是否正常,pod的副本数是否正确,所以通过deployment创造的pod的标签不能与其他的pod重复。
    matchLabels:
      app: hello
  template:   # pod.yaml 里面的内容. 不需要指定name,会根据deployment的name,加上hash串生成一个name,也不需要指定namesapce,这里的namespace与deployment一样
    metadata:
      creationTimestamp: null
      labels:
        app: hello
    spec:
      restartPolicy: Never
      containers:
      - image: busybox:1.28
        name: busybox


cronjob
定时任务,相当于crontab


apiVersion: batch/v1
kind: CronJob
metadata:
  name: test-crojob
  namespace: cka
  labels:
    app: test-cronjob
spec:
  schedule: "* * * * *"
  successfulJobsHistoryLimit: 5  #保留成功支持的pod job数
  failedJobsHistoryLimit: 3  #保留失败执行的job数
  startingDeadlineSeconds: 300  #最后启动时间。不管前一个job有没有执行完,5分钟之后都启动
  jobTemplate:
    metadata:
      namespace: cka
      labels:
        name: test-job
    spec:
      backoffLimit: 3
      activeDeadlineSeconds: 120
      template:
        metadata:
          labels:
            app: hello
        spec:
          restartPolicy: Never
          containers:
          - name: hello
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - "echo 'hello world'"                               

#第三方扩展控制器,阿里云开源

openkruise

kubernetes的包管理器:
helm:专门用于kubernetes集群当中部署应用的
安装 官网:https://helm.sh/zh/
在这里插入图片描述
仓库管理:
添加(初始化):

helm repo add bitnami https://charts.bitnami.com/bitnami

查询:helm repo list
在这里插入图片描述
更新: [root@cka01 ~]# helm repo update
删除:[root@cka01 ~]# helm repo remove bitnami

修改:

helm repo remove bitnami    
helm repo add bitnami https://xxx.xxx.xxx/yyy

包管理:
搜索:

 helm search repo redis

在这里插入图片描述
安装:

[root@cka01 ~]# helm install redistest  bitnami/redis  -n helm

在这里插入图片描述在这里插入图片描述
获取(拉取)包:[root@cka01 ~]# helm fetch bitnami/redis
在这里插入图片描述
更新包:[root@cka01 redis]# helm upgrade redistest bitnami/redis -n helm -f values.yaml
或者卸载使用更改过的value.yaml 重装[root@cka01 redis]# helm install redistest bitnami/redis -n helm -f values.yaml

卸载:[root@cka01 redis]# helm uninstall redistest -n helm
在这里插入图片描述
重装[root@cka01 redis]# helm install redistest bitnami/redis -n helm -f values.yaml
在这里插入图片描述
openkruise的第三方控制器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值