k8s operator从0到1实践

这篇具有很好参考价值的文章主要介绍了k8s operator从0到1实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境准备

一个k8s集群

推荐使用docker-desktop,本地单机集群

开发工具包

这里推荐使用脚手架工具kubebuilder
使用脚手架工具,能生成项目模板,开发人员只需要关注核心逻辑和方法即可

mac安装

brew install kubebuilder

实践

初始化operator项目

# 新建项目文件夹
$ mkdir webapp-operator

# 切入到项目文件夹
$ cd webapp-operator/

# 初始化go module
$ go mod init webapp-operator

# 初始化operator项目模板
$ kubebuilder init --domain kubebuilder.io

# 创建api
# 这里我们创建一个 group 为 app, version 为 v1, kind 为 EasyService 的 api:
$ kubebuilder create api --group app --version v1 --kind EasyService

生成的项目结构目录如下:

$ tree webapp-operator/ -L 2
webapp-operator/
├── Dockerfile	# 用于构建控制器镜像的 Dockerfile
├── Makefile	# 用于控制器构建及部署的 Makefile
├── PROJECT		# 用于生成组件的 kubebuilder 元数据
├── README.md
├── api			# API 模板代码所在目录
│   └── v1
├── bin 		# 可执行程序
│   ├── controller-gen
│   ├── k8s
│   ├── kustomize
│   └── setup-envtest
├── cmd			# 程序入口main
│   └── main.go
├── config		# 采用 Kustomize YAML 定义的配置
│   ├── crd		# CRD 相关, 当 make install 将 apply 此目录 yaml 
│   ├── default	# 控制器相关, 当 make deploy 将 apply 此目录 yaml
│   ├── manager
│   ├── prometheus
│   ├── rbac
│   └── samples
├── cover.out
├── go.mod
├── go.sum
├── hack
│   └── boilerplate.go.txt
├── internal
│   └── controller	# 控制器逻辑所在目录,**需要开发者完善**
└── resources		# 非脚手架生成,**开发者生成**
    ├── deployment.go
    └── service.go

核心逻辑编写

完整代码参考:
webapp-operator

对象结构(api)、控制器(controller)修改完毕后,需要更新crd的定义

$ make manifests

测试验证

前提条件:
登录到在集群master上操作

1、将CRD安装到集群

$ make install 

# 安装完毕后,可以在集群查到crd的信息
$ kubectl get crd | grep easyservice
easyservices.app.kubebuilder.io   2024-01-14T09:01:58Z

2、 启动控制器

$ make run

3、新建CR
新建名为easyservice-sample的自定义资源实例,创建副本数量和对应的nodeport端口。
比如新建了一个easyservice-sample.yaml文件,内容如下:

apiVersion: app.kubebuilder.io/v1
kind: EasyService
metadata:
  name: easyservice-sample
spec:
  # TODO(user): Add fields here
  size: 2
  image: nginx:1.7.9
  ports:
    - port: 80
      targetPort: 80
      nodePort: 31002

当CR新建出来后,controller就会收到相应的事件变更

# 新建CR
$ kubectl apply -f easyservice-sample.yaml

验证

  • 主机访问:http://localhost:31002/
    会显示nginx的主页
  • 集群查看
$ kubectl get pods,deploy,EasyService,svc,crd
NAME                                      READY   STATUS    RESTARTS   AGE
pod/easyservice-sample-6cd6bf49f5-2xg57   1/1     Running   0          4h52m
pod/easyservice-sample-6cd6bf49f5-52l64   1/1     Running   0          12m

NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/easyservice-sample   2/2     2            2           4h52m

NAME                                                AGE
easyservice.app.kubebuilder.io/easyservice-sample   4h52m

NAME                         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/easyservice-sample   NodePort    10.101.103.107   <none>        80:31002/TCP   4h52m
service/kubernetes           ClusterIP   10.96.0.1        <none>        443/TCP        30d

NAME                                                                            CREATED AT
customresourcedefinition.apiextensions.k8s.io/easyservices.app.kubebuilder.io   2024-01-14T09:01:58Z

部署

1、制作推送controller镜像

$ make docker-build docker-push IMG=<some-registry>/<project-name>:tag
# 编译本地镜像
$ make docker-build IMG=test/webapp-operator:1.0.0

2、把controller部署到集群文章来源地址https://www.toymoban.com/news/detail-791264.html

$ make deploy IMG=<some-registry>/<project-name>:tag

参考

  • K8s operator从0到1实战
  • k8s实战篇 - vlog
  • Kubernetes Operator series 5— controller-runtime component — Reconciler
  • k8s/crd-controller

到了这里,关于k8s operator从0到1实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云上攻防-云原生篇&;Kubernetes&;K8s安全&;API&;Kubelet未授权访问&;容器执行

    curl -XPOST -k “https://192.168.139.132:10250/run///” -d “cmd=id” 执行的命令是test03容器里的命令,需要进行容器逃逸。 1、攻击8080端口:API Server(Master)未授权访问 旧版本的k8s的API Server默认会开启两个端口:8080和6443。 6443是安全端口,安全端口使用TLS加密;但是8080端口无需认证,

    2024年04月22日
    浏览(73)
  • k8s operator从0到1实践

    推荐使用docker-desktop,本地单机集群 这里推荐使用脚手架工具kubebuilder 使用脚手架工具,能生成项目模板,开发人员只需要关注核心逻辑和方法即可 mac安装 生成的项目结构目录如下: 完整代码参考: webapp-operator 对象结构(api)、控制器(controller)修改完毕后,需要更新

    2024年02月01日
    浏览(39)
  • 云原生Kubernetes:K8S概述

    目录 一、理论 1.云原生 2.K8S 3.k8s集群架构与组件 4.K8S网络 二、总结 (1)概念 云原生是一种基于容器、微服务和自动化运维的软件开发和部署方法。它可以使应用程序更加高效、可靠和可扩展,适用于各种不同的云平台。 如果要更直接通俗的来解释下上面的概念,云原生更

    2024年02月10日
    浏览(52)
  • 【云原生 • Kubernetes】认识 k8s、k8s 架构、核心概念点介绍

    目录 一、Kubernetes 简介 二、Kubernetes 架构 三、Kunbernetes 有哪些核心概念? 1. 集群 Cluster 2. 容器 Container 3. POD 4. 副本集 ReplicaSet 5. 服务 service 6. 发布 Deployment 7. ConfigMap/Secret 8. DaemonSet 9. 核心概念总结 Kubernetes 简称 k8s,是支持云原生部署的一个平台,起源于谷歌。谷歌早在十几

    2024年02月03日
    浏览(170)
  • 【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

    目录 一、认识 Kubernetes 网络 二、外部网络如何访问 k8s 内部服务 1. NodePort 2. Load Balancer 3. Ingress Kubernetes 最底层的网络为节点网络,用来保证 k8s 集群的节点(master 和 worker、worker 节点之间)能够做正常的 IP 寻址和通讯。 Kubernetes 第二层网络就是 Pod 网络,构建于节点网络之上

    2024年01月16日
    浏览(68)
  • 云原生Kubernetes:K8S存储卷

    目录 一、理论 1.存储卷 2.emptyDir 存储卷 3.hostPath卷 4.NFS共享存储 5.PVC 和 PV 6.静态创建PV 7.动态创建PV 二、实验  1.emptyDir 存储卷 2.hostPath卷 3.NFS共享存储 4.静态创建PV 5.动态创建PV 三、问题 1.生成pod一直pending 2.shoumount -e未显示共享目录 3.静态创建pv 报错 4.使用 Deployment 来创建

    2024年02月07日
    浏览(69)
  • 【云原生K8S】Kubernetes之探针

    目录 一、探针是什么 二、探针类型  Ⅰ、livenessProbe 容器重启策略  Ⅱ、readinessProbe Ⅲ、startupProbe 执行顺序: 字段详情 三、探测机制 Ⅰ、HTTP GET探针 Ⅱ、TCP套接字探针 Ⅲ、Exec探针 探针:是由 kubelet 对容器执行的定期诊断 要执行诊断,则需kubelet 调用由容器实现的 Handler。

    2024年02月09日
    浏览(66)
  • 云原生Kubernetes:K8S安全机制

    目录 一、理论 1.K8S安全机制 2.Authentication认证 3.Authorization授权 4.Admission Control准入控制 5.User访问案例 6.ServiceAccount访问案例 二、实验 1.Admission Control准入控制 2.User访问案例 3.ServiceAccount访问案例 三、问题 1.生成资源报错 2.镜像拉取失败 四、总结 (1)概念 Kubernetes 作为一个分

    2024年02月07日
    浏览(66)
  • 云原生_kubernetes(k8s)介绍

    目录 一、应用部署方式演变 二、k8s介绍 三、k8s的组件 四、k8s中的概念 五、k8s资源管理方式 1、命令式对象管理 2、命令式对象配置 3、声明式对象配置 在部署应用程序的方式上,主要经历了三个时代: 1 、物理机部署: 互联网早期,会直接将应用程序部署在物理机上 优点

    2023年04月13日
    浏览(56)
  • 云原生Kubernetes:K8S常用服务端口

    目录 一、理论 1.K8S常用服务端口号 (1)K8S集群 表1 K8S集群端口 协议 端口号 K8S集群 TCP 22 使用主机驱动通过SSH进行节点配置 TCP 53 集群DNS服务 UDP 53 集群DNS服务 TCP 2376 主机驱动与Docker守护进程通信的TLS端口 TCP 2379 etcd客户端请求 TCP 2380 etcd节点通信 UDP 8472 Canal/Flannel VXLAN ove

    2024年02月10日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包