简介
- 简介
- K8s本质上就是一组服务器集群,K8s可以在集群的各个节点上运行特定的docker容器
- K8s管理的是集群节点上的容器
- 功能:
- 自我修复
- 弹性伸缩(实时根据服务器的并发情况,增加或缩减容器数量)
- 自动部署和回滚(yaml);比如说游戏发布后,很方便回滚到上一个版本
- 服务发现和负载均衡
- 机密和配置管理(加密、配置的共享管理)
- 存储编排
- 批处理
- K8s集群分为两类节点
- master node:主
- worker node:工作
- master node的组件(程序)
- apiserver,接收客户端操作K8s的指令
- scheduler,从多个worker node中选举一个来启动服务(调度)
- controller manager,向worker node的kuberlet发送指令
- worker node的组件
- kubelet,向docker发送指令,管理docker容器
- kubeproxy,管理docker容器的网络
- K8s的数据库,etcd
- 用来注册节点、服务、记录账户
- 也可以用别的,比如mysql来做存储,不过需要额外的配置
- 如下图,客户通过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地址,和做代理。
- pod概念
- pod是K8s最小部署单元,所以在K8s中不能直接启动容器
- 是一个或者多个容器的集合,又称为容器组
- pod是短暂的
- 一个pod中的容器共享网络命名空间
- Controllers:控制器,控制pod(启动、停止、删除)
- Deployment,无状态应用部署
- DaemonSet,确保所有node运行同一个pod
- Job,一次性任务
- Cronjob,定时任务
- service:防止pod失联;定义一组pod的访问策略
- 将一组pod关联起来,提供一个统一的入口。即使pod地址发生改变,这个统一入口也不会变化,保证用户访问不受影响
- 防止pod挂掉了,再生成时IP混乱。
- 前端访问时,是访问service里存储的node记录,node(nginx)连接后端(mysql/php)也是通过访问service
- label:标签,附加到某个资源上,用于关联对象、查询和筛选
- 一组pod是一个统一的标签
- service是通过标签和一组pod进行关联的
- namespace:命名空间,将对象逻辑上隔离
- 默认情况下,pod是可以互相访问的。使用场景以下:
- 为不同的公司,提供隔离的pod运行环境
- 为开发环境、测试环境、生产环境分别准备不同的名称空间,进行业务隔离
搭建完整的K8s集群
生产环境K8s平台规划
- 在生产环境中,强烈建议用多maste集群(HA)高可用这种模式,
- master最好不要宕机,否则整个集群都会宕掉
- worker node越多越好;2到3个master;2个load balancer为后端的master进行调度;etcd必须有3台或5台,7台节点,最好是奇数(方便投票选举)
- 测试还是用单master集群。然后升级成多master…
- 三个节点:2G内存,2核CPU
服务器硬件配置推荐
minikube,不考虑kubeadm,也是工具,提供kubeadm init和kubeadm join,快速部署kubernetes集群- 不过易于管理;而二进制安装时,每个组件都是一个进程(没有自愈功能)
- 二进制,编译安装
- 集群规划
- 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
- 初始化服务器