diff --git a/kubenets/operator/01 简介.md b/kubenets/operator/01 简介.md index f9174c5b..c1b971a2 100644 --- a/kubenets/operator/01 简介.md +++ b/kubenets/operator/01 简介.md @@ -6,7 +6,13 @@ Operator 是由 CoreOS 开发的,用来扩展 Kubernetes API,特定的应用 Operator 直接使用 Kubernetes API进行开发,也就是说他们可以根据这些控制器内部编写的自定义规则来监控集群、更改 Pods/Services、对正在运行的应用进行扩缩容。 +Operator pattern首先由 CoreOS 提出,通过结合 CRD 和 custom controller 将特定应用的运维知识转换为代码,实现应用运维的自动化和智能化。Operator 允许 kubernetes 来管理复杂的,有状态的分布式应用程序,并由 kubernetes 对其进行自动化管理,例如,etcd operator 能够创建并管理一组 etcd 集群, 定制化的 controller 组件了解这些资源,知道如何维护这些特定的应用。 +通过 CRD,kubernetes 可以动态的添加并管理资源。CRD 解决了结构化数据存储的问题,Controller 则用来跟踪这些资源, 保证资源的状态满足期望值。 + +CRD+Controller=decalartive API,声明式 API 设计是 kubernetes 重要的设计思想, 该设计保证能够动态扩展 kubernetes API,这种模式也正是 Operator pattern。Operator一般也分为两种类型: +* 通用的Operator,由各大云厂商开发,为了满足统一的云需求。 +* 专用型Operator,解决一个特定应用的自动化管理。 ### 开发框架 @@ -26,71 +32,4 @@ Operator Framework 同样也是 CoreOS 开源的一个用于快速开发 Operato 4. 定义 Operator 的协调(reconcile)逻辑 5. 使用 Operator SDK 构建并生成 Operator 部署清单文件 -## 使用实例 - -### 搭建go开发环境 - -1. 下载 - -``` -brew install go -``` -2. 配置环境变量 - -``` -GOPATH= -GOROOT= -GOPROXY= -``` - -3. 安装operator-sdk工具 - -``` -brew install operator-sdk -``` - -### 创建项目 - - -``` -$ operator-sdk new opdemo -...... -# 该过程需要科学上网,需要花费很长时间,请耐心等待 -...... -$ cd opdemo && tree -L 2 -. -├── Gopkg.lock -├── Gopkg.toml -├── build -│ ├── Dockerfile -│ ├── _output -│ └── bin -├── cmd -│ └── manager -├── deploy -│ ├── crds -│ ├── operator.yaml -│ ├── role.yaml -│ ├── role_binding.yaml -│ └── service_account.yaml -├── pkg -│ ├── apis -│ └── controller -├── vendor -│ ├── cloud.google.com -│ ├── contrib.go.opencensus.io -│ ├── github.com -│ ├── go.opencensus.io -│ ├── go.uber.org -│ ├── golang.org -│ ├── google.golang.org -│ ├── gopkg.in -│ ├── k8s.io -│ └── sigs.k8s.io -└── version - └── version.go - -23 directories, 8 files -``` - - +区有两个成熟的脚手架工具用于简化开发,一个是有 kube-sig 维护的 kubebuilder, 另一个是由 redhat 维护的 operator-sdk,这两个工具都是基于 controller-runtime 项目而实现,用户可自行选择,笔者用的是 kubebuilder。 diff --git a/kubenets/operator/02 Operator-sdk.md b/kubenets/operator/02 Operator-sdk.md new file mode 100644 index 00000000..ae7c31cb --- /dev/null +++ b/kubenets/operator/02 Operator-sdk.md @@ -0,0 +1,68 @@ +## 使用实例 + +### 搭建go开发环境 + +1. 下载 + +``` +brew install go +``` +2. 配置环境变量 + +``` +GOPATH= +GOROOT= +GOPROXY= +``` + +3. 安装operator-sdk工具 + +``` +brew install operator-sdk +``` + +### 创建项目 + + +``` +$ operator-sdk new opdemo +...... +# 该过程需要科学上网,需要花费很长时间,请耐心等待 +...... +$ cd opdemo && tree -L 2 +. +├── Gopkg.lock +├── Gopkg.toml +├── build +│ ├── Dockerfile +│ ├── _output +│ └── bin +├── cmd +│ └── manager +├── deploy +│ ├── crds +│ ├── operator.yaml +│ ├── role.yaml +│ ├── role_binding.yaml +│ └── service_account.yaml +├── pkg +│ ├── apis +│ └── controller +├── vendor +│ ├── cloud.google.com +│ ├── contrib.go.opencensus.io +│ ├── github.com +│ ├── go.opencensus.io +│ ├── go.uber.org +│ ├── golang.org +│ ├── google.golang.org +│ ├── gopkg.in +│ ├── k8s.io +│ └── sigs.k8s.io +└── version + └── version.go + +23 directories, 8 files +``` + + diff --git a/kubenets/operator/03 Kubebuilder.md b/kubenets/operator/03 Kubebuilder.md new file mode 100644 index 00000000..0ad2477e --- /dev/null +++ b/kubenets/operator/03 Kubebuilder.md @@ -0,0 +1,13 @@ + +## 1 概述 + +### 构建阶段 + +![](image/2023-08-15-22-02-45.png) + + +### 工作流程 + +![](image/2023-08-15-22-05-58.png) +## 2 执行流程 + diff --git a/kubenets/operator/image/2023-08-15-22-02-45.png b/kubenets/operator/image/2023-08-15-22-02-45.png new file mode 100644 index 00000000..5de98462 Binary files /dev/null and b/kubenets/operator/image/2023-08-15-22-02-45.png differ diff --git a/kubenets/operator/image/2023-08-15-22-05-58.png b/kubenets/operator/image/2023-08-15-22-05-58.png new file mode 100644 index 00000000..218e5d20 Binary files /dev/null and b/kubenets/operator/image/2023-08-15-22-05-58.png differ diff --git a/start.sh b/start.sh index e3f2d32b..e0d821e9 100644 --- a/start.sh +++ b/start.sh @@ -10,4 +10,6 @@ find . -name "*.java" -exec wc -l {} \; | awk 'BEGIN{num=0} {num+=$1;print $1;} # 查看今天的日志 find . -name "*.log" | xargs grep "wrod" -n \ No newline at end of file + +# wsl访问宿主机网络 +New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow