美文网首页
2021.4.22总结pod和controller

2021.4.22总结pod和controller

作者: 文茶君 | 来源:发表于2021-04-22 21:13 被阅读0次

    先随手记一下,有空再来二次总结
    命令:
    kubectl [command] [TYPE] [NAME] [flags]

    kubectl get pods --namespace=kubesphere-logging-system
    获取特定namespace的pod

    kubectl get deploy --all-namespaces
    查看所有namespaces

    kubectl create 命令生成yaml文件
    kubectl create deployment web --image=nginx -o yaml --dry-run >my1.yaml
    第二中 kubectl get命令导出yaml文件
    kubectl get deploy nginx -o=yaml --export> my2.yaml

    概念:
    Pod---k8s中创建和管理的最小单元,最小部署单元,不是容器
    k8s不会直接处理容器,Pod包含多个容器,一组容器的集合
    一个pod共享网络命名空间
    pod是短暂的(重新创建ip不一致)

    pod存在意义
    (1)创建容器使用docker,一个docker对应一个容器,一个容器有进程,一个容器运行一个应用程序(docker单进程)
    (2)pod是多进程设计,运行多个应用程序
    一个pod有多个容器,一个容器里面运行一个应用。
    (3)pod存在为了亲密性应用,
    两个应用之间进行交互,网络之间调用,两个应用需要频繁调用。

    pod的实现机制
    (1)共享网络
    容器本身之间相互隔离,namespace,group
    前提条件:容器在同一个namespace下
    pod实现共享网络机制;
    首先创建pause容器(也叫info容器、根容器)
    业务容器会加入info容器。所有业务容器在同一名称空间namespace中。info容器会独立拥有ip、mac、port
    (2)共享存储
    引入数据卷(类似docker挂载的数据卷)
    pod持久化数据(1.日志数据 2.业务数据)
    引入数据卷概念volume,使用数据卷进行持久化存储

    挂载数据卷
    volumeMounts:
    -name:data
    mountPath:/data
    定义数据卷
    volume:
    -name:data
    emptyDir:()


    pod镜像拉取策略
    apiVersion:v1
    kind:pod
    metadata:
    name:mypod
    spec:
    containers:

    • name:nginx
      image:nginx:1.14
      imagepullpolicy:Always
      imagepullpolicy有三种策略
      IfNotPresent:默认值,镜像在宿主机上不存在时才拉取
      Always:每次创建pod都会重新拉取一次镜像
      never:pod永远不会主动拉取这个镜像

    pod资源限制:
    确保pod最大合理化利用

    resource:
    request:
    memory:64Mi“”
    cpu:“250m”
    limits:
    memory:“128mi”
    cpu“500m”

    pod重启机制:
    restartPolicy:
    always:默认,退出后,总是重启onfailure:异常结束(退出状态码非0)后才重启
    never:当容器终止退出,从不重启容器

    pod健康检查
    kubectl get pods
    有时running但是不能对外提供服务(eg“java堆内存溢出”)
    应用层面检查:
    livenessprobe(存活检查)
    如果检查失败,将杀死容器,根据pod的restartPolicy来操作
    readlinessProbe(就绪检查)
    如果检查失败,kubernate会把pod从serverice endpoints中剔除

    调度策略
    kubectl get pods -o wide查看详细信息
    创建pod流程
    create pod --apiserver--etcd
    scheduler---apiserver--etcd---调度算法,把pod调度到某个node节点上
    node节点:
    kublet---apiserver--读取etcd拿到分配给当前节点pod---docker创建容器

    影响调度的属性
    1.pod资源限制
    2.节点选择器影响标签
    给节点打标签

    语法

    kubectl label nodes <node-name> <label-key>=<label-value>
    3.节点亲和性对pod影响
    节点亲和性 nodeAffinity
    1)硬亲和性
    约束条件必须满足
    2)软亲和性
    尝试满足,不保证绝对满足
    支持常用操作符
    In NotIn Gt ...
    3)反亲和性
    4.污点及污点容忍
    nodeSelector,nodeAffinity
    Taint污点:节点不做普通分配调度,是节点属性
    2.场景
    专用节点
    配置特定硬件节点
    基于taint驱逐
    查看节点污点情况
    kubectl describe node node01.k8s.org |grep Taint
    污点值有三个
    NoSchedule:一定不被调度
    PreferNoSechdule:尽量不被调度
    NoExecute:不会调度,并且还会驱逐node已有pod
    添加污点
    kubectl taint nodes node1 key=value:NoSchedule
    污点容忍:

    Controller

    实际存在的
    确保预期的pod副本数量
    无状态应用部署
    有状态应用部署
    确保所有的node运行同一个pod
    一次性任务和定时任务

    controller---在集群上管理和运行容器的对象
    pod和Controller关系
    pod通过controller实现应用的运维,比如伸缩、滚动升级等等

    pod和controller之间通过label来建立关系
    3.deployment应用场景
    部署无状态应用
    管理pod和ReplicaSet
    部署、滚动升级等功能
    应用场景:web服务、微服务

    使用deployment'部署应用(yaml)
    kubectl create deployment web --image=nginx
    第一步导出yml文件
    kubectl create deployment web --image=nginx --dry-run -o yml>web.yml
    修改yml
    kubectl apply -f web.yml
    对外发布 暴露端口号
    kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web1 -o yml>web1.yml
    kubectl apply -f web.yml
    kubectl get pods.svc
    升级回滚和弹性伸缩

    相关文章

      网友评论

          本文标题:2021.4.22总结pod和controller

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