云原生Kubernetes:Pod控制器

news2024/11/18 18:40:08

目录

一、理论

1.Pod控制器

2.Deployment 控制器

3.SatefulSet 控制器

4.DaemonSet 控制器

5.Job 控制器

6.CronJob 控制器

二、实验

1.Deployment 控制器

2.SatefulSet 控制器

3.DaemonSet 控制器

4.Job 控制器

5.CronJob 控制器

三、问题

1. showmount -e 报错

2.主机重启后pod报错Error

四、总结


一、理论

1.Pod控制器

(1)概念

Pod控制器,又称之为工作负载(workload),是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试进行重启,当根据重启策略无效,则会重新新建pod的资源。

(2)类型

ReplicaSet:

代用户创建指定数量的pod副本,确保pod副本数量符合预期状态,并且支持滚动式自动扩容和缩容功能。
ReplicaSet主要三个组件组成:

1)用户期望的pod副本数量
2)标签选择器,判断哪个pod归自己管理
3)当现存的pod数量不足,会根据pod资源模板进行新建

帮助用户管理无状态的pod资源,精确反应用户定义的目标数量,但是RelicaSet不是直接使用的控制器,而是使用Deployment。

Deployment

工作在ReplicaSet之上,用于管理无状态应用,目前来说最好的控制器。支持滚动更新和回滚功能,还提供声明式配置。
ReplicaSet 与Deployment 这两个资源对象逐步替换之前RC的作用。

DaemonSet

用于确保集群中的每一个节点只运行特定的pod副本,通常用于实现系统级后台任务。比如ELK服务
特性:服务是无状态的
服务必须是守护进程

④ StatefulSet:管理有状态应用

 Job

只要完成就立即退出,不需要重启或重建

⑥ Cronjob

周期性任务控制,不需要持续后台运行

(3) pod容器中的有状态和无状态的区别

1)有状态实例
实例之间有差别,每个实例都有自己的独特性,元数据不同,例如etcd,zookeeper
实例之间不对等的关系,以及依靠外部存储的应用

2)无状态实例
deployment认为所有的pod都是一样的
不用考虑顺序的要求
不用考虑在哪个node节点上运行
可以随意扩容和缩容

2.Deployment 控制器

(1)概念

部署无状态应用
管理Pod和ReplicaSet
具有上线部署、副本设定、滚动升级、回滚等功能
提供声明式更新,例如只更新一个新的image
应用场景:web服务

vim 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.15.4
        ports:
        - containerPort: 80

kubectl create -f nginx-deployment.yaml

kubectl get pods,deploy,rs

3.SatefulSet 控制器

(1)概念

StatefulSet 是用来管理有状态应用的工作负载 API 对象。

StatefulSet 用来管理某 Pod 集合的部署和扩缩, 并为这些 Pod 提供持久存储和持久标识符。

和 Deployment 类似, StatefulSet 管理基于相同容器规约的一组 Pod。但和 Deployment 不同的是, StatefulSet 为它们的每个 Pod 维护了一个有粘性的 ID。这些 Pod 是基于相同的规约来创建的, 但是不能相互替换:无论怎么调度,每个 Pod 都有一个永久不变的 ID。

如果希望使用存储卷为工作负载提供持久存储,可以使用 StatefulSet 作为解决方案的一部分。 尽管 StatefulSet 中的单个 Pod 仍可能出现故障, 但持久的 Pod 标识符使得将现有卷与替换已失败 Pod 的新 Pod 相匹配变得更加容易。

如果希望使用存储卷为工作负载提供持久存储,可以使用 StatefulSet 作为解决方案的一部分。 尽管 StatefulSet 中的单个 Pod 仍可能出现故障, 但持久的 Pod 标识符使得将现有卷与替换已失败 Pod 的新 Pod 相匹配变得更加容易。

tatefulSet 对于需要满足以下一个或多个需求的应用程序很有价值:

稳定的、唯一的网络标识符。
稳定的、持久的存储。
有序的、优雅的部署和扩缩。
有序的、自动的滚动更新。

在上面描述中,“稳定的”意味着 Pod 调度或重调度的整个过程是有持久性的。 如果应用程序不需要任何稳定的标识符或有序的部署、删除或扩缩, 则应该使用由一组无状态的副本控制器提供的工作负载来部署应用程序,比如 Deployment 或者 ReplicaSet可能更适用于你的无状态应用部署需要。
 

//名为 svc-demo 的 Headless Service 用来控制网络域名
kubectl create svc clusterip svc-demo --tcp=80:80 --dry-run=client -oyaml > svc-demo.yaml
vim svc-demo.yaml

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: svc-demo
  name: svc-demo
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: sts-demo    //拥有此标签的pod 都有此service
  type: ClusterIP
  clusterIP: None  //无头服务的clusterIp为None
//名为 myapp-demo 的 StatefulSet 有一个 Spec,它表明将在独立的4个 Pod 副本中启动容器
vim stateful-demo.yaml 

apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: myapp-demo
  name: myapp-demo
spec:
  serviceName: svc-demo
  replicas: 4
  selector:
    matchLabels:
      app: sts-demo
  template:
    metadata:
      labels:
        app: sts-demo
    spec:
      containers:
      - image: soscscs/myapp:v1
        name: myapp
        ports:
        - containerPort: 80
  volumeClaimTemplates:
  - metadata:
      name: pvc-demo
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 2Gi
      storageClassName: nfs-client-storageclass

(2)组成

●Headless Service(无头服务):用于为Pod资源标识符生成可解析的DNS记录。
●volumeClaimTemplates(存储卷申请模板):基于静态或动态PV供给方式为Pod资源提供专有的固定存储。
●StatefulSet:用于管控Pod资源。

(3)headless

在deployment中,每一个pod是没有名称,是随机字符串,是无序的。而statefulset中是要求有序的,每一个pod的名称必须是固定的。当节点挂了,重建之后的标识符是不变的,每一个节点的节点名称是不能改变的。pod名称是作为pod识别的唯一标识符,必须保证其标识符的稳定并且唯一。
为了实现标识符的稳定,这时候就需要一个headless service 解析直达到pod,还需要给pod配置一个唯一的名称。
 

(4)volumeClaimTemplate

大部分有状态副本集都会用到持久存储,比如分布式系统来说,由于数据是不一样的,每个节点都需要自己专用的存储节点。而在 deployment中pod模板中创建的存储卷是一个共享的存储卷,多个pod使用同一个存储卷,而statefulset定义中的每一个pod都不能使用同一个存储卷,由此基于pod模板创建pod是不适应的,这就需要引入volumeClaimTemplate,当在使用statefulset创建pod时,会自动生成一个PVC,从而请求绑定一个PV,从而有自己专用的存储卷。
 

服务发现:就是应用服务之间相互定位的过程。
应用场景:

●动态性强:Pod会飘到别的node节点
●更新发布频繁:互联网思维小步快跑,先实现再优化,老板永远是先上线再慢慢优化,先把idea变成产品挣到钱然后再慢慢一点一点优化
●支持自动伸缩:一来大促,肯定是要扩容多个副本
K8S里服务发现的方式—DNS,使K8S集群能够自动关联Service资源的“名称”和“CLUSTER-IP”,从而达到服务被集群自动发现的目的。

(5) 测试域名解析

kubectl get pods -A
kubectl delete pods coredns-54d67798b7-rl5wc -n kube-system 
kubectl delete pods coredns-54d67798b7-qbvr5 -n kube-system 

#进入容器
kubectl exec -it myapp-demo-0 sh

#查看域名解析
[root@master ~]# kubectl exec -it myapp-demo-0 sh
/ # nslookup kubernetes
nslookup: can't resolve '(null)': Name does not resolve

Name:      kubernetes
Address 1: 10.1.0.1 kubernetes.default.svc.cluster.local
/ # nslookup myapp-demo-0.svc-demo.default.svc.cluster.local
nslookup: can't resolve '(null)': Name does not resolve

Name:      myapp-demo-0.svc-demo.default.svc.cluster.local
Address 1: 10.244.1.91 myapp-demo-0.svc-demo.default.svc.cluster.local
/ # nslookup myapp-demo-1.svc-demo.default.svc.cluster.local
nslookup: can't resolve '(null)': Name does not resolve

Name:      myapp-demo-1.svc-demo.default.svc.cluster.local
Address 1: 10.244.2.103 myapp-demo-1.svc-demo.default.svc.cluster.local
/ # nslookup myapp-demo-2.svc-demo.default.svc.cluster.local
nslookup: can't resolve '(null)': Name does not resolve

Name:      myapp-demo-2.svc-demo.default.svc.cluster.local
Address 1: 10.244.1.92 myapp-demo-2.svc-demo.default.svc.cluster.local
/ # nslookup myapp-demo-3.svc-demo.default.svc.cluster.local
nslookup: can't resolve '(null)': Name does not resolve

Name:      myapp-demo-3.svc-demo.default.svc.cluster.local
Address 1: 10.244.2.104 myapp-demo-3.svc-demo.default.svc.cluster.local
/ # exit
#查看解析到创建的Pod
kubectl get pods -o wide

#删除Pod重新创建Pod名字不会改变
kubectl delete pod myapp-demo-0

容器内挂载实现数据持久化

#先删除之前资源
kubectl delete statefulsets.apps myapp-demo

vim stateful.yaml 

apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: myapp-demo
  name: myapp-demo
spec:
  serviceName: svc-demo
  replicas: 4
  selector:
    matchLabels:
      app: sts-demo
  template:
    metadata:
      labels:
        app: sts-demo
    spec:
      containers:
      - image: soscscs/myapp:v1
        name: myapp
        ports:
        - containerPort: 80
        volumeMounts:
        - name: pvc-demo
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: pvc-demo
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 2Gi
      storageClassName: nfs-client-storageclass
#生成资源
kubectl apply -f stateful.yaml

#进入容器
kubectl exec -it myapp-demo-1 sh
cd /data
echo "this is demo" > index.html
ls
cat index.html
exit

#查看
kubectl get pv,pvc

#nfs查看
systemctl start nfs
cd /opt/k8s/
ls
default-pvc-demo-myapp-demo-0-pvc-d9994ad6-f461-4b66-9d13-5db3be732755
default-pvc-demo-myapp-demo-1-pvc-0ff7f3d0-7e47-43b3-8009-d4a23b01cd2b
default-pvc-demo-myapp-demo-2-pvc-985e10d4-9b24-4bc0-aa27-8bb6dc1768a8
default-pvc-demo-myapp-demo-3-pvc-d3c6c4fb-07cb-457e-ad23-88f31c1e92bf
default-test-nfs-pvc-pvc-363a53a3-b73a-437e-a9a5-02f661c5cc53


cd default-pvc-demo-myapp-demo-1-pvc-0ff7f3d0-7e47-43b3-8009-d4a23b01cd2b
cat index.html

#master操作,删除pod,查看数据是否持久化
kubectl get pods -o wide
kubectl delete pod myapp-demo-1
kubectl get pods -o wide

#进入容器
kubectl exec -it myapp-demo-1 sh
cd /data
ls
cat index.html
exit

解析上例:由于 StatefulSet 资源依赖于一个实现存在的 Headless 类型的 Service 资源,所以需要先定义一个名为 svc-demo 的 Headless Service 资源,用于为关联到每个 Pod 资源创建 DNS 资源记录。接着定义了一个名为 myapp 的 StatefulSet 资源,它通过 Pod 模板创建了 4 个 Pod 资源副本,并基于 volumeClaimTemplates 向前面创建的PV进行了请求大小为 2Gi 的专用存储卷。
 

(6) 滚动更新

StatefulSet 控制器将在 StatefulSet 中删除并重新创建每个 Pod。它将以与 Pod 终止相同的顺序进行(从最大的序数到最小的序数),每次更新一个 Pod。在更新其前身之前,它将等待正在更新的 Pod 状态变成正在运行并就绪。

 kubectl edit statefulsets.apps myapp-demo 
 kubectl get pods -w   //查看滚动更新的过程

(7)扩容及缩容

kubectl scale statefulset myapp-demo --replicas=6
kubectl scale statefulset myapp-demo --replicas=3
扩展伸缩
kubectl scale sts myapp --replicas=4  //扩容副本增加到4个

kubectl get pods -w  //动态查看扩容

kubectl get pv  //查看pv绑定

kubectl patch sts myapp -p '{"spec":{"replicas":2}}'  //打补丁方式缩容

kubectl get pods -w  //动态查看缩容

当删除一个 StatefulSet 时,该 StatefulSet 不提供任何终止 Pod 的保证。为了实现 StatefulSet 中的 Pod 可以有序且体面地终止,可以在删除之前将 StatefulSet 缩容到 0。

示例:
kubectl scale statefulset myapp-demo --replicas=0
kubectl delete -f stateful.yaml	

4.DaemonSet 控制器

(1)概念

DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本。当有 Node 加入集群时,也会为他们新增一个 Pod

。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。

使用 DaemonSet 的一些典型用法:
●运行集群存储 daemon,例如在每个 Node 上运行 glusterd、ceph。
●在每个 Node 上运行日志收集 daemon,例如fluentd、logstash。
●在每个 Node 上运行监控 daemon,例如 Prometheus Node Exporter、collectd、Datadog 代理、New Relic 代理,或 Ganglia gmond。
应用场景:Agent

官方案例(监控):

示例:
vim daemon-demo.yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: myapp-ds
  name: myapp-ds
spec:
  selector:
    matchLabels:
      app: myapp-ds
  template:
    metadata:
      labels:
        app: myapp-ds
    spec:
      containers:
      - image: soscscs/myapp:v1
        name: myapp
        ports:
        - containerPort: 80
      tolerations:
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
kubectl apply -f daemon-demo.yaml
kubectl get pods -o wide

5.Job 控制器

(1)概念

Job分为普通任务(Job)和定时任务(CronJob)
常用于运行那些仅需要执行一次的任务
应用场景:数据库迁移、批处理脚本、kube-bench扫描、离线数据处理,视频解码等业务

Jobs | Kubernetes

vim job-demo.yaml

apiVersion: batch/v1
kind: Job
metadata:
  name: myapp-job
spec:
  template:
    spec:
      containers:
      - name: myapp
        image: soscscs/myapp:v1
        command: ["/bin/sh","-c","echo david like running ; sleep 10; date; exit 0"]
      restartPolicy: Never
  backoffLimit: 4
kubectl describe pods myapp-job-gnk6c
kubectl logs myapp-job-gnk6c 
kubectl get pods -o wide

kubectl get pods

kubectl get jobs

kubectl describe jobs myapp-job

修改为非正常退出  exit 1

vim job-demo.yaml

apiVersion: batch/v1
kind: Job
metadata:
  name: myapp-job
spec:
  template:
    spec:
      containers:
      - name: myapp
        image: soscscs/myapp:v1
        command: ["/bin/sh","-c","echo david like running ; sleep 10; date; exit 1"]
      restartPolicy: Never
  backoffLimit: 4
kubectl get pods -o wide -w

6.CronJob 控制器

(1)概念

周期性任务,像Linux的Crontab一样。
周期性任务
应用场景:通知,备份

Running Automated Tasks with a CronJob | Kubernetes

(2)参数配置

spec:
concurrencyPolicy: Allow #声明了 CronJob 创建的任务执行时发生重叠如何处理(并发性规则仅适用于相同 CronJob 创建的任务)。spec仅能声明下列规则中的一种:
●Allow (默认):CronJob 允许并发任务执行。
●Forbid:CronJob 不允许并发任务执行;如果新任务的执行时间到了而老任务没有执行完,CronJob 会忽略新任务的执行。
●Replace:如果新任务的执行时间到了而老任务没有执行完,CronJob 会用新任务替换当前正在运行的任务。
startingDeadlineSeconds: 15 #它表示任务如果由于某种原因错过了调度时间,开始该任务的截止时间的秒数。过了截止时间,CronJob 就不会开始任务,且标记失败.如果此字段未设置,那任务就没有最后期限。
successfulJobsHistoryLimit: 3 #要保留的成功完成的任务数(默认为3)
failedJobsHistoryLimit:1 #要保留多少已完成和失败的任务数(默认为1)
suspend:true #如果设置为 true ,后续发生的执行都会被挂起。 这个设置对已经开始的执行不起作用。默认是 false。
schedule: '*/1 * * * *' #必需字段,作业时间表。在此示例中,作业将每分钟运行一次
jobTemplate: #必需字段,作业模板。这类似于工作示例
vim cronjob-demo.yaml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            imagePullPolicy: IfNotPresent
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure
kubectl apply -f cronjob.demo.yaml

kubectl get pods -o wide 

kubectl get pods -o wide  -w

kubectl logs hello-

二、实验

1.Deployment 控制器

(1) 编写资源清单文件

(2)生成资源

(3)查看

删除资源

已删除

2.SatefulSet 控制器

(1)创建名为 svc-demo 的 Headless Service 用来控制网络域名

生成资源并查看

(2)创建名为 myapp-demo 的 StatefulSet 有一个 Spec,它表明将在独立的4个 Pod 副本中启动容器

生成资源

观察pod创建过程

查看信息

查看NFS新生成了4个pv

(3) 测试域名解析

查看coredns

删除coredns

进入容器查看域名解析,显示各pod的新IP地址

解析到创建的Pod

删除Pod重新创建Pod名字不会改变

重新生成

生成

删除之前的资源

容器内挂载

生成资源

查看

进入容器

查看

nfs查看

nfs服务器实现共享存储

master操作,删除pod,查看数据是否存在

数据依然存在

解析上例:由于 StatefulSet 资源依赖于一个实现存在的 Headless 类型的 Service 资源,所以需要先定义一个名为 svc-demo 的 Headless Service 资源,用于为关联到每个 Pod 资源创建 DNS 资源记录。接着定义了一个名为 myapp 的 StatefulSet 资源,它通过 Pod 模板创建了 4 个 Pod 资源副本,并基于 volumeClaimTemplates 向前面创建的PV进行了请求大小为 2Gi 的专用存储卷。
 

(4) 滚动更新

StatefulSet 控制器将在 StatefulSet 中删除并重新创建每个 Pod。它将以与 Pod 终止相同的顺序进行(从最大的序数到最小的序数),每次更新一个 Pod。在更新其前身之前,它将等待正在更新的 Pod 状态变成正在运行并就绪。

 kubectl edit statefulsets.apps myapp-demo 
 kubectl get pods -w   //查看滚动更新的过程

(5)扩容及缩容

扩容,从小到大依次有序创建

缩容,从大到小依次删除

当删除一个 StatefulSet 时,该 StatefulSet 不提供任何终止 Pod 的保证。为了实现 StatefulSet 中的 Pod 可以有序且体面地终止,可以在删除之前将 StatefulSet 缩容到 0。

先将 StatefulSet 缩容到 0

然后删除一个 StatefulSet

3.DaemonSet 控制器

(1)创建资源清单

master因为有污点所以无法创建,如果创建需要设置容忍

(2)生成资源并查看

daemonset没有副本的概念,它会在每个节点创建pod

删除,减少资源占用

4.Job 控制器

(1) 创建资源清单

(2)生成资源

(3)查看

10s后容器正常退出

查看详细信息

查看日志

(4)修改为非正常退出

直接生成会报错,需要先删除

因为backoffLimit设置了4次重启,加上创建的一次,一共五次

查看

查看详细信息

重启了4次,叨叨了设置backofflimit的次数,不再重启

删除,减少资源占用

5.CronJob 控制器

(1)创建资源清单

(2)生成资源

(3)查看信息

(4)查看日志,每隔一分钟生成一次

(5)删除,减少资源占用

三、问题

1. showmount -e 报错

(1)报错

(2)原因分析

服务器防火墙导致

(3)解决方法

关闭安全机制

#永久关闭,需要重启后生效
[root@stor01 k8s]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#临时关闭
[root@stor01 k8s]# systemctl stop firewalld
[root@stor01 k8s]# setenforce 0
setenforce: SELinux is disabled

[root@stor01 k8s]# getenforce
Disabled

#在服务器上先停止rpcbind,
systemctl stop rpcbind

#然后在停止nfs
systemctl stop nfs

#最后在重启rpcbind和nfs,一定要按顺序启动和停止
systemctl start rpcbind
systemctl start nfs

成功:

2.主机重启后pod报错Error

(1)报错

(2)原因分析

显示NFS挂载失败

(3)解决方法

重启rpcbind和nfs,一定要按顺序启动和停止

然后删除pod,重新生成资源

测试数据是否挂载NFS成功

NFS查看,显示test2文件

四、总结

常规service和无头服务区别:

service:一组Pod访问策略,提供cluster-IP群集之间通讯,还提供负载均衡和服务发现。
Headless service:无头服务,不需要cluster-IP,而是直接以DNS记录的方式解析出被代理Pod的IP地址。

注意:使用普通的 service 也可以解析出被代理Pod的IP地址

job的重启策略要么 Never , 要么 OnFailure ,绝对不能为 Always
 

常用控制器:

1 Deployment
1)部署无状态应用
2)创建和管理 ReplicaSet 和 Pod 资源,并维护Pod副本数量与期望值相同
3)创建和删除Pod是并行执行的,升级策略默认为滚动更新的方式

2 StatefulSet
1)部署有状态应用
2)每个Pod的名称都是唯一且固定不变的
3)每个Pod都可以有自己专属的持久化存储(基于PVC模板volumeClaimTemplates绑定PV实现的)
4)需要提前创建并关联一个Headless Service资源(ClusterIP可以为None),在K8S集群内部的Pod应用可以通过 <pod_name>.<svc_name>.<namespace_name>.svc.cluster.local 格式解析出 PodIP(基于无头服务Headless Service和CoreDNS实现的)
5)创建、滚动升级、扩容、缩容Pod都是有序进行的(默认为串行执行的,podManagementPolicy: OrderedReady(默认)|Parallel)
创建、扩容是升序执行的(顺序为Pod标识号从0到n-1)
滚动升级、缩容是倒序执行的(顺序为Pod标识号从n-1到0)

Service资源的类型 4+1
ClusterIP NodePort LoadBalancer ExternalName + Headless Service

3 DaemonSet
1)理论上可以在K8S所有Node节点上创建相同的Pod资源(无论Node节点什么时候加入到K8S集群)
2)调度时会受到Node节点上的污点或者节点设置了cordon不可调度的影响,而不会在上述的Node节点中创建Pod
设置容忍 kubectl node xxx uncordon
3)资源清单配置中不需要设置副本数 replicas

4 Job
1)部署一次性短期任务的资源,Pod不会持久运行
2)任务正常完成后Pod容器会正常退出并不会再重启(restartPolicy通常设置为Nerver或OnFailure),且也不会重建Pod
3)如果任务执行异常导致Pod容器异常退出,会重建Pod重试任务,重试次数受 backoffLimit 配置影响(默认为任务失败后重试 6 次)

5 CronJob
1)部署周期性短期任务的资源,Pod不会持久运行
2)任务正常完成后Pod容器会正常退出并不会再重启(restartPolicy通常设置为Nerver或OnFailure),且也不会重建Pod
3)使用必配字段 schedule 设置任务执行的周期表,格式为 分 时 日 月 周

volumeClaimTemplate:

当在使用statefulset创建pod时,会自动生成一个PVC,从而请求绑定一个PV,从而有自己专用的存储卷。

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

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

相关文章

macOS 下 Termius 中文显示为乱码

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

云原生微服务 第五章 Spring Cloud Netflix Eureka集成负载均衡组件Ribbon

系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第四章 Spring Cloud Netflix 之 Ribbon 文章目录 系列文章目录[TOC](文章目录) 前言1、负载均衡1.1、服务端负载均衡1.2、…

pcl--第十一节 点云外接立方体和点云模板匹配

点云外接立方体&#xff08;3D物体包容盒&#xff09; 使用pcl::MomentOfInertiaEstimation类来获取基于偏心率和惯性矩的描述符。该类还允许提取云的轴对齐和定向的边界框。但是提取的OBB并非最小可能的边界框。 原理简述 包围体&#xff08;包容盒&#xff09;是一个简单的…

编写第一个Go程序

编写第一个Go程序 1. 开发环境构建 在Go语言中&#xff0c;开发环境的构建需要设置GOPATH环境变量。在1.8版本之前&#xff0c;必须显式设置GOPATH环境变量。而在1.8版本及之后&#xff0c;如果没有设置GOPATH&#xff0c;Go将使用默认值。 在Unix系统上&#xff0c;默认值为…

【AI视野·今日NLP 自然语言处理论文速览 第三十七期】Thu, 21 Sep 2023

AI视野今日CS.NLP 自然语言处理论文速览 Thu, 21 Sep 2023 Totally 57 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Chain-of-Verification Reduces Hallucination in Large Language Models Authors Shehzaad Dhuliawala, Mojt…

Linux学习记录——이십구 网络基础(2)

文章目录 1、理解网络间通信2、理解协议3、网络字节序4、socket编程接口和sockaddr结构 1、理解网络间通信 宏观上&#xff0c;是主机与主机在发送接收消息&#xff0c;但主机怎么去发送消息&#xff1f;主机间的通信是通过进程完成的&#xff0c;这个进程就是用户发起的进程&…

《深度学习工业缺陷检测》专栏介绍 CSDN独家改进实战

&#x1f4a1;&#x1f4a1;&#x1f4a1;深度学习工业缺陷检测 1&#xff09;提供工业小缺陷检测性能提升方案&#xff0c;满足部署条件&#xff1b; 2&#xff09;针对缺陷样品少等难点&#xff0c;引入无监督检测&#xff1b; 3&#xff09;深度学习 C、C#部署方案&#…

我写过的最蠢的代码

提起这个话题&#xff0c;感慨万千啊。要说最蠢&#xff0c;应该是一个新年庆贺网站。 当时&#xff0c;一个朋友借给我了一个域名。 我当时&#xff0c;还怎么会写代码&#xff0c;刚大一。看到域名都是和网站挂钩的&#xff0c;我就想写一个网站。 后来新年到了&#xff0…

C++之vector::insert与vector::insert应用总结(二百二十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

七天学会C语言-第七天(结构体)

1.定义结构体 例 1&#xff1a;把一个学生的信息(包括学号、姓名、性别、住址等 4 项信息) 放在一个结构体变量中&#xff0c;然后输出这个学生的信息。 #include <stdio.h>struct Student {int student_id;char name[30];char gender;char address[60]; };int main() …

Vue脚手架一站式搭建项目

一、什么是vue-cli 1.1如果你只是简单写几个Vue的Demo程序&#xff0c;那么你不需要VueCLI脚手架。 1.2.如果你在开发大型项目&#xff0c;那么你需要&#xff0c;并且必然需要使用VueCLI。 1.2.1使用Vue.js开发大型应用时&#xff0c;我们需要考虑代码目录结构、项目结构和…

【2023研电赛】华东赛区一等奖:基于EtherCAT通信有限时间位置收敛伺服系统

本文为2023年第十八届中国研究生电子设计竞赛作品分享&#xff0c;参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&#xff01;&#xff0c;分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&#xff01; 基于…

MQ - 22 Kafka集群架构设计与实现

文章目录 导图概述数据可靠性副本拉取 Leader 数据动态维护可用副本集合控制 Leader 切换和数据截断安全控制可观测性总结导图 概述 MQ - 15 集群篇_如何构建分布式的消息队列集群(下)说了基于 ZooKeeper 和 KRaft 来构建集群的两种方式,在这里就不再重复。 这里我们详细分…

【GIS】地理坐标系WGS84、GCJ-02、BD-09、GCS2000

地理坐标系又可分为 参心坐标系 和 地心坐标系&#xff0c;常见的参心坐标系北京54、西安80&#xff0c;常见的地心坐标系有WGS84、GCJ-02、BD-09、GCS2000 地心坐标系 WGS84&#xff08;World Geodetic System 1984&#xff09; WGS84是为 GPS 全球定位系统建立的坐标系统&…

工作流 Flowable 的使用

一、BPMN 业务流程建模与标注 通过 Status&#xff08;状态&#xff09; 字段维护流程状态&#xff0c;流程负责的审批人可能也是 Hard Code&#xff08;硬编码&#xff09;会出现以下问题&#xff1a; 1.流程健壮性差&#xff0c;但凡出现人员变动&#xff0c;或者组织结构调…

数据结构与算法(六)--链表的遍历,查询和修改,删除操作

一、前言 上篇文章我们了解了链表的概念以及链表底层的搭建以及向链表中添加元素的操作。本次我们继续学习链表剩余的操作&#xff1a;遍历&#xff0c;查询和修改、删除操作。 二、链表查询以及遍历 ①获得链表的第index(0-based)个位置的元素&#xff08;不常用&#xff0…

微信定时发圈、跟圈是怎么操作的?

对于私域运营来说&#xff0c;手上都会有几个微信账号需要管理运营&#xff0c;每天需发圈、评论等操作都已经占据大量的时间了&#xff0c;更别说分配时间去做其他的功能做了。 自从用了微信管理工具&#xff0c;提高了运营的工作效率、而且操作非常地简单&#xff0c;还不用…

梯形加减速点动功能块(博途SCL)

梯形速度曲线相关算法介绍,请查看下面博客文章,这里不再赘述,受水平和能力所限文中难免出现错误和不足之处,欢迎大家批评指正,同时感谢大家订阅。 SMART PLC斜坡函数 SMART PLC斜坡函数功能块(梯形图代码)_RXXW_Dor的博客-CSDN博客斜坡函数Ramp的具体应用可以参看下面…

AI人体行为分析:玩手机/打电话/摔倒/攀爬/扭打检测及TSINGSEE场景解决方案

一、AI人体行为分析技术概述及场景 人体姿态分析/行为分析/动作识别AI算法&#xff0c;是一种利用人工智能技术对人体行为进行检测、跟踪和分析的方法。通过计算机视觉、深度学习和模式识别等技术&#xff0c;可以实现对人体姿态、动作和行为的自动化识别与分析。 在场景应用…

小米笔试题——01背包问题变种

这段代码的主要思路是使用动态规划来构建一个二维数组 dp&#xff0c;其中 dp[i][j] 表示前 i 个产品是否可以组合出金额 j。通过遍历产品列表和可能的目标金额&#xff0c;不断更新 dp 数组中的值&#xff0c;最终返回 dp[N][M] 来判断是否可以组合出目标金额 M。如果 dp[N][M…