巩固链接视频:

尚硅谷Kubernetes教程(K8s新版已上传,推荐观看)

https://www.bilibili.com/video/BV1w4411y7Go?p=1

重点截图

 

k8s svc 把ClusterIP 改为nodeport k8s scheduler_API

k8s svc 把ClusterIP 改为nodeport k8s scheduler_API_02

k8s svc 把ClusterIP 改为nodeport k8s scheduler_Server_03

第四十八节
集群调度
Scheduler是k8s的调度器,主要任务是把定义的pod分配到集群的节点上
   考虑因素:公平,资源高效利用,效率,灵活
   scheluer是单独运行的程序,启动后一直监听API server获取'PodSpec.NodeName'为空的pod,对每个pod都会创建一个binding,表明该pod应该放在哪个节点上
调度过程
   首先过滤掉不满足条件的节点,这个过程为predicate ---预选
       PodFirsResources
       PodFitsHost
       PodFitsHostPorts
       PodSelectorMatches
       NoDiskConflict
   其次通过对节点的优先级排序,这个过程为priorty ---优选排序
       LeastRequestedPriority
       BalancedResourceAllocation
       ImageLocalityPriority
       计算权重累加进行排序
   最后选择优先级较高的节点来;如果任何一步出错,直接返回错误
第四十九节
node亲和性
pod.spec.nodeAffinity
    preferredDuringSchedulingIgnoredDuringExecution: 软策略 requiredDuringSchedulingIgnoredDuringExecution: 硬策路
pod亲和性
pod.spec.podAffinity.podaffinity/podantiaffinity
    preferredDuringSchedulingIgnoredDuringExecution: 软策略 requiredDuringSchedulingIgnoredDuringExecution: 硬策路
第五十一节
污点和容忍(Taint Toleration)
Taint的组成
    使用kubectl taint 命令可以给某个Node节点设置污点,可以让Node拒绝pod的调度执行,甚至将node已经存在的pod驱离出去
    污点的组成如下:key=value:effect
    每个污点有一个key和value作为污点标签,其中value可以为空,effect描述污点的作用
    当前taint effect支持如下三个选项:
        NoSchedule  表示不会将pod调度到具有该污点的node上
        PreferNoSchedule   尽量避免
        NoExecute   不会调度该污点的node上,同时驱离node上已经存在的pod
    kubectl taint nodes node名 key1=value1:NoExecute  立即驱离节点上的pod
    kubectl taint nodes node名 key1=value1:NoExecute- 删除节点污点标签
    tolerations:
        其中key, vaule, effect 要与 Node 上设置的 taint 保持一致
        operator 的值为 Exists 将会忽略value值
        tolerationseconds 用于描述当Pod 需要被驱逐时可以在 Pod上继续保留的运行时间
            1,当不指定 key ,值时,表示容忍所有的污点 key:
            tolerations:
            - operator: "Exists"
            2,当不指定 effect 值时,表示容忍所有的污点作用
            tolerations:
            - key: "key"
              operator: "Exists"
            3,有多个Master 存在时,防止资源浪费,可以master节点如下设置
            kubectl taint nodes node名 node-role.kubernetes.io/master-:PreferNoSchedule
第五十二节
pod固定节点调度
根据node名
spec:
  nodeName: node名、或nodeIp
根据node标签选择
spec:
  nodeSelector:
    type:backend
节点创建标签
kubectl label node node名 type=backend
第五十三节
安全认证
k8s的安全机制基本就是围绕保护API Server来设计的,k8s使用
      认证(Authentication)
          Http Token认证   很长很复杂的字符创
         Http Base认证    用户名+密码
         最严格的Https证书认证   基于CA根证书签名的客户端身份认证方式(双向认证)
         两种类型:
             k8s组件对API Server的访问:kubectl,Controller Manager,Scheduler,kubelet,kube-proxy
             k8s管理的pod对容器的访问:pod(dashborad也是pod形式运行)
         安全性说明:
             Controller Manager,Scheduler与API Server在同一台机器上,所以直接使用API Server的非安全端口访问 --insecure-bind-address=127.0.0.1
             kubectl,kubelet,kube-proxy访问API Server就都需要证书进行HTTPS双向认证
         证书颁发:
             手动签发:通过K8s集群跟CA进行签发HTTPS证书
             自动签发:kubelet首次访问API Server时,使用token做认证,通过后,Controller Manager会为kubelet生成一个证书,以后访问都是用证书做认证。
         kubeconfig(root/.kube/目录下)
             文件包含集群参数(CA证书,API Server地址),客户端参数(上面生成证书和私钥),集群context信息(集群名称,用户名)。k8s组件通过启动时指定不同的kubeconfig文件可以切换到不同的集群
         ServiceAccount(SA)
             pod中的容器访问API Server,因为pod的创建,销毁是动态的,所以要为它手动生成证书就不行,k8s使用了ServiceAccount解决pod访问API Server的认证问题
         Secret与SA的关系
             Secret:
                 一种是ServiceAccount的service-account-token
                 一种是用于保存用户自定义保密信息的Opaque
             SA包含三部分:(默认在pod中的/run/secrets/kubernetes.io/serviceaccount/目录)
                 token
                 ca.crt
                 namespace(每个会有一个SA,如果pod创建时没有指定SA,就会使用pod所属的namespaces的SA)
第五十四节
鉴权(Authorization)
    AlwaysDeny:拒绝一切,用于测试
    AlwaysAllow:允许接受所有请求,若集群不需要授权流程,则可以采取该策略
    ABAC(Attribute-Based Access Control):基于属性的访问,表示使用用户配置的授权规则对用户请求进行匹配和控制
    Webbook:通过外部调用REST服务对用户进行授权
    RBAC(Role-Based Access Control):基于角色的访问控制,现行默认规则(k8s 1.5引入)
        优势:
        对集群中的资源非资源均拥有完整的覆盖
        整个RBAC完全由几个API对象完成,通其他API对象一样,可以用k8s或api进行操作
        可以在运行时进行调整,无需重启API Server
RBAC引入4个新的顶级资源对象:
    Role
    RoleBinding
    ClusterRole
    ClusterRoleBinding
第五十六节  实践
linux创建用户:
    useradd devuser
    passwd devuser
cfssl 工具命令 证书工具
    生成证书请求,证书私钥
设置集群参数
设置客户端认证参数
设置上下文参数
设置默认上下文
第五十七节
准入控制(AdmissionControl)来保证API Server的安全
认证-->鉴权(RBAC)-->准入控制