欢迎访问我的博客,你的支持,是我最大的动力!

kubernetes权威指南笔记(三)

Docker 小马奔腾 113℃ 评论
目录:
[显示]

共享存储原理

PVC消费PV资源
StorageClass 标识一类特殊属性的存储,可动态按需分配

PV

k8s支持的PV常用的有:CethFS,FC,Flocker,Glusterfs,HostPath,iSCSI,Local,NFS,RBD

CephFS:ReadWriteOnce ReadOnlyMany ReadWriteMany
Glusterfs: ReadWriteOnce ReadOnlyMany ReadWriteMany
NFS: ReadWriteOnce ReadOnlyMany ReadWriteMany
RBD:ReadWriteOnce ReadOnlyMany

PV生命周期
- Available 可用状态,未与某个PVC绑定
- Bound 已与某个PVC绑定
- Rleased 绑定的PVC已删除,资源已释放但没有被集群回收
- Failed 自动资源回收失败

PVC

前提条件
admission-control 中添加 DefaultStorageClass
设置默认StorageClass
annotation "storageclass.kubernetes.io/is-default-class=true"
# 查看
kubectl get sc #(default)

PV和PVC受限于Namespace

若资源供应采用动态模式,如果PVC有设置selector,那么系统将无法为其供应任何存储资源
在动态供应模式下,PV默认回收策略是 Delete ,若需要保留PV,则在动态绑定成功后,手动将回收策略改为 Retain

k8s提供静态和动态两种资源供应方式,供应结果就是生成PV
PVC可以声明Class为"",表明禁止使用动态模式

多个Pod可以挂载同一个PVC

StorageClass

GlusterFS 实践
1、在需使用glusterfs的节点上安装客户端
yum install glusterfs glustfs-fuse
kube-apiserver 启动参数 --allow-privileged=true
# 在需要部署glusterfs管理服务的节点上打标签
kubectl label node xxxx storagenode=glusterfs
2、创建glusterfs管理服务容器集群
以DaemonSet方式部署
编排文件 page 552(525)
3、创建Heketi服务
创建一个sa
编排文件 page 556(528)
4、为Heketi设置GlusterFS集群
topology.json
hekiti-cli topology load --json=topology.json
hekiti-cli topology info
5、定义storageclass
6、定义PVC
7、pod使用PVC的存储资源

CSI存储机制

存储提供方代码与k8s代码彻底解耦,部署也与k8s核心组件分离,更加安全可靠
包括两种组件:CSI Controller 和 CSI Node
CSI Controller提供存储服务视角对存储资源和存储卷进行管理和操作,建议部署为单实例pod
CSI Node对主机上的volume进行管理和操作,建议部署为daemonset
--feature-gates=VolumeSnapshotDataSource=true,CSINodeInfo=true,CSIDriverRegistry=true

CSI已经可用于生产了
如 Alicloud Elastic Block Storage,Alicloud Elastic File System,Alicloud OSS,CephFS,GlusterFS,RBD
详见 https://kubernetes-csi.github.io/docs/drivers.html

存储卷快照功能 Volume Snapshots

kubernetes 开发指南

k8s api官方文档:https://kubernetes.io/docs/reference

k8s 1.13及之前的版本可开启Swagger文档
kube-apiserver 启动参数 --enable-swagger-ui=true
访问地址: http://<master-ip>:<master-port>/swagger-ui/

resourceVersion 资源的内部版本号的字符串,可用它判断资源是否改变
status.phase 描述对象所处的生命周期,包括 Pending,Running,Active,Terminated

k8s从1.14开始,使用 OpenAPI 格式对API进行查询
访问地址: http://<master-ip>:<master-port>/openapi/v2
可以查看所有接口方法,请求参数,响应等内容

api版本
v1 GA稳定版本
alpha 实验性版本,对旧版本,可直接废弃
beta 预发布版本

api组
核心组,如v1
apiVersion: $GROUP_NAME/$VERSION 如,apps/v1beta1
启用哪些分组需要在api server启动参数中设置

PUT 更新或创建资源
PATCH 修改资源的某个指定的域

观察者模式API接口
GET /watch/<资源名复数格式>
GET /watch/<资源名复数格式>/<name>
随着时间变化,不断接收一连串的json对象,这些对象记录了资源的变化

API返回状态码

使用api替换对象
在替换对象前,先获取该资源的json对象,然后在该json对象的基础上修改要替换的部分

官方客户端库
https://github.com/kubernetes/client-go/
社区客户端库
https://github.com/ericchiang/k8s

Kubernetes API 扩展

两种扩展API的机制
- 使用CRD,无须编写额外的API Server,只需定义CRD,并提供一个CRD控制器就可以通过API管理自定义资源对象
- 使用API聚合,需编写额外的API Server,要求用户自行处理多个API版本的支持

使用CRD扩展API

CRD是一段声明,用于定义自定义资源对象
CRD Controller 实现对CRD对象的管理
开发示例:
https://github.com/kubernetes/sample-controller
https://github.com/kubernetes/sample-controller/blob/master/docs/controller-client-go.md

# 使用
kubectl get virtualservice
kubectl get istio-io #也可通过CRD的categories进行查询

CRD高级特性
subresources子资源,校验机制validation,自定义查看CRD时需要显示的列,finalizer预删除钩子

subresources子资源
status,启用/status路径,值来自CRD的。status字段,要求CRD控制器能设置和更新这个字段的值
scale,启用/scale路径,支持通过hap与CRD进行交互,通过kubectl scale可实现扩容和缩容,要求CRD支持多副本运行

CRD校验Validation
kube-apiserver开启 --feature-gates=CustomResourceValidation=true 开关

自定义查看CRD时需要显示的列
kubectl get 时显示的列

Finalizer预删除钩子方法
Finalizer设置的方法在删除CRD资源对象时进行调用,以实现CRD资源的清理工作

API聚合机制

将用户扩展的API注册到kube-apiserver上,仍然通过 API Server对新的API进行访问和操作
kube-apiserver启动参数 认证相关的参数

注册自定义APIService资源

部署自定义api服务,需要遵循k8s规范
https://github.com/kubernetes/sample-apiserver
metrics server的示例:page 656 (629)

 

转载请注明:轻风博客 » kubernetes权威指南笔记(三)

喜欢 (0)or分享 (0)