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
特点:
(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运行: