• kubernetes入门(07)kubernetes的核心概念(4)


    一、pod

    二、Volume

    volume可以为容器提供持久化存储,比如

    三、私有镜像

    在使用私有镜像时,需要创建一个docker registry secret,并在容器中引用。
    创建docker registry secret:

    四、RestartPoliy

    支持三种RestartPolicy

    • Always:只要退出就重启
    • OnFailure:失败退出(exit code不等于0)时重启
    • Never:只要退出就不再重启

    注意,这里的重启是指在Pod所在Node上面本地重启,并不会调度到其他Node上去。

    五、环境变量

    环境变量为容器提供了一些重要的资源,包括容器和Pod的基本信息以及集群中服务的
    信息等:
    (1) hostname
    HOSTNAME 环境变量保存了该Pod的hostname。
    (2)容器和Pod的基本信息
    Pod的名字、命名空间、IP以及容器的计算资源限制等可以以Downward API的方式获取
    并存储到环境变量中。

    (3) 集群中服务的信息
    容器的环境变量中还包括了容器运行前创建的所有服务的信息,比如默认的kubernetes
    服务对应了环境变量

    • KUBERNETES_PORT_443_TCP_ADDR=10.0.0.1
    • KUBERNETES_SERVICE_HOST=10.0.0.1
    • KUBERNETES_SERVICE_PORT=443
    • KUBERNETES_SERVICE_PORT_HTTPS=443
    • KUBERNETES_PORT=tcp://10.0.0.1:443
    • KUBERNETES_PORT_443_TCP=tcp://10.0.0.1:443
    • KUBERNETES_PORT_443_TCP_PROTO=tcp
    • KUBERNETES_PORT_443_TCP_PORT=443

    由于环境变量存在创建顺序的局限性(环境变量中不包含后来创建的服务),推荐使
    用DNS来解析服务。

    六、ImagePullPolicy

    支持三种ImagePullPolicy

    • Always:不管镜像是否存在都会进行一次拉取。
    • Never:不管镜像是否存在都不会进行拉取
    • IfNotPresent:只有镜像不存在时,才会进行镜像拉取。

    注意:

    • 默认为 IfNotPresent ,但 :latest 标签的镜像默认为 Always 。
    • 拉取镜像时docker会进行校验,如果镜像中的MD5码没有变,则不会拉取镜像数据。
    • 生产环境中应该尽量避免使用:latest 标签,而开发环境中可以借助 :latest 标签自动拉取最新的镜像。

    七、访问DNS的策略

    通过设置dnsPolicy参数,设置Pod中容器访问DNS的策略
    -ClusterFirst:优先基于cluster domaim 后缀,通过kube-dns查询 -Default:优先从kubelet中配置的DNS查询

    注意:默认配置的dnsPolicy是ClusterFirst

    1、使用主机的IPC命名空间

    通过设置hostIPC参数True,使用主机的IPC命名空间,默认为False

    2、使用主机的网络命名空间

    通过设置hostNetwork参数True,使用主机的网络命名空间,默认为False

    3、使用主机的PID空间

    通过设置hostPID参数True,使用主机的PID命名空间,默认为False

    4、设置Pod中的hostname

    通过hostname参数实现,如果未设置默认使用PodName作为Pod的hostname

    5、设置Pod的子域名

    通过subdomain参数设置Pod的子域名,默认为空

    指定hostname为busybox-2和subdomain为default-subdomain,完整域名

    为 busybox-2.default-subdomain.default.svc.cluster.local :

    八、资源限制

    Kubernetes通过cgroups限制容器的CPU和内存等计算资源,包括requests(请求,调度器保证调度到资源充足的Node上)和limits(上限)等:

    • spec.containers[].resources.limits.cpu :CPU上限,可以短暂超过,容器也不会被停止
    • spec.containers[].resources.limits.memory :内存上限,不可以超过;如果超过,容器可能会被停止或调度到其他资源充足的机器上
    • spec.containers[].resources.requests.cpu :CPU请求,可以超过
    • spec.containers[].resources.requests.memory :内存请求,可以超过;但如果超过,容器可能会在Node内存不足时清理

    比如nginx容器请求30%的CPU和56MB的内存,但限制最多只用50%的CPU和128MB的内存:

    注意,CPU的单位是milicpu,500mcpu=0.5cpu;而内存的单位则包括E, P, T, G, M, K,Ei, Pi, Ti, Gi, Mi, Ki等。 

    九、健康检查

    为了确保容器在部署后确实处在正常运行状态,Kubernetes提供了两种探针(Probe,支持exec、tcp和httpGet方式)来探测容器的状态:

    • LivenessProbe:探测应用是否处于健康状态,如果不健康则删除重建改容器
    • ReadinessProbe:探测应用是否启动完成并且处于正常服务状态,如果不正常则更新容器的状态

    十、Init Container

    Init Container在所有容器运行之前执行(run-to-completion),常用来初始化配置。

    十一、容器生命周期钩子

    容器生命周期钩子(Container Lifecycle Hooks)监听容器生命周期的特定事件,并在
    事件发生时执行已注册的回调函数。支持两种钩子:

    • postStart: 容器启动后执行,注意由于是异步执行,它无法保证一定在ENTRYPOINT之后运行。如果失败,容器会被杀死,并根据RestartPolicy决定是否重启
    • preStop:容器停止前执行,常用于资源清理。如果失败,容器同样也会被杀死

    而钩子的回调函数支持两种方式:

    • exec:在容器内执行命令
    • httpGet:向指定URL发起GET请求

    postStart和preStop钩子示例:

    十二、使用Capabilities

    默认情况下,容器都是以非特权容器的方式运行。比如,不能在容器中创建虚拟网卡、配置虚拟网络。

    Kubernetes提供了修改Capabilities的机制,可以按需要给给容器增加或删除。

    比如下面的配置给容器增加了 CAP_NET_ADMIN 并删除了 CAP_KILL 。

    十三、限制网络带宽

    可以通过给Pod增加 kubernetes.io/ingressbandwidth和 kubernetes.io/egress-bandwidth 这两个annotation来限制Pod的网络带宽

    目前只有kubenet网络插件支持限制网络带宽,其他CNI网络插件暂不支持这个功能。

    kubenet的网络带宽限制其实是通过tc来实现的

    十四、调度到指定的Node上

    可以通过nodeSelector、nodeAffinity、podAffinity以及Taints和tolerations等来将Pod调
    度到需要的Node上。
    也可以通过设置nodeName参数,将Pod调度到制定node节点上。
    比如,使用nodeSelector,首先给Node加上标签:
    kubectl label nodes <your-node-name> disktype=ssd
    接着,指定该Pod只想运行在带有 disktype=ssd 标签的Node上:

    十五、自定义hosts

    默认情况下,容器的 /etc/hosts 是kubelet自动生成的,并且仅包含localhost和podName等。不建议在容器内直接修改 /etc/hosts 文件,因为在Pod启动或重启时会被覆盖。
    默认的 /etc/hosts 文件格式如下,其中 nginx-4217019353-fb2c5 是podName:

    从v1.7开始,可以通过 pod.Spec.HostAliases 来增加hosts内容,如

  • 相关阅读:
    js数组删除数组元素!
    ASP.NET安全问题--ASP.NET安全架构
    片滚动插件myScroll
    JS 回车提交,兼容IE、火狐、Opera、Chrome、Safari
    poj_2386_dfs
    poj_1852_Ants(复杂问题简单化)
    File Mapping
    Creating a File View
    next_permutation
    Creating a File Mapping Object
  • 原文地址:https://www.cnblogs.com/lexiaofei/p/7787470.html
Copyright © 2020-2023  润新知