Kubernetes汇总 ~ 持续更新


    Kubernetes Summary


            From introduction to mastery  ~

                  If you start, don’t give up

                  Knowledge is wealth

                  Life is short

                  Are you ready ?




在这里插入图片描述



一、Kubernetes介绍

点击如下标题,会自动跳转 ~

1、组件说明
    (1.1)K8s简称来源
    (1.2)特点
    (1.3)架构
    (1.4)etcd架构图
    (1.5)node


2、Pod概念
    (2.1)自主式Pod
    (2.2)控制器管理的Pod
    (2.3)服务发现


3、网络通讯方式
    (3.1)K8s简称来源
    (3.2)特点
    (3.3)架构





二、Kubernetes安装部署

点击如下标题,会自动跳转 ~

1、集群环境准备
    (1)koolshare软路由信息
    (2)K8s各个节点信息
    (3)harbor仓库节点信息


2、部署Koolshare
    (1)
    (2)
    (3)


3、部署K8s节点
    (1)
    (2)
    (3)


4、部署Harbor仓库
    (1)
    (2)
    (3)











一、Kubernetes介绍

1、组件说明

(1.1)K8s简称来源

        Kubernetes简称K8s,因为"K"到"s"中间有8个字母组成;




(1.2)特点

        Kubernetes Google 10年容器化基础架构 borg GO 语言 Borg

                特点:

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



(1.3)架构

        K8s(C/S架构)采用http协议;

在这里插入图片描述

        scheduler:
               调度器,负责介绍任务,选择合适的节点进行分配任务,写入api server,api server写入etcd,把请求分发到node;

        CrontrollerManager:
               控制器,维持副本期望数目;

        api server:
               所有服务访问统一入口;

        kubectl:
               命令行管理工具;

        etcd:
               键值对数据库,储存K8S集群所有重要信息(持久化),官方将它定位成一个可信赖的分布式键值存储服务K/V,它能够为整个分布式集群存储一些关键数据,协助分布式集群的正常运转;

        #推荐在kubernetes集群中使用etcd v3版本、v2版本;kubernetes v1.11包括之前自带etcd不支持v3版本;v2版本会把数据写入内存中;v3版本会把数据写到本地卷的持久化操作,关机并不会造成数据损坏,从本地磁盘进行恢复;

        COREDNS:
               可以为集群中的SVC创建一个域名IP的对应关系解析;

        DASHBOARD:
               给 K8S 集群提供一个 B/S 结构访问体系;

        INGRESS CONTROLLER:
               官方只能实现四层代理,INGRESS 可以实现七层代理;

        FEDERATION:
               提供一个可以跨集群中心多K8S统一管理功能;

        PROMETHEUS:
               提供K8S集群的监控能力;

        ELK:
               提供 K8S 集群日志统一分析介入平台;




(1.4)etcd架构图

        #采用http协议,C/S ;

在这里插入图片描述

        raft:
               读写信息保存 - 会写到本地磁盘store进行持久化设置;

        WAL:
               预写日志,对日志进行临时备份或者完整备份;


(1.5)node

        kubelet:
               会跟crl(container、运行环境 、interface接口);
               直接跟容器引擎交互实现容器的生命周期管理

        kube proxy:
               port与port之间的访问以及负载均衡需要借助kube proxy,默认操作对象是防火墙, 实现port映射,新版本还支持IPVS;










2、Pod概念

(2.1)自主式Pod

               在传统情况下,每个容器都是独立存在的,每个容器都是有IP地址、挂载卷等等,通过命名空间进行隔离;
               定义一个pod,只要运行Pod,这个容器就要被启动(叫pause);
               一个Pod会封装很多容器、会共用pause网络、存储卷(html等)等,也就是说没有独立的IP地址,只有Pod IP地址或是pause IP地址,采用localhost:端口 ,容器之间就可以互相访问到;
               端口不能冲突,否则会无限重启;



(2.2)控制器管理的Pod

        ReplicationController(简称RC):
               用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来替代,而如果异常多出来的容器也会自动回收;
               在新版本的kubernetes中建议使用ReplicaSet代替ReplicationControlle


        ReplicaSet(简称RS),是为了无状态服务而设计:
               和ReplicationController没有什么本质的不同,只是名字不一样;
               并且ReplicaSet支持集合式的selector(我们在创建Pod会打标签,比如app - apache等会打一堆的标签,当我们想删除容器或者做对应的设施的时候,可以当app=apache的时候干什么什么。。。)


        Deployment,是为了无状态服务而设计:
                虽然ReplicaSet可以独立使用,但一般还是建议使用Deployment来自动管理ReplicaSet,这样就无需担心跟其他机制的不兼容问题(比如ReplicaSet不支持rolling-update滚动更新,但Deployment支持);
               Deployment为Pod和ReplicaSet提供了一个声明式定义(declarative)方法。用来替代以前的ReplicationContoller来方便的管理应用,典型的应用场景包括:
                      定义Depolyment来创建Pod和ReplicaSet
                      滚动升级和回滚应用
                      扩容和缩容
                      暂停和继续Deployment


在这里插入图片描述

        HPA (Horizontl Pod AutoScale):
               仅适用于Deployment和ReplicaSet,在V1版本中仅支持根据Pod的CPU利用率扩容,在v1alpha版本中,支持根据内存和用户自定义的metric扩缩容;
               如下图,定义HPA,当CPU小于80,那么定义的MAX为10,就水平扩展,最大10,但是当CPU达到80就不再继续扩展;如果CPU已经高于80,那么就去除Pod,一直到最小Min为2或者是当CPU小于80时,则不去除Pod


在这里插入图片描述

        StatefullSet是为了解决有状态服务的问题,其应用场景包括:
               稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现;
               稳定的网络标识,即Pod重新调度后其Pod Name和HostNmae不变,基于Headless Service(即没有Cluster IP的Service)来实现;
               有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要根据定义的顺序依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态)基于init containers来实现;
               有序收缩,有序删除(即N-1到0);


        DaemonSet:
               确保全部(或者一些)Node上运行一个Pod的副本,当有Node加入集群时,也会为他们新增一个Pod,当有Node从集群移除时,这些Pod也会被收回,删除DaemonSet将会删除它创建的所有Pod;
               使用DaemonSet的一些典型用法:
                      运行集群存储daemon,例如在每个Node上运行glusterd、ceph
                      在每个Node上运行日志收集daemon,例如fluentd、logstash
                      在每个Node上运行监控daemon,例如prometheus Node Exporter


        Job:
               负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束


        Cron job:
               Cron Job管理预计时间的Job,即:
                      在给定时间点只运行一次
                      周期性地在给定时间点运行



(2.3)服务发现

        客户端想要访问一组Pod,service去收集Pod是通过标签,service会有IP和端口,然后clinet通过访问service的IP+端口间接的访问到对应Pod,是轮询的访问RR,第一次访问第一个Pod以此类推:



在这里插入图片描述

        把如下结构放在K8s运行:




在这里插入图片描述

        Mysql运行在一个Pod,放在StatefullSet控制器是可以做到的,但是集群化不是那么方便
        Php-fpm创建Deployment控制器,Deployment会指定副本数量,比如3个,在前面加上service,这样squid就不用去写IP地址了,用localhost替代
        Squid封装成Pod,通过控制器去控制,创建service通过相关标签进行绑定,Nodeport暴露方式
        LVS通过本身的功能进行负载调度



        K8s运行情况:

在这里插入图片描述






3、网络通讯方式

                ;
                ;
                ;
                ;



                ;
                ;
                ;
                ;



                ;
                ;
                ;
                ;











二、Kubernetes安装部署

1、集群环境准备

(1)koolshare软路由信息


(2)K8s各个节点信息


(3)harbor仓库节点信息

2、部署Koolshare

(1)


3、部署K8s节点

(1)


4、部署Harbor仓库

(1)

猜你喜欢

转载自blog.csdn.net/weixin_44793172/article/details/107328807