1分钟了解 Kubernetes王牌Operator

KubernetesOperator是一种自定义控制器,通过扩展KubernetesAPI和CRD实现应用的自动化管理。它简化了有状态应用如数据库的部署、监控和故障恢复。文章介绍了Operator模式、使用场景,以及Docker、kubectl、Kubernetes、Kubebuilder的安装过程,并提供了一个简单的Operator开发示例。
摘要由CSDN通过智能技术生成

Kubernetes是一个优秀的容器编排和管理平台,为应用的部署、伸缩和管理提供了强大的能力。Deployment提供了Pod的管理,Service为一组相同功能的Pod提供了统一的入口,而这些都是由Kubernetes自身提供的Controller(控制器)完成的。Kubernetes Operator作为一种新型的自定义控制器,为开发人员和运维团队带来了更高级别的抽象,进一步简化了容器化应用的管理和运维。

Operator模式介绍

Operator是一种自定义控制器,基于Kubernetes API和自定义资源定义(CRD)来实现对特定应用或服务的自动化管理。它通过扩展Kubernetes控制平面,为特定应用或服务提供了自定义的管理逻辑和行为。Operator通过监视和响应自定义资源对象的状态变化,自动化地执行必要的操作,以确保应用或服务的正确部署、运行和维护。
举个例子,运维人员需要部署一套Redis集群,需要正确部署、配置相关参数、启动运行、出现宕机需要重新拉取等工作。Operator模式可以把运维怎样部署、出现问题如何恢复等一系列工作在Kubernetes中操作自动化,实现自动化部署、自动化拉起故障节点等。

Operator使用场景

  1. 数据库管理:Operator可以自动创建、配置和管理数据库实例,提供高可用、备份恢复和扩展性等功能;
  2. 监测和警报:Operator可以监测应用的状态和性能指标,并根据预设的规则生成警报,实现实时监测和故障排查;
  3. 日志和指标收集:Operator可以集成日志和指标收集工具,自动收集和分析应用的日志和指标数据,为性能优化和故障排查提供支持。
    Operator主要应用场景是需要部署有状态应用情况下,如Redis主从多活集群, Prometheus集群。

Docker安装

Mac在docker-desktop下寻找合适的版本。
Linux的话,

$ curl -sSL https://get.daocloud.io/docker | sh

通过docker version命令,验证安装是否成功。

安装kubectl

下载
x86-64

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

ARM64

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/arm64/kubectl"

下一步安装

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

验证

kubectl version --client

Kubernetes安装

Kind是一个使用Docker容器作为“节点”实现部署Kubernetes集群的工具,我们默认已经安装了GoLang环境。
安装Kind

curl -Lo ./kind "https://kind.sigs.k8s.io/dl/v0.17.0/kind-$(uname)-amd64"
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

安装Kubernetes环境

kind create cluster --image=kindest/node:v1.22.0 --name=dev

这一步比较慢需要等一会,等执行完了。

kubectl get node
kubectl get pod -n kube-system

有没有内容,如果不是空的,恭喜你Kubernetes环境安装成功了。

Kubebuilder安装配置

到现在,我们已经成功了一半了,继续…
Kubebuilder是一个用于Operator程序构建和发布工具,我们可以使用他快速开发一个Operator程序。
安装Kubebuilder

curl -L -o kubebuilder https://go.kubebuilder.io/dl/latest/$\(go env GOOS)/$(go env GOARCH)
chmod +x kubebuilder
sudo mv kubebuilder /usr/local/bin

安装helm
可以参考https://helm.sh/docs/intro/install/

好了,到此为止所有要装的工具都已经装完了,离成功只差一步之遥了。

实例工程

借用《Kubernetes Operator开发进阶》的示例,开发一个operator,自动创建一个Deployment和Service。
代码在github的https://github.com/daniel-hutao/Advanced-Kubernetes-Operator中,进入ch7的application-operator中.
主要开两个核心代码,一个是自定义CR,在apis/apps/v1/application_types.go

type ApplicationSpec struct {
	Deployment DeploymentTemplate `json:"deployment,omitempty"`
	Service    ServiceTemplate    `json:"service,omitempty"`
}

定义了两个自定义资源。

还有一个是Controller,在controllers/apps/application_controller.go

// 创建Deployment
result, err = r.reconcileDeployment(ctx, app)
	if err != nil {
		log.Error(err, "Failed to reconcile Deployment.")
		return result, err
	}
// 创建Service
result, err = r.reconcileService(ctx, app)
	if err != nil {
		log.Error(err, "Failed to reconcile Service.")
		return result, err
	}

部署Controller:

# 投建镜像
 make docker-build IMG=application-operator:v0.0.1
# 推送到kind上
kind load docker-image application-operator:v0.0.1 --name dev
# 部署CRD
make install
# 部署控制器
make deploy IMG=application-operator:v0.0.1
# 结果检查
kubectl get pod -n application-operator-system

一个简单的Operator可以运行成功了。

总结

Kubernetes Operator作为一种创新的自定义控制器,为容器化应用的管理和运维带来了革命性的改进。它通过自动化运维、领域专属、声明式配置和扩展性等特点,简化了容器化应用的管理复杂性,提高了效率和稳定性。

参考:
还在苦恼快速搭建K8S环境,试试Kind吧
Kubernetes Install Tools
Kubernetes Operators: what are they? Some examples
《Kubernetes Operator开发进阶》
如有侵权,请及时与我联系,谢谢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值