k8s之pod控制器

Posted leiwenbin627

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s之pod控制器相关的知识,希望对你有一定的参考价值。

Pod控制器类型:

  ReplicationController  à Replicaset

Replicaset:维持用户期望的pod副本数  标签选择器:以便选定由自己选定管理的pod副本  pod资源模板:完成pod资源的新建

特点:管理无状态的pod资源,精确反映用户所定义的目标数量

K8s不建议直接使用Replicaset,而是使用Deployment

 

 

 

Deployment:工作在replicaset上,通过控制replicaset来控制pod

           Deployment具备replicaset功能,还具有滚动更新,回滚,等更多强大机制,还提供声明式配置功能,管理群体,而不关注单个节点

 

 

DaemSet:确保集群中的每一个node只运行一个特定的pod副本,实现系统级的后台任务,也具有标签选择器,也可以指定部分满足条件的node运行一个pod副本,比如监控具有ssd存储的node节点

 

以上共同的特点:pod服务无状态,pod服务必须是守护进程类的,

 

 

Job:一次性作业,任务完成,pod退出

 

 

Cronjob:周期性运行,每一次完成,pod退出

 

 

Statefulset:管理有状态的运用pod,每一个pod运用,每一个pod副本,都是单独管理,

 

 

备注:

TPR: third party resource,  1.2 ~ 1.7版本 支持第三方资源

CDR: custom defined resource ,  1.8+版本  支持自定义资源

Operator

 

 

Helm:

 

 

Pod控制详解:

replicaset

kubectl explain replicaset

kubectl explain rs

 

spec控制器规格

kubectl explain rs.spec

 

模板 既pod模板

kubectl explain rs.spec.template

 

模板规格 pod模板规格

kubectl explain rs.spec.template.spec

 

实例:定义一个replicaset控制器

vim replicaset-demo.yaml

apiVersion: apps/v1  控制器版本

kind: ReplicaSet  类型

metadata:    控制器元数据

  name: myapp  控制器name 也是创建的pod的名称

  namespace: default  控制器名称空间

spec:  控制器规格

  replicas: 2  创建2个副本

  selector:  控制器选择器

    matchLabels:  匹配

      app: myapp  选择的pod标签

      release: canary

  template:   pod模板

    metadata:  pod模板元数据

      name: myapp-pod  pod模板的pod名,实际使用选择器的name

      labels:  pod模板的pod标签

        app: myapp  pod模板pod标签名

        release: canary  

        environment: qa

    spec:  pod模板的pod的spec

      containers:

      - name: myapp-container

        image: ikubernetes/myapp:v1

        ports:

        - name: http

          containerPort: 80

 

创建replicaset选择器和pod

kubectl create -f replicaset-demo.yaml

查询验证

kubectl get rs

kubectl get replicaset

 

kubectl get pods

kubectl describe pod myapp-r65th

 

验证创建的replicaset控制器

kubectl delete pods myapp-r65th 删除一个pod,replicaset控制器会重新创建一个pod,以维持2个pod

kubectl get pods

 

 

如果pod数量大于2个

kubectl get pods --show-labels

kubectl create -f pod-demo.yaml

kubectl label pods pod-demo release=canary  这种情况pod的label标签和 myapp的一样,控制器replicaset会认为是和myapp同类型的pod,那么就会随机终止并删一个这样的pod以维持2个副本

kubectl get pods --show-labels

 

动态扩容:

kubectl edit rs myapp

kubectl edit replicaset myapp

修改replicas: 的值即可

 

动态升级:

kubectl edit rs myapp

kubectl edit replicaset myapp

kubectl edit 控制器类型 控制器名

修改- image:ikubernetes/myapp:v2即可

查询版本验证

kubectl get rs -o wide

注:只是升级镜像,容器升级需要重新建

以上是关于k8s之pod控制器的主要内容,如果未能解决你的问题,请参考以下文章

K8S 之 创建ReplicationController控制器

k8s之Deployment简介

二进制部署K8s集群进阶使用之第4节pod控制器

Kubernetes(k8s)之控制器

k8s自主式pod之应用策略规则

k8s之Pod