linux怎么查看本机内存大小
320
2022-11-10
k8s中的pod控制器之Deployment、DaemonSet、StatefulSet
pod控制器分类:1、ReplicationController2、ReplicaSet3、Deployment4、StatefulSet5、DaemonSet6、Job,Cronjob7、HPApod控制器:一般包括3部分1、标签选择器2、期望的副本数(DaemonSet控制器不需要)3、pod模板deploy控制器构建于rs控制器之上,新特性包括:1、事件和状态查看2、回滚3、版本记录4、暂停和启动5、支持两种自动更新方案Recreate删除重建RollingUpdate回滚升级(默认方式)
创建deploy$ kubectl run --help$ kubectl run nginx --image=nginx --port=80 --replicas=2 #用命令直接创建$ kubectl run nginx --image=nginx --port=80 --dry-run -o yaml
apiVersion: apps/v1 kind: Deployment metadata: labels: run: nginx name: nginx spec: replicas: 1 selector: matchLabels: run: nginx template: metadata: labels: run: nginx spec: containers: - image: nginx name: nginx ports: - containerPort: 80
创建deploy控制器时会自动创建rs控制器,二者具有相同的标签选择器$ kubectl get deploynginx 1/1 1 1 7s$ kubectl get rs
修改pod副本数的方式1、kubectl edit deploy nginx2、kubectl scale deploy nginx --replicas=53、修改yaml文件
升级pod镜像的方法:1、直接修改yaml2、kubectl edit deploy nginx3、kubectl set image deploy/nginx nginx=nginx:1.9 --record #升级并记录,可实现回滚,推荐使用该方法
滚动升级是deployment pod升级时的默认策略,也可以修改默认值用命令kubectl edit deploy nginx可以查看默认值
replicas: 3 selector: matchLabels: run: nginx minReadySeconds: 5 #默认看不到,需要手工添加 strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate
默认情况下,当6个pod副本需要升级时:Kubernetes 将终止1个实例(625%=1.5个实例,向下舍去=1),创建3个新实例(625%=1.5个实例,向上舍入=2,加1个实例来弥补1个终止实例=3个实例),此时总共运行8个副本。一旦新的pod就绪,它将从旧的副本集中终止另外2个实例,以便将部署恢复到所需的副本数,然后重复这个过程,直到部署完成为止。minReadySeconds:Kubernetes在等待设置的时间后才进行升级maxSurge:升级过程中最多可以比原先设置多出的POD数量maxUnavaible:升级过程中最多有多少个POD处于无法提供服务的状态
滚动升级相关命令$ kubectl set image deploy/nginx nginx=nginx:1.7.9 --record$ kubectl set image deploy/nginx nginx=nginx --record$ kubectl rollout status deploy nginx #查看升级状态$ kubectl rollout pause deployment nginx #升级暂停$ kubectl rollout resume deployment nginx #恢复升级$ kubectl describe deploy nginx #查看升级详情$ kubectl rollout history deploy/nginx #查看升级历史deployment.extensions/nginx REVISION CHANGE-CAUSE4 kubectl set image deploy/nginx nginx=nginx:1.7.9 --record=true5 kubectl set image deploy/nginx nginx=nginx --record=true$ kubectl rollout history deployment nginx --revision=5$ kubectl rollout undo deployment/nginx --to-revision=4 #回滚到指定版本$ kubectl rollout undo deployment nginx-deploy #回滚到前一个版本
显式指定滚动升级参数
apiVersion: apps/v1 kind: Deployment metadata: labels: run: nginx name: nginx spec: replicas: 1 selector: matchLabels: run: nginx minReadySeconds: 5 strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 type: RollingUpdate template: metadata: labels: run: nginx spec: containers: - image: nginx name: nginx ports: - containerPort: 80
DaemonSet用于在每个Kubernetes节点中将守护进程的副本作为后台进程运行,说白了就是在每个节点部署一个Pod副本,当节点加入到Kubernetes集群中,Pod会被自动调度到该节点上运行。每个节点有一个ds pod,新加入的节点也会自动生成一个ds podds pod不受调度策略控制使用DaemonSe场景:1、集群存储守护程序,如glusterd、ceph要部署在每个节点上以提供持久性存储;2、节点监视守护进程,如Prometheus监控集群,可以在每个节点上运行一个node-exporter进程来收集监控节点的信息;3、日志收集守护程序,如fluentd或logstash,在每个节点上运行以收集容器的日志示例:
kind: DaemonSet apiVersion: extensions/v1beta1 metadata: name: nginx-ds labels: k8s-app: nginx spec: template: metadata: labels: k8s-app: nginx spec: containers: - image: nginx:1.7.9 name: nginx ports: - name: http containerPort: 80
无状态服务(Stateless Service):所有pod只需要共享一个持久存储,并不需要每个pod一个持久存储,并且多个实例对于同一个请求响应的结果是完全一致的有状态服务(Stateful Service):每个pod都需要一个独立的持久存储,对于这种类型的资源,我们一般是通过创建一个Headless Service类型的服务来暴露服务,将clusterIP设置为None就是一个无头的服务。1、有状态服务一般使用pvc模板和存储类为每个pod自动生成一对pv和pvc来实现持久化存储。2、也可以手动创建pv,然后和利用StatefulSet中的volumeClaimTemplates自动生成的pvc进行配对。
手动创建pv用于StatefulSet1、创建两个pv
apiVersion: v1 kind: PersistentVolume metadata: name: pv001 #第二个是pv002 labels: release: stable spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle hostPath: path: /tmp/data
2、先创建无头服务
apiVersion: v1 kind: Service metadata: name: nginx spec: ports: - port: 80 name: web clusterIP: None selector: app: nginx role: stateful
3、创建StatefulSet pod使用pv
apiVersion: apps/v1beta1 kind: StatefulSet metadata: name: web spec: serviceName: "nginx" #使用上面创建的无头服务 replicas: 2 template: metadata: labels: app: nginx role: stateful spec: containers: - name: nginx image: cnych/nginx-slim:0.8 ports: - containerPort: 80 name: web volumeMounts: - name: www mountPath: /usr/share/nginx/html volumeClaimTemplates: - metadata: name: www spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi
volumeClaimTemplates会根据其对应的pv自动生成pvc并自动配对,数量由replicas: 2决定。
使用pvc模板和存储类自动生成pv和pvc1、创建存储类
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: course-nfs-storage provisioner: fuseim.pri/ifs
2、先创建无头服务
apiVersion: v1 kind: Service metadata: name: nfs-web spec: ports: - port: 80 name: web clusterIP: None selector: app: nginx role: stateful
3、使用存储类创建StatefulSet pod
apiVersion: apps/v1beta1 kind: StatefulSet metadata: name: nfs-web spec: serviceName: "nfs-web" #使用上面创建的无头服务 replicas: 2 template: metadata: labels: app: nfs-web spec: terminationGracePeriodSeconds: 10 containers: - name: nginx image: nginx ports: - containerPort: 80 name: web volumeMounts: - name: www mountPath: /usr/share/nginx/html volumeClaimTemplates: - metadata: name: www annotations: volume.beta.kubernetes.io/storage-class: course-nfs-storage spec: accessModes: [ "ReadWriteOnce" ] #storageClassName: course-nfs-storage 使用存储类 resources: requests: storage: 1Gi
会自动生成两对pv和pvc
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~