解释ETCD及其备份和恢复的过程。

ETCD是一个分布式、高可用的键值存储系统,主要用于分布式集群的配置共享、服务发现与元数据存储。需要备份ETCD需要先安装etcd客户端,备份操作需要指定K8s的API版本、指定etcd客户端的链接地址端口,指定CA根整数路径、客户端证书路径、客户端私钥路径,执行快照备份,将当前etcd的一致性数据保存到指定的文件中。

恢复一般用于当etcd集群或者K8s集群出现重大问题时候,先通过修改静态Pod的YAML文件的存放路径来让kubelet找不到静态Pod的定义文件,实现停止kube-apiserver、etcd等核心组件的服务。然后通过修改现有的etcd的名称来让它被弃用,然后恢复到之前的备份,恢复静态Pod,重启kubelet服务,检查etcd是否健康,全部正常则恢复完成。

Kustomization在Kubernetes中的作用。

Kustomization是K8s中用于管理资源配置文件的工具,它通过声明式的方式对K8s资源进行定制和组合,核心概念包括:

  1. kustomization.yaml文件,是Kustomize的核心文件,定义了如何生成最终的K8s资源文件。
  2. Resources:在kustomization.yaml文件中定义的K8s资源列表,可以是文件、目录或者远程仓库中的资源。
  3. Generators:如ConfigMapGenerators和SecretGenerators,可以根据文件或者字面值生成ConfigMap或Secret。
  4. Patches:用于修改现有资源的字段。
  5. Bases:基础目录,包含kustomization.yaml文件和一组自定义资源及其定制。
  6. Overlays:以基准目录最为基础的目录,可以包含额外的定制。Overlays可以用来创建特定环境的配置,如开发、测试和生产环境。

什么是CRD,它对K8s有什么重要意义?

CRD是K8s中用于扩展API的机制,允许用户创建自己的资源类型,就像内置的Pod、Deployment、Service等资源一样。可以添加K8s原生不支持的功能,为特定领域比如数据库创建高级抽象,可以将复杂配置封装为简单的资源定义,可以通过控制器(Controller)实现声明式自动化管理CR,Custom Resource是基于CRD创建的具体实例。

CRD的典型应用场景有哪些,举例说明。

1.机器学习工作流管理:可以用来定义和管理机器学习的完整生命周期,包括数据准备、模型训练、超参数调优和模型部署。

2.CI/CD流水线定义:可以定义构建、测试、部署等步骤,控制器自动执行。

3.数据库服务:可以实现一键创建、备份、恢复、容量扩缩、故障转移数据库集群。

解释CRD的完整创建和使用过程。

首先需要创建一个YAML文件来定义CRD,其中包含了API组、定义资源的版本和作用域与资源名称,然后创建CRD,写CR定义文件并创建CR,然后使用go语言为CRD创建一个Controller,如果是在本地未配置go环境下编写需要先安装go,然后将go加入环境变量,可以通过/etc/profile配置所有用户的系统全局配置,也可以通过/.profile对当前用户的登录Shell配置,也可以通过/.bashrc对当前用户的非登录交互式shell配置,然后写go语言代码,根据所写代码构建Controller容器镜像并部署,在生产环境,镜像构建好后都要使用docker push命令推送到镜像仓库中,这样就可以在集群环境的所有节点可以使用,然后编写脚本进行部署,Controller是跨命名空间的访问,需要为它的ServiceAccount绑定正确的RBAC权限,是集群范围的资源,因此需要创建集群角色和集群角色绑定。然后更新Deployment,确保controller-deployment.yaml文件包含serviceAccountName关键配置,然后删除旧的Deployment,重新应用controller-deployment.yaml,验证Pod使用的SerciceAccount是自己所指定的,最后创建一个对象,应用所创建的CR,测试Controller是否正常到这就可以使用了。

更多推荐