zoukankan      html  css  js  c++  java
  • 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  查询replicaset控制器类下的控制器

    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

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

    kubectl delete pod myapp-k2kqx

    重新创建的pod就用升级版本了

    kubectl delete rs myapp  删除replicaset类下的myapp控制器和pod

    Deploy

     基于在replicaset之上的更新逻辑,更新策略

    kubectl explain deploy

    kubectl explain deploy.spec 与replicaset相近

    revisionHistoryLimit         <integer>  保留多少个历史版本 既保留多少个上个版本

    kubectl explain deploy.spec.strategy  更新策略

    kubectl explain deploy.spec.strategy.rollingUpdate 滚动更新

    kubectl explain deploy.spec.template   创建pod模板

    实例:

    vim deploy-demo.yaml

    apiVersion: apps/v1

    kind: Deployment

    metadata:

      name: myapp-deploy

      namespace: default

    spec:

      replicas: 2

      selector:

        matchLabels:

          app: myapp

          release: canary

      template:

        metadata:

          labels:

            app: myapp

            release: canary

        spec:

          containers:

          - name: myapp

            image: ikubernetes/myapp:v1

            ports:

            - name: http

              containerPort: 80

    kubectl apply -f deploy-demo.yaml  apply:声明式创建,即可以创建,也可以更新

    kubectl get deploy

    kubectl get pods -o wide

    kubectl get rs  同时也创建了replicaset控制器

    deploy更新运用

    vim deploy-demo.yaml

    修改:replicas: 3

    重新声明,即可以修改完成

    kubectl apply -f deploy-demo.yaml

    kubectl get pods

    kubectl describe deploy myapp 查看deploy下的myapp控制器详细描述信息默认rollingupdate 滚动更新

    滚动更新

    kubectl get pods -l app=myapp –w 监控滚动更新

    vim deploy-demo.yaml

    修改image: ikubernetes/myapp:v2

    kubectl apply -f deploy-demo.yaml  就可以看到滚动更新,默认25%

    kubectl get rs -o wide 可以看到创建了新的replicaset,旧的replicaset保留用于回滚

    kubectl rollout history deploy myapp-deploy 查看滚动历史

    打补丁扩容

    kubectl patch  --help

    kubectl patch deployment myapp-deploy -p '{"spec":{"replicas":5}}'

                 控制器类  控制器名  参数  yaml文件下对应

    kubectl get pods 验证

    pause更新几个之后暂停更新

    kubectl explain deploy.spec.strategy.rollingUpdate

    kubectl patch deploy myapp-deploy -p

    '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}'

                        滚动       最多多余几个可用  最少少于几个不可用

    kubectl describe deploy my-app  查看补丁结果

    启动更新版本

    kubectl set image –help

    kubectl get pods -l app=myapp –w 先监控

    kubectl set image deployment myapp-deploy myapp=ikubernetes/myapp:v3 && kubectl

    rollout pause deploy myapp-deploy

          终止更新

    kubectl rollout resume deployment myapp-deploy  继续更新

    另一种监控方式

    kubectl rollout status deploy myapp-deploy

    kubectl get rs -o wide 将会看到3个replicaset版本

    回滚

    kubectl rollout  --help

    kubectl rollout history  deploy myapp-deploy 查看滚动的版本历史

    kubectl rollout undo deploy myapp-deploy --to-revision=1

                                         回滚到版本1

    kubectl rollout history  deploy myapp-deploy 回滚之后版本1变成版本4

    kubectl get rs -o wide 此时工作的replicaset  的是v1

    daemonset

    在整个集群的每一个节点上只运行一个指定的pod,或在指定的节点上运行一个pod,,实现系统级的管理功能,可以把节点上的某个目录作为一个存储卷,关联至pod中,让pod实现某些管理功能,支持滚动更新

    kubectl explain ds

    kubectl explain daemonset

    kubectl explain daemonset.spec

    kubectl explain pods.spec.containers  查询env容器环境变量

    kubectl explain pods.spec.containers.env

    实例

    cp deploy-demo.yaml ds-demo.yaml

    vim ds-demo.yaml

    apiVersion: apps/v1

    kind: Deployment

    metadata:

      name: redis

      namespace: default

    spec:

      replicas: 1

      selector:

        matchLabels:

          app: redis

          role: logstor

      template:

        metadata:

          labels:

            app: redis

            role: logstor

        spec:

          containers:

          - name: redis

            image: redis:4.0-alpine

            ports:

            - name: redis

              containerPort: 6379

    ---

    apiVersion: apps/v1

    kind: DaemonSet

    metadata:

      name: filebeat-ds

      namespace: default

    spec:

      selector:

        matchLabels:

          app: filebeat

          release: stable

      template:

        metadata:

          labels:

            app: filebeat

            release: stable

        spec:

          containers:

          - name: filebeat

            image: ikubernetes/filebeat:5.6.5-alpine

            env:

            - name: REDIS_HOST

              value: redis.default.svc.cluster.local #如果获取不到域名,就填redis的实际IP

            - name: REDIS_LOG_LEVEL

              value: info

    kubectl apply -f ds-demo.yaml 创建pod

    kubectl get pods 查询

    kubectl logs myapp-ds-w6dhg 查询日志

    创建服务

    kubectl expose deploy redis --port=6379

                     服务名  暴露端口               

    kubectl get service 查询服务

    kubectl exec -it redis-5c998b644f-zv7nj -- /bin/sh 验证redis发日志

    # netstat –ntl

    # nslookup redis.default.svc.cluster.local  解析地址

    解析不到就用实际IP

    kubectl get pods -o wide  找到redis  pod 的ip 10.244.1.25

    # redis-cli -h  10.244.1.25 进入redis

    #  > keys * 没有日志

    # printenv  打印环境变量

    #kill -1 重载配置文件 重载信号

    kubectl exec -it filebeat-ds-ztj2h  -- /bin/sh  进入filebeat查看filebeat服务是否启动

    # ps aux 进程存在,说明服务已经启动

    修改redis地址:        - name: REDIS_HOST

                            value: 10.244.1.25

    kubectl apply -f ds-demo.yaml

    kubectl apply -f  /tmp/kubectl-edit-t7h63.yaml 再次引用

    注:kill  -1 重载配置文件 重载信号

     滚动更新

    kubectl explain daemonset.spec.updateStrategy

    kubectl explain daemonset.spec.updateStrategy.rollingUpdate

    查看是否有默认滚动更新

    kubectl describe ds filebeat

    执行滚动更新

    kubectl get pods -o wide -l app=filebeat –w  先监控

    kubectl set image –help

    kubectl set image daemonsets filebeat-ds  filebeat=ikubernetes/filebeat:5.6.6-alpine

                    控制器类   控制器名  容器名=镜像名

    注:

    容器可以共享使用宿主机的网络名称空间,那么容器中监听的端口就是监听在宿主机上了,也就是外面网络可以直接访问容器了,(hostNetwork状态必须为true,默认是false)

    kubectl explain pods.spec.hostNetwork

  • 相关阅读:
    keras多层感知机MLP
    局域网互通
    根号和分式
    vim简单的移动光标
    vim几种常用的插入模式
    LaTeX数学模式&上下标&代码块
    LaTeX入门
    ThinkPad X220i 安装 Mac OSX
    SUSE linux ,liveUSB制作方法
    KextWizard 的使用方法;以及Kext安装的几种工具下载
  • 原文地址:https://www.cnblogs.com/leiwenbin627/p/11296275.html
Copyright © 2011-2022 走看看