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的第三方控制器。

### 回答1: Kubernetes 是一个开源的容器编排工具,可以帮助用户自动化部署、扩展和管理容器化应用程序。在 Kubernetes 中,资源对象是指用于描述和管理集群中各种资源的抽象概念。 以下是 Kubernetes 中常见的资源对象类型: 1. Pod(容器组):Pod 是 Kubernetes 中最小的可部署对象,通常包含一个或多个容器,共享同一个网络命名空间和存储卷。 2. ReplicaSet(副本集):ReplicaSet 用于管理一组相同的 Pod 副本,保证在集群中的任何时间都有指定数量的副本运行。 3. Deployment(部署):Deployment 是一种管理 Pod 和 ReplicaSet 的高级对象,用于实现容器化应用程序的滚动更新和回滚。 4. Service(服务):Service 提供了一种逻辑方式来访问一组 Pod,通常用于将网络流量路由到后端的 Pod。 5. ConfigMap(配置映射):ConfigMap 用于存储集群中的配置数据,例如应用程序的环境变量和配置文件。 6. Secret(密钥):Secret 用于存储敏感信息,例如密码和证书,以安全地在集群中传输和存储。 7. PersistentVolume(持久卷):PersistentVolume 用于将持久化存储抽象出来,使其在不同的存储系统之间具有可移植性。 8. StatefulSet(有状态集):StatefulSet 用于管理具有唯一标识和稳定网络标识符的 Pod,通常用于运行需要持久化存储和有状态服务的应用程序。 这些资源对象Kubernetes 集群中的基本构建块,使用它们可以轻松地管理和扩展容器化应用程序。 ### 回答2: Kubernetes中的资源对象是指在Kubernetes集群中由用户定义和管理的各种资源类型,用于表示和控制应用程序、服务和基础设施等方面的相关资源Kubernetes提供了多种资源对象,包括但不限于以下几种: 1. Pod(容器组):Pod是Kubernetes中最小的可调度和部署单元,可以包含一个或多个容器。Pod通常将相关的容器组合在一起,共享网络和存储,并提供容器之间的通信和数据共享。 2. ReplicaSet(副本集):ReplicaSet用于定义和管理Pod的集合。它确保指定数量的Pod副本运行,并根据需要自动进行缩放,以实现应用程序的高可用性和负载均衡。 3. Deployment(部署):Deployment是ReplicaSet的高级抽象,用于实现无缝的应用程序部署和升级。它可以定义应用程序的副本数、升级策略和滚动升级等参数,并确保在应用程序版本变更时无需停机。 4. Service(服务):Service定义了一组Pod的访问方式和网络连接,提供了一个稳定的地址和端口,使得其他Pod或外部用户能够与应用程序进行通信。 除了上述常用资源对象,还有诸如ConfigMap(配置映射)、Secret(密钥)、Namespace(命名空间)等资源对象,它们用于管理和传递应用程序的配置信息、敏感数据和资源隔离等方面的需求。 通过使用这些资源对象,用户可以方便地定义和管理各种不同类型的应用程序和服务,并通过Kubernetes提供的强大的调度和管理功能,实现高可用性、弹性伸缩和自动化的应用程序部署和运维。 ### 回答3: Kubernetes 中的资源对象是指在集群中定义和管理的可部署的计算资源。它们用来描述和控制应用程序的部署、扩展和管理。Kubernetes 中有多种资源对象可供使用,如下所示: 1. Pod: Pod 是 Kubernetes 中最小的可部署对象单元。它由一个或多个容器组成,并共享相同的网络和存储资源。Pod 可以用来运行一个或多个容器应用程序。 2. Deployment: Deployment 是用来管理 Pod 的资源对象。它定义了一组 Pod 的副本,并负责监控和维护这些 Pod 的状态。通过 Deployment,可以方便地进行应用的部署、升级和回滚操作。 3. Service: Service 是用来暴露 Pod 的网络服务的资源对象。它为一组 Pod 提供了一个统一的访问入口,并负责将请求按照相应的负载均衡算法分发给后端的 Pod。 4. Volume: Volume 是用来管理 Pod 中的存储资源资源对象。它可以将外部存储系统挂载到 Pod 中,以便应用程序可以进行持久化数据的存储。 此外,Kubernetes 还提供了许多其他类型的资源对象,如 StatefulSet、DaemonSet、Job、CronJob 等,用于满足不同应用程序的需求。这些资源对象可以通过 YAML 或 JSON 文件进行定义和配置,并通过 Kubernetes API 进行管理和操作。 通过使用 Kubernetes资源对象,我们可以更方便地管理和部署应用程序,实现高可用性和弹性的系统架构,提高应用程序的可靠性和可扩展性。它为开发人员和运维人员提供了一种简单而强大的方式来管理和扩展应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值