jck28 - 小柒 - k8s 容器编排

一,k8s 容器技术介绍

1 ,定义

  • Kubernetes 是一个开源项目,用于统一管理容器化的应用集群。
  • Kubernetes 负责在大规模服务器环境中管理容器组(pod)的扩展、复制、健康,并解决 pod 的启动、负载均衡等问题。

2,核心概念

  • 用户提交部署请求,K8S会根据调度策略,计算出服务应该调度到哪个节点进行部署;该节点的kubelet会与docker通信,根据策略拉取镜像(从镜像仓库里拉取),然后启动容器

2.1 Master节点

  • Master 节点也称为控制节点,每个 k8s 集群都有一个 Master 节点负责整个集群的管理控制,它包含了以下几个组件:
    • API Server:提供了 HTTP Rest 接口的服务进程,所有资源对象的增、删、改、查等操作的唯一入口;
    • Controller Manager:k8s 集群所有资源对象的自动化控制中心;
    • Scheduler:k8s 集群所有资源对象自动化调度控制中心;
    • ETCD:k8s 集群注册服务发现中心,可以保存 k8s 集群中所有资源对象的数据。

2.2 Node节点

  • Node 节点的作用是承接 Master 分配的工作负载,它主要有以下几个关键组件:
    • kubelet:负责 Pod 对应容器的创建、启停等操作,与 Master 节点紧密协作;
    • kube-porxy:实现 k8s 集群通信与负载均衡的组件。

2.3 Pod

  • Pod 是 k8s 最基本的操作单元,它是容器的一个上层包装结构。
  • Pod 可包含多个容器在里面,每个 Pod 至少会有一个 Pause 容器,其它用户定义的容器都共享该 Pause 容器,Pause 容器的主要作用是用于定义 Pod 的 ip 和 volume。

2.4 Label 标签

  • 例如 Node、Pod、Replica Set、Service 等,一个资源可以绑定任意个 Label,k8s 通过 Label 可实现多维度的资源分组管理,后续可通过 Label Selector 查询和筛选拥有某些 Label 的资源对象,例如创建一个 Pod,给定一个 Label,workerid=123,后续可通过 workerid=123 删除拥有该标签的 Pod 资源。

2.5 deployment

  • deployment 目的是为了定义一个期望的场景,比如定义某种 Pod 的副本数量在任意时刻都处于 Peplica Set 期望的值
  • 假如定义 Pod 的副本数目为:replicas=2,当该 Replica Set 提交给 Master 后,Master 会定期巡检该 Pod 在集群中的数目,如果发现该 Pod 挂掉了一个,Master 就会尝试依据 Replica Set 设置的 Pod 模版创建 Pod,以维持 Pod 的数量与 Replica Set 预期的 Pod 数量相同。

2.6 service

  • Service 就是我们平时所提及的微服务架构中的“微服务”, Pod、Replica Set 等都是为 Service 服务的资源
  • Service 定义了一个服务访问的入口,客户端通过这个入口即可访问服务背后的应用集群实例,而 Service 则是通过 Label Selector 实现关联与对接的,deployment 保证服务集群资源始终处于期望值。

2.7 Liveness 和 Readness

  • Liveness:隔一段时间探查服务接口, 如果探查失败, 证明服务不健康,这时候会杀掉pod,Deployment则会在杀死pod后,重新尝试拉起一个新的。 这个时候service 会把老pod的IP地址移除掉,把新pod的ipd地址 加到ip池中。

  • Readness: 每隔一段时间探查服务接口,如果探查失败, 证明服务不健康, 这时候不会杀掉pod,只是service会把这个pod的ip地址移除掉, 以便之后的流量不会再打入到这个不健康pod中。 在这之后探针会继续运行,一旦探针判断这个pod重新恢复了健康状态, 就会把这个pod的ip加回来, 继续发送流量。

二,k8s 安装与部署

  * kubeadm init \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version 
v1.13.3 \--pod-network-cidr=10.244.0.0/16
  * kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/D
ocumentation/kube-flannel.yml
  • 删除污点
  * kubectl get nodes 查看节点
  * kubectl taint nodes 节点名称 node-role.kubernetes.io/master:NoSchedule-

三,kubectl 管理命令

  • kubectl {动作} {资源}
    • kubectl get pods
    • kubectl get nodes
    • kubectl create -f {文件名称} 创建文件
    • kubectl apply -f {文件名称} 创建文件(常用)

四,dashboard 使用

五,使用 k8s 批量运行测试用例