kubernetes [kubern安tAs] 安装1.11 版以上
Docker技术的三大核心概念,分别是:
1 概念:
搭建一次 ,anywhere 运行
搭建镜像(Image)
容器(Container): 镜像在里面运行, 资源量更轻量级 [弹性 负载 动态]
仓库(Repository):存放各种镜像的地 ,Docker Hub 是官方的仓库
docker 可以创建容器
搭建 发送 运行
容器会运行,镜像给容器提供一切 [代码, 库,资源配置 ,环境变量 ]
k8 会对容器进行 编排、管理和调度
k8 会有 master 节点 和 node 节点
k8 架构:
master 节点所有的服务都会自己缓存 一定数据才会 拜访api server
一些概念:
pod 概念与分类:
控制器管理的pod
只要又pod ,这个容器就会被启动
公用网络站
非控制器管理的pod :pod 挂了就挂了
一个pod 中的网络空间,ip地址 、端口[不可冲突] 都必须相同
一个pod 里有一组容器
pod 与pod 之间 会进行通讯 : 本节点通讯 或跨界点通讯
网络通讯模式
二、replication controller & replicaset & deployment [最优] 三者区别 同级别 全部属于有状态分布
1 replication controller 容器失败了,会创建new pod ,多出来也会回收
2 replicasets 比 1 多了 支持集合式的 selector ,可独立运行
3 deployment 是 replicaset 的升级版 ,可自动管理replicaset ,可版本滚动更新
特:deployment 创建rs ,rs创建pod ,比如需要版本退化v2 ->v1
三、horizontal pod autoscaling [HPA] 水平pod 自动扩容,就是增加pod 的个数
HPA 和replicaset 同级 ,会根据 某 replicaset 的情况[比如cpu 的利用率 大于.80%] 扩张pod 的个数
四 、statefulset STA : 解决有状态服务的问题
1 稳定持久化储存,pod 死亡又被调度回来,数据什么都不会丢失
2 稳定的网络标志 ,pod 的hostname 都不会再变
3 有序部署 每个pod 都又序号 (例如那个服务是先起,那个服务后起 )
4 pod有序删除
五、daemonSet
1 确保全部 node 上运行一个pod 副本,增加node ->daemonSet 会在该node 上创建pod,减少node,它也会减少pod, 删除daemonSet,其创建的pod 也会删除。
2适用场景:
1 运行集群存储daemon :在每个node 上都会与运行 glusterd、ceph
2 在每个node 上运行日志收集 daemon ,例如fluentd ,logstash
3在每个node 上运行监控 daemon ,例如 prometheus,node exporter
六 job 负责 一个pod 或多个pod 的成功结束
cron job : 定时运行job
七 服务发现
1 管理pod 的控制器 : 功能: 容器失败 重建容器副本
2 svc [服务发现]: 将创建好的pod 的ip 接口 暴露给客户端,客户端 就可以访问多个pod 了。
3 资源清单 – 类似于剧本的功能 yarn 的语法格式,需要用资源清单 yarn 语法编写pod,掌握pod 的生命周期
通过资源清单编写pod
5 pod有无状态分布 :
有状态服务 :比较复杂,没有既定规则 eg :dnms db
无状态服务: lvs apache : 工厂生产线工人 eg: docker
4 存储类型: 要有自己的mind
configmap
secret
volume
pv
6 调度器: 会自动将pod 或容器调度到 某个节点
:概念
:过程
:自定义调度器
7 集群安全机制 难重要
1集群认证 鉴权 访问控制原理 及流程
8 helm 重要 类似于linux 中的yum ,不过helm 安装的是服务 eg :mongdb
需要编写helm 模板 , helm 部署一些常用的插件
9 运维:
k8 源码修改之类的 ----默认证书只有一年
k8 高可用集群
k8 源于 google 的borg 系统[大规模集群管理工具]
k8 的架构 与它有一点点区别
scheduler 做好后,会交给 api server ,由api server 放入 etcd 中
1 rc : 维度副本的数量,比如想让容器运行几个副本 ,[类似于我的sprk 规模 ?]
2 etcd 做持久化的,天生就是集群, 目前是v3 版本。
etcd 架构
http server
raft
store
wal
entry
snapshot
kuberlet cri 容器运行环境 接口 ,操作docker 创建容器
负责pod 的生命周期
kuber_prox : 被svc 操作 ,写入规则ip tables ,实现服务映射访问的
接客 是触点
以 一些插件
1 coredns :可以为集群中的svc 创建对应的ip hostname 解析
2 dashbord : 提供k8 bs 结构体系
3 ingress controller :k8 只能实现4层代理,ingress 可以实现7层代理
4 普罗米修斯 :提供k8s 集群的监控能力
5 efk :提供k8 日志统一接入平台
6 高可用集群副本数目最好>= 3 奇数
二
1 YAML文件中的各种属性、参数都是从API中得来的,目前最新的kubernetes API文档如下:
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/
1 workloads api 工作负载资源
2 service api 将工作负载资源 缝合到 无障碍平衡 service上
3 config and storage api 配置与储存的api 将数据注入到应用程序中,并在外部将数据持久化到容器中。
4 metadata api 配置群集中其他资源的行为。
5 cluster api 定义群集本身的配置,通常仅由群集操作使用。
6 definitions old api versions
2 patch strategy: merge 是指 新的指会替换旧的值
创建遇到的各种奇葩问题
1 不能用 _ 连接
2 invalidate 各种使 无效 无法验证 之类 ,—>一般参数归属错误
3 spark-cluster 的resource 使没有限制的。
volume : 其实 理解 :容器中的 磁盘
1 kind : [感觉都可以单独去设置 或者 混和]
资源对象 : ReplicationController, ReplicaSet ,Deployment ,
Pod,StatefulSet、DaemonSet、Job、CronJob、
HorizontalPodAutoscaling[水平pod 自动扩展]
配置对象 :Service, Secret,Namespace, Node,ConfigMap、Ingress、Label、ThirdPartyResource、
ServiceAccount,endpoint[service 与pod 之间的桥梁]
存储对象 :Volume、Persistent Volume
策略对象 :SecurityContext、ResourceQuota、LimitRange
Dockerfile是一个Docker镜像的描述文件,我们可以理解成火箭发射的A、B、C、D…的步骤。Dockerfile其内部包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
开发人员要做的事:
1 开发源代码
2 编写 dockerfile 文件 :
运行环境 :from[基础镜像],maintainer[维护者谁],run[基础镜像需要安装什么 eg:httpd],
and[copy 文件 会自动解压], workdir[设置当前工作目录],expose[设置外露端口],
volume[设置券],env[设置容器内环境变量],copy[==and 只是不会自动解压],
arg[构建镜像时指定的参数] , cmd [要运行的代码jar ,这个jar 就是你写的代码]
3 然后需要bulid 成镜像
运维人员 要 将 镜像 创建成容器
一 pod 的生命周期
二 资源清单 指针
三 deployment
四 控制器
rc = rs -selector = deployment -selector -pod回滚历史版本- 升级状态 与事件可查看 ,可定制[升级策略,可暂停,可查看版本记录]