📓 Archive

  • Pricing
  • Chess
  • Syntax
  • SKELETON

    FGJ: Create:2022/10/14 Update: (2024-10-24)

    基础概念 #

    • 各个组件 #

      nameexplain
      APISERVER所有服务访问统一入口
      CrontrollerManager维持副本期望数目
      Scheduler负责介绍任务,选择合适的节点进行分配任务
      ETCD键值对数据库 储存K8S集群所有重要信息(持久化)
      Kubelet直接跟容器引擎交互实现容器的生命周期管理
      Kube-proxy负责写入规则至 IPTABLES、IPVS 实现服务映射访问的
      COREDNS可以为集群中的SVC创建一个域名IP的对应关系解析
      DASHBOARD给 K8S 集群提供一个 B/S 结构访问体系
      INGRESS CONTROLLER官方只能实现四层代理,INGRESS 可以实现七层代理
      FEDERATION提供一个可以跨集群中心多K8S统一管理功能
      PROMETHEUS提供K8S集群的监控能力
      ELK提供 K8S 集群日志统一分析介入平台
    • POD #

      K8S 中包装的最小单位,一个POD(容器组)中可以包含多个容器,用来表示可迁移的lamp,类似于Docker的多层镜像。同一个POD中容器可以直接共享pause共享的网络站或者挂载卷。

      • 自主式管理POD #

        POD 死亡后没办法继续启动。
      • 控制器管理的POD #

        nameexplain
        ReplicationControlelr(RC)用来确保容器应用的副本数始终保持在用户定义的副本数,如果容器有异常退出,会自动创建新的POD来代替;而异常多出来的容器也会自动回收,新版本中建议使用ReplicaSet 来替代 ReplicationController
        ReplicaSet(RS)与上一个没有本质区别,但是这个支持集合式的 selector
        Deployment虽然ReplicaSet可以独立使用,但一般还是建议使用Deployment来自动管理ReplicaSet,这样就无需担心跟其他机制的不兼容问题(比如ReplicaSet不支持 rolling-update ,但 Deployment支持)
        HorizontalPodAutoScale(HPA)也是控制RS,根据CPU使用率自动平衡扩展,收缩,可定义最大,最小副本数
        StatefulSet(SS)主要解决有状态服务问题,包括的场景有:稳定的持久化存储,稳定的网络标志,有序部署,有序收缩
        DaemonSet()可以理解为跟node绑定的一些后台运行的POD,跟随节点进行创建和删除。
        Job负责批处理任务,即仅执行一次的任务.相比于script优点有,封装在POD中可判断是否正常退出,可以重新执行。而且可以设定认为成功的次数。
        CronJob带有cron 定时任务的JOB
    • 网络通信方式 #

      扁平化的网络空间

      • 同一个POD内多个容器,采用pause 共享网络lo
      • 各个POD overlay network
        • 同一个node,Docker0 网桥进行转发
        • 不同node,flannel 插件
      • POD与service之间的通信,IPVS,iptables,

    构建K8S集群 #

    ommited

    资源清单 #

    • K8s中的资源 #

      k8s中的所有内容抽象为资源,资源实例化后叫做对象。可以通过 kubectl api-resources 查看所有资源类型

      typeexample
      名称空间级别pod, deployment, service
      集群级别role, ns, node, ClusterRole, RoleBinding,ClusterRoleBinding
      元数数据HPA, PodTemplate, LimitRange
    • 清单样例 #

      yaml 验证地址: https://codebeautify.org/yaml-validator, https://www.bejson.com/validators/yaml_editor

      apiVersion: v1
      kind: Pod
      metadata:
          name: test-pod
      spec:
      # 定义容器,可以多个
      containers: # 只要数组对象中的缩进对齐就行。不包括'-'
          - name: test-k8s # 容器名字
            image: ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1 # 镜像
      
    • 创建POD的方式 #

      # 直接命令运行
      kubectl run testapp --image=ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1
      # POD
      kubectl apply -f pod.yaml
      # Deployment
      kubectl apply -f deployment.yaml
      
    • 常用字段解释说明 #

      可以通过 kubectl explain pod, kubectl explain pod.metadata此类命令查看更详细的解释。

      nametypeexplain
      versionString这里是指K8s Api的版本,目前基本上是v1,可以用 kubectl api-versions命令查询
      kindString指yaml文件定义的资源类型和角色,比如:POD
      metadataObject元数据对象,固定值
      metadata.nameString资源名称
      metadata.namespaceString元数据对象的命名空间 ,比如 kube-system
      specObject详细定义对象规范
      spec.containers[]Listspec对象容器的列表定义
      spec.containers[].nameString定义容器的名字
      spec.containers[].imageString定义要用到的镜像名称
      spec.containers[].imagePullPolicyString定义镜像拉取策略,有Always,Never,ifNotPresent。Always总是尝试拉取最新,Never仅使用本地镜像,ifNotPresent表示本地没有再去拉取在线镜像。默认值是Always。
      spec.containers[].command[]List指定容器启动指令,不指定则使用镜像打包时使用的启动命令
      spec.containers[].args[]List指定容器启动命令参数
      spec.containers[].workingDirString指定容器工作目录
      spec.containers[].volumeMounts[]List容器内部存储卷配置
      spec.containers[].volumeMounts[].nameString容器挂载的存储卷名称
      spec.containers[].volumeMounts[].mountPathString存储卷路径
      spec.containers[].volumeMounts[].readOnlyString设置存储卷的读写模式, true 或者false,默认为读写模式
      spec.containers[].ports[]List指定容器要用到的端口列表
      spec.containers[].ports[].nameString名称
      spec.containers[].ports[].containerPortString指定容器要监听的端口号
      spec.containers[].ports[].hostPortString指定主机对应的端口号,默认跟上面相同,需要注意设置了hostPort,同一主机无法启动该容器的相同副本
      spec.containers[].ports[].protocolString指定端口协议,支持TCP,UDP,默认为TCP
      spec.containers[].env[]List指定容器运行前需要设置的环境变量列表
    • 容器生命周期 #

    POD控制器 #

    服务发现 #

    存储 #

    调度器 #

    集群安全机制 #

    HELM #

    运维部分 #

    Reference #


    comments powered by Disqus