美文网首页
Pod控制器

Pod控制器

作者: 麟之趾a | 来源:发表于2020-09-01 11:35 被阅读0次

Pod控制器

control plane (Master)
API server: gateway,restful风格的api,是我们把所有资源抽象为对象
Resources-objects
API server为所有能存取得资源,规定了一个范式

etcd
 controller: kube-controller-manager
 live Objects
 Recondilation
确保对象中status的状态要和spec的状态一致。status是实际状态,spec是用户期望的状态
Pods -> object
Replicaset -> object(ngx-rs,myapp-rs,....)
Control Loop:周期性运行,其后面一定有个守护进程

其中控制器有多种类型,就需要运行很多不同类型守护进程,管理不方便
kube-controller-manager:就是很把多种不同类型控制器代码,打包成一份,统一运行一个守护进程
kube-controller-manager 手动运行为守护进程,可以使用选项--controllers 选项用于指定要启动的控制器,如果不指定默认启用,就为所有控制器
foo: 启用名字为foo的控制器
-foo: 禁用foo类型的控制器
默认启用的控制器类型中不包含bootstrapsigner和tokencleaner
使用kubeadm部署的k8s,中pod的资源清单所在位置/etc/kubernetes/manifests/,改完资源清单,k8s自动更新pod
Pod controllers 早期版本为 ReplicationController
现在划分为多种类型:因为现在运行在k8s上的进程的运行方式各不相同
守护进程:
无状态:
非系统级 Deployment/Replicaset(deployment的前身)
系统级:Daemoset
有状态(包括服务注册中心): statefulSet
非守护进程:
Job
CronJob

ReplicaSet

主要控制无状态,守护进程的类型,在给定时间运行一定数量的Pod
ReplicaSet 需要的东西
Pod Template 创建Pod使用
Pod Selector 用来识别当前创建了几个Pod
Replicas 用户期待定义了几个Pod
kubectl explain rs
kubectl get rs (rs是replication 的简写)
kubectl explain rs.spec.selector
kubectl explain rs.spec.template //Pod不应该定义名字,由控制器赋值
kubectl describe rs myapp-rs
删除Pod
1、删除控制器
修改replicas数量
1、资源申请单中修改,重新apply
kubectl scale -h 修改
kubectl scale --replicas=2 deploy ngx-dep
如果需要变更版本
1、通过修改资源申请单中的镜像版本
2、通过kubectl scale 修改
注意:原先存在的Pod不会变更,只有新建Pod才会变更。即我们可以删除原先Pod,其中我们需要手动更新Pod
Deployment 会帮助我们自动完成更新策略
deployment --> Replica sets --> pods
由Deployment控制Replicasets
Deployment 会管理整个rs的历史(即所有版本,用户回滚)
deployment自定义一次加减几个
kubectl explain deployment.spec.strategy.rollingUpdate pod的更新策略

image.png

maxSurge: 即Pod在升级的时候,同时运行的Pod最多是多少
maxUnavailable: 即Pod在升级的时候,同时运行的Pod最少是多少
kubectl set image -h
kubectl set image deploy ngx-dep nginx=nginx:apline //更新ngx-dep控制器的nginx的镜像
其中maxSurge默认是pod数量的25%,maxUnavailable默认为pod数量的25%
kubectl rollout -h
kubectl roullout history deploy ngx-dep //查看回滚记录
kubectl rollout undo deploy/ngx-dep //进行回滚
金丝雀发布
kubectl set image deploy ngx-dep nginx=nginx:1.15:alpine && kubectl rollout pause deploy/ngx-dep
如果没有问题,继续滚动
kubectl rollout resum deploy/ngx-dep

DaemonSets

只需定义Pod模板和标签选择器,每个Node节点运行一个Pod
节点选择器:告诉我们控制器,只调度哪些节点上运行Pod
master 上不能创建Pod,因为master上有污点
kubectl explain ds.spec.updateStrategy //更新版本

[root@k8s-master basic]# cat ds-filebeat.yaml 
apiVersion: apps/v1
kind: DaemonSet
metadata:
 name: filebeat-ds
 labels:
   app: filebeat
spec:
 selector:
   matchLabels:
     app: filebeat
 template:
  metadata:
    labels:
      app: filebeat
  spec:
    containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        env:
        - name: REDIS_HOME
          value: db.ikubernetes.io:6379
        - name: LOG_LEVEL
          value: info

kubectl set image ds/filebeat-ds myapp=ikubernets/myapp:v2 //版本更新
kubectl get nodes --show-labels 显示标签

pod运行在指定node上

kubectl explain pods.spec.nodeSelector

cat pod-node.yaml 
apiVersion: v1
kind: Pod
metadata:
 name: pod-daemon
 namespace: default
spec:
 nodeSelector:
   logcollecting: test
 containers:
   - name: myapp
     image: ikubernetes/myapp:v1
     imagePullPolicy: IfNotPresent

kubectl label node k8s-node-01 logcollecting="test"

Job Controller

由于一次性作业,周期性运行(用于创建一个Pod,这个Pod能够完成任务,即可)

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cronjob-example
  labels:
    app: mycronjob
spec:
  schedule: "*/2 * * * *"
  jobTemplate:
    metadata:
      labels:
        app: mycronjob-jobs
    spec:
      parallelism: 2
      template:
        spec:
          containers:
          - name: myjob
            image: alpine
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster; sleep 10
          restartPolicy: OnFailure

此控制器的Pod重启策略
restartPolicy: OnFailure  如果Pod非正常退出,就进行重启
Nerver:如果Pod非正常退出,就重建
kubectl get job 

Garbage Collection

GC 垃圾回收
Pod终止时,需要回收,每个对象的metadata中都有OwnerRerences指定字段进行回收,一般自动设置也可以手动设置。
删除方式: 级联删除(删除一个资源下所有关联资源)有前台删除和后台删除(默认)

节点状态

kubectl explain node.status
address: HostName,ExternalIP,InternalIP
Condition: 节点处于什么状态,比如磁盘满了,内存耗尽了
capacity: 对应节点的容量,一共有多少cpu,多少内存,容纳了多少个Pod

相关文章

  • kubernetes Pod控制器及其功用

    Pod控制器及其功用 Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障...

  • pod学习1

    控制器管理的 Pod: 生产环境中可以用控制器创建和管理多个 pod。控制器在 pod 失败的情况下可以处理副本、...

  • Kubernetes 学习笔记(四)--- K8S Pod控制器

    目录 一、Pod控制器类别 1.1 ReplicaSet ReplicaSet控制器用来管理无状态的Pod资源,核...

  • k8s 控制器

    什么是控制器? k8s内拥有许多的控制器类型,用来控制pod的状态、行为、副本数量等等,控制器通过pod的标签来控...

  • Kubernetes——Pod控制器详解

    Pod控制器介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将...

  • kubernetes(八) Pod 控制器详解

    Pod控制器介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将...

  • Pod控制器详解

    Pod控制器介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将...

  • k8s-实战入门-Pod控制器详解(十六)

    Pod控制器介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将...

  • K8S快速入门(一)

    Kubernetes快速入门 一、四组基本概念: * Pod/Pod 控制器 * Name/Name...

  • Kubernetes-Pod控制器详解

    1.Pod控制器介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可...

网友评论

      本文标题:Pod控制器

      本文链接:https://www.haomeiwen.com/subject/zxopsktx.html