简介

  1. 简介
  • K8s本质上就是一组服务器集群,K8s可以在集群的各个节点上运行特定的docker容器
  • K8s管理的是集群节点上的容器
  • 功能:
    • 自我修复
    • 弹性伸缩(实时根据服务器的并发情况,增加或缩减容器数量)
    • 自动部署和回滚(yaml);比如说游戏发布后,很方便回滚到上一个版本
    • 服务发现和负载均衡
    • 机密和配置管理(加密、配置的共享管理)
    • 存储编排
    • 批处理
  1. K8s集群分为两类节点
  • master node:主
  • worker node:工作
  1. master node的组件(程序)
    • apiserver,接收客户端操作K8s的指令
    • scheduler,从多个worker node中选举一个来启动服务(调度)
    • controller manager,向worker node的kuberlet发送指令
  • worker node的组件
    • kubelet,向docker发送指令,管理docker容器
    • kubeproxy,管理docker容器的网络
  1. K8s的数据库,etcd
  • 用来注册节点、服务、记录账户
  • 也可以用别的,比如mysql来做存储,不过需要额外的配置
  1. 如下图,客户通过Kubectl来发送指令;然后去etcd里做检查,是否是合法用户;然后apiServer向scheduler发送指令;apiServer再向etcd里面查找各node信息,通过内部算法找到合法IP,并返回给apiServer;apiServer将IP给controller manager;controller manager通过apiServer和node的kubelet进行通信;kubelet通过控制node上的docker来启动具体的某个pod;如果要上网,就要用到kube-proxy来分配IP地址,和做代理。
  2. pod概念
  • pod是K8s最小部署单元,所以在K8s中不能直接启动容器
  • 是一个或者多个容器的集合,又称为容器组
  • pod是短暂的
  • 一个pod中的容器共享网络命名空间
  1. Controllers:控制器,控制pod(启动、停止、删除)
  • Deployment,无状态应用部署
  • DaemonSet,确保所有node运行同一个pod
  • Job,一次性任务
  • Cronjob,定时任务
  1. service:防止pod失联;定义一组pod的访问策略
    • 将一组pod关联起来,提供一个统一的入口。即使pod地址发生改变,这个统一入口也不会变化,保证用户访问不受影响
    • 防止pod挂掉了,再生成时IP混乱。
    • 前端访问时,是访问service里存储的node记录,node(nginx)连接后端(mysql/php)也是通过访问service
  • label:标签,附加到某个资源上,用于关联对象、查询和筛选
    • 一组pod是一个统一的标签
    • service是通过标签和一组pod进行关联的
  • namespace:命名空间,将对象逻辑上隔离
    • 默认情况下,pod是可以互相访问的。使用场景以下:
    • 为不同的公司,提供隔离的pod运行环境
    • 为开发环境、测试环境、生产环境分别准备不同的名称空间,进行业务隔离

image.png


搭建完整的K8s集群

生产环境K8s平台规划

  • 在生产环境中,强烈建议用多maste集群(HA)高可用这种模式,

image.png

  • master最好不要宕机,否则整个集群都会宕掉
  • worker node越多越好;2到3个master;2个load balancer为后端的master进行调度;etcd必须有3台或5台,7台节点,最好是奇数(方便投票选举)
  • 测试还是用单master集群。然后升级成多master…
    • 三个节点:2G内存,2核CPU

image.png

服务器硬件配置推荐

image.png

  • worker node要运行更多容器,所以内存越大越好。

    官方提供三种部署方式

  1. minikube,不考虑
  2. kubeadm,也是工具,提供kubeadm init和kubeadm join,快速部署kubernetes集群
    • 不过易于管理;而二进制安装时,每个组件都是一个进程(没有自愈功能)
  3. 二进制,编译安装
  4. 集群规划
  • master:
    • 主机名:k8s-master1
    • IP:192.168.31.63
  • worker1:
    • 主机名:k8s-node1
    • IP:192.168.31.65
  • worker2:
    • 主机名:k8s-node2
    • IP:192.168.31.64
  • k8s版本:1.16
    • 安装方式:离线-二进制
    • OS版本:centos7.7
  1. 初始化服务器
  • 关闭防火墙
  • 关闭selinux

    为Etcd和apiServer自签SSL证书

    Etcd数据库集群部署

    部署master组件

    部署node组件

  • docker:启动容器

  • kubelet:接受apiserver的指令,然后控制docker容器
  • kube-proxy:为worker上的容器配置网络工作

    部署K8s集群网络

    部署Web UI(Dashboard)

    部署集群内部DNS解析服务(CoreDNS)