前世今生

[阿里云] Infrastructure as a service
[新浪云] platform as a service
[office 365] software as a service

分布式资源管理器

MeSoS 伯克利、Twitter、2019-05弃用
Docker Swarm 2019-7 阿里弃用
Kubernetes 谷歌,2010年 borg系统,go语言翻写 borg 系统 => Kubernetes

  • borg 系统

    config file/borgcfg | command lines tools | web browers
    scheduler -> BorgMaster(备份3个以上奇数个)[Paxos] —link shard—> Borglet

  • Kubernetes

    scheduler | replication controller -> api server <—-> etcd
    node [ kubelet | kube proxy —-> firewall | Pod {container [Docker]}]

  • etcd

    etcd: 可信赖的分布式键值存储服务 V2 内存,V3 Database(V1.11后支持)
    HTTP server -> (Raft、Store) –> WAL(预写日志) | Entry | Snapshot

Kubernetes 特点

轻量级:消耗资源小
开源
弹性伸缩
负载均衡 IPVS

IPVS: IP虚拟服务器,运行在LVS(ipvsadm程序完成该功能)下提供负载均衡

组件和核心

组件 介绍
APIServer 所有服务访问的统一入口
ControllerManager 维持副本期望数目
Scheduler 负责介绍任务,选择合适的节点分配任务
ETCD 键值对数据库,存储集群的重要信息,进行持久化
Kuberlet 直接和容器引擎交互实现容器的生命周期管理
KuberProxy 负责写入规则至IPTABLES\IPVS实现服务映射访问
CoreDNS 为集群中的SVC创建一个域名解析
Dashboard 为K8S集群提供B\S架构支持
INGRESS Controller 从4层支持到7层
Fedetation 支持多集群统一管理
Prometheus 提供集群监控能力
Elk 日志统一分析介入平台

Pod

自主式Pod、控制器管理的Pod

只要运行Pod,Pause容器就会启动存在
一个Pod可以存在多个容器(尾根隔离,进程不隔离,容器端口不能冲突),多个容器公用Pause的网络栈,存储卷

控制器:
ReplicationController 确保副本期望数目
ReplicaSet 本质同上,支持集合 selector
Deployment 建议使用,自动管理 RS,支持 rolling update

Horizontal Pod Autoscaling HPA CPU利用率扩容
StatefulSet 解决有状态服务问题
    稳定的持久化存储:基于PVC,Pod重新调度后访问的持久化数据不变
    稳定的网络标志:基于Headless Service,Pod重新调度后 PodName、HostName不变
    有序部署
    有序收缩
DaemonSet 
Job、Cron Job 负责批处理任务,即仅执行一次的任务,确保任务成功结束

服务发现

RR:轮询

网络通讯模式

网络模型:所有Pod在一个可以直接连通的扁平化网络空间中

不同节点上的 Docker 容器间的互相访问需要打通,然后运行 K8S

同一 Pod 内的多个容器:Pause 共享网络栈
Pod 间的通讯:Overlay Nerwork
Pod 和 Service 间的通讯:各节点的 Iptables 规则、LVS

  • Overlay Nerwork

    Flannel –> Flanneld
    etcd 存储管理 Flannel 可分配的 IP 地址段资源
    监控每个 Pod 的实际地址,并在内存中 维护 Pod 节点路由表

资源清单

资源

名称空间级别

工作负载型资源:Pod、控制器
服务发现及负载均衡资源:service、ingress
配置和存储型资源:Volume(存储卷)、CSI(容器存储接口、可扩展第三方存储卷)
特殊类型存储卷:ConfigMap(配置文件热更新)、Secret(保存敏感数据)、DownwardAPI(把外部环境中的信息输出给容器)

集群级别

Namespace、Node、Role、ClusterRole、RoleBinding、ClusterRoleBinding

元数据级别

HPA、PodTemplate、LimitRange

YAML 文件及资源清单

YAML:可读性高,表达数据序列的格式,一种标记语言

基本语法:

缩进只允许使用空格
# 标识注释

数据结构:

对象、数组、纯量

常用字段:

name 介绍
version K8S API 版本
kind 文件定义的资源类型和角色
metadata 元数据对象
metadata.name 元数据对象的名称,如命名Pod的名称
metadata.namespace 元数据对象的命名空间
Spec 详细定义对象
Spec.containers[] 容器列表
Spec.containers[].name 容器的名称
Spec.containers[].image 使用到的镜像名称

容器生命周期:

存储
调度器
集群安全机制
HELM

安装

koolshare 软路由

系统初始化

设置系统主机名和 Host 文件相互解析
安装依赖包
设置防火墙位 Iptables 设置空规则
关闭 Selinux
调整内核参数(开启网桥,关闭ipv6)
调整系统时区
关闭不需要的服务
设置 rsyslogd 和 systemd journald
升级系统内核为4.44

kube-proxy 开启 ipvs 前置条件
安装 Docker、Docker-ce
配置 docker\daemon.json
安装 Kubeadm、Kubectl、Kubelet
初始化主节点、加入节点
部署网络

配置私有仓库

Harbor 安装