zoukankan      html  css  js  c++  java
  • 6and7.Pod控制器应用进阶

    Pod控制器应用进阶:
    imagepullpolicy: 镜像获取策略
    Always,Never,IfNoPresent

    暴露端口: ports
    labels 标签可以后期添加修改。


    ============================================
    资源标签:
    key=value

    注意键值
    key 只能是字母数字下划线 _ - .等,且只能是字母或者数字开头及结尾,中间可以有下划线等,长度不能超过64个字符
    value 可以为空,只能是字母数字下划线 _ - .等,且只能是字母或者数字开头及结尾,中间可以有下划线等,长度不能超过64个字符


    查看标签:
    [root@k8s-master manifests]# kubectl get pods --show-labels

    -L 显示指定标签的值
    -l 标签过滤

    [root@k8s-master manifests]# kubectl get pods -l app,release


    [root@k8s-master manifests]# kubectl get pods -l app --show-labels
    NAME READY STATUS RESTARTS AGE LABELS
    pod-demo 1/2 CrashLoopBackOff 29 128m app=myapp,tier=frontend

    添加标签: release
    [root@k8s-master manifests]# kubectl label pods pod-demo release=canary
    pod/pod-demo labeled

    [root@k8s-master manifests]# kubectl get pods pod-demo --show-labels
    NAME READY STATUS RESTARTS AGE LABELS
    pod-demo 1/2 CrashLoopBackOff 29 130m app=myapp,release=canary,tier=frontend

    标签修改:
    [root@k8s-master manifests]# kubectl label pods pod-demo release=stable --overwrite
    pod/pod-demo labeled
    [root@k8s-master manifests]# kubectl get pods pod-demo --show-labels
    NAME READY STATUS RESTARTS AGE LABELS
    pod-demo 1/2 CrashLoopBackOff 30 133m app=myapp,release=stable,tier=frontend

    标签选择器:
    等值关系: =,==,!=
    集合关系:
    KEY in (VALUE1,VALUE2)
    KEY notin (VALUE1,VALUE2...)
    KEY
    !KEY
    许多资源支持内嵌字段定义其使用的标签选择器
    matchLabels: 直接给定键值
    matchExpressions: 基于给定的表达式来定义使用标签选择器,{key:"KEY",operator:"OPERATOR",values:[VAL1,VAL2,...]}
    操作符:
    In,NotIn: values 字段的值必须为费控列表
    Exists,NotExists: values字段的值必须为空列表;


    nodeSelector <map>
    节点标签选择器

    nodeName <string>
    指定在某个节点运行

    annotations: 资源注解
    与label不同的地方在于,他不能用于挑选资源对象,仅仅用于为对象提供“元数据”

    KEY in 查询:
    [root@k8s-master manifests]# kubectl get pods -l "release in (stable,beta)"
    NAME READY STATUS RESTARTS AGE
    pod-demo 1/2 CrashLoopBackOff 31 141m

    [root@k8s-master manifests]# cat pod.yaml
    apiVersion: v1
    kind: Pod
    metadata:
    name: pod-demo
    namespace: default
    labels:
    app: myapp
    tier: frontend
    annotations:
    magedu.com/created-by: "cluster admin"
    spec:
    containers:
    - name: myapp-nginx
    image: nginx:1.14-alpine
    ports:
    - name: http
    containerPort: 80 #这里填写并不完全决定真正的暴露
    - name: https
    containerPort: 443

    ==============================

    pod生命周期:


    init container (初始化容器,可以有多个,并行进行) --》main container及辅助容器启动 --> man container stop


    主容器结束,pod也就结束
    主容器在启动之前是可以有一些操作(post start) 钩子
    主容器在结束之后是可以有一些操作(pre stop)
    在主容器运行期间可以进行,liveness probe(存活状态)检测,以及readiness probe(就绪状态检测)
    容器存活不一定能对外提供服务

    常见的pod状态:
    Pending 挂起,调度正在进行
    Running 运行
    Failed
    Successded
    Unknown

    pod生命周期中的重要行为:
    初始化容器
    容器探测
    liveness 主要用于探测容器的存活状态
    readiness 探测程序是否正常,是否能够正常提供服务



    创建pod:
    apiserver --> etcd
    --> scheduler

    pod创建过程:
    apiserver接收到用户提交的请求,然后apiserver将目标状态保存到etcd中,然后apiserver开始请求scheduler开始调度,如果调度成功则将调度的结果保存在etcd中间
    目标节点kubelet当发现etcd中保存的目标信息发生改变后会获取到客户提交的资源清单,然后目标node会根据资源清单创建pod,然后将创建的转态发送给apiserver,apiserver再将该转态存储在etcd当中


    ================================================
    restartPolicy: 容器的重启策略
    Always,OnFailure,Never,Default to Always
    Always, 一直重启,第一次是马上重启,之后会延时重启,最后是隔300s重启
    OnFailure 遇到意外突然挂掉会重启
    Never, 不重启

    删除pod,会平滑重启

    =================================================
    容器状态检测
    liveness 探针类型:
    execaction,TCPSocketaction, httpaction

    1.execaction,通过命令去检测

    cat liveness.yaml

    apiVersion: v1
    kind: Pod
    metadata:
    name: liveness-exec-pod
    namespace: default
    spec:
    containers:
    - name: liveness-exec-container
    image: busybox:latest
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh","-c","touch /tmp/healthy;sleep 30;rm -rf /tmp/healthy; sleep 3600"]
    livenessProbe:
    exec:
    command: ["test","-e","/tmp/healthy"] #判断该文件是否存在,如果存在则证明容器存活,如果不存在,则说明有问题
    initialDelaySeconds: 1 #初始化后延时1秒开始检测
    periodSeconds: 3 #每隔3秒检测一次


    当检测有问题时候,pod就会开始重启

    2. TCPSocketaction, httpaction 如果是web服务,则可以使用tcp,http探针检测

    [root@k8s-master manifests]# cat liveness.http.yaml
    apiVersion: v1
    kind: Pod
    metadata:
    name: liveness-http-pod
    namespace: default
    spec:
    containers:
    - name: liveness-http-container
    image: nginx:1.14-alpine
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
    containerPort: 80

    livenessProbe:
    httpGet:
    port: http
    path: /index.html
    initialDelaySeconds: 1
    periodSeconds: 3


    使用http检测

    readiness 就绪状态检测(这个的检测很重要,可能容器是正常运行,但是已经不能够正常提供服务了,如果没有这个检测,那么service还是会将请求发送到该pod上,这样会造成大量的请求失败)
    这个的检测方式和liveness的格式一样。 kubectl get pods这个命令执行结果中READY列即显示为readiness的检测状态。

    [root@k8s-master manifests]# cat readiness.http.yaml
    apiVersion: v1
    kind: Pod
    metadata:
    name: readiness-http-pod
    namespace: default
    spec:
    containers:
    - name: readiness-http-container
    image: nginx:1.14-alpine
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
    containerPort: 80

    readinessProbe:
    httpGet:
    port: http
    path: /index.html
    initialDelaySeconds: 1
    periodSeconds: 3

    ==================================================================











  • 相关阅读:
    【进阶3-5期】深度解析 new 原理及模拟实现(转)
    ios 手机端 input 框上方有内阴影
    手机端上点击input框软键盘出现时把input框不被覆盖,显示在屏幕中间(转)
    xampp 搭建好本地服务器以后手机无法访问
    【进阶3-4期】深度解析bind原理、使用场景及模拟实现(转)
    阿里云播放器
    flex下部固定高,上部不固定,而且超过内容要滚动
    Vue项目笔记
    jQuery实现鼠标点击div外的地方div隐藏消失的效果(转)
    android WebView详细使用方法(转)
  • 原文地址:https://www.cnblogs.com/heaven-xi/p/11312595.html
Copyright © 2011-2022 走看看