当前位置:网站首页>Développer un opérateur basé sur kubebuilder (démarrer)
Développer un opérateur basé sur kubebuilder (démarrer)
2022-06-26 16:14:00 【Chenxy02】
Adresse originale:Utiliserkubebuilder Compris.k8s crd - Oui.

Compris.k8sDecrdIl faut d'abord comprendrek8sDecontrollerMode
- Par exemple,kube-controller-managerDansdeploymentController,Lors de l'initialisation, il passe à écouterDeployments、ReplicaSetEtpodLes troisinformerObjet
- Tout d'abord,listL'objet suivant est mis en cache localement,En même tempswatchChangement d'objet,égale mise à jour progressive
func startDeploymentController(ctx ControllerContext) (controller.Interface, bool, error) {
dc, err := deployment.NewDeploymentController(
ctx.InformerFactory.Apps().V1().Deployments(),
ctx.InformerFactory.Apps().V1().ReplicaSets(),
ctx.InformerFactory.Core().V1().Pods(),
ctx.ClientBuilder.ClientOrDie("deployment-controller"),
)
if err != nil {
return nil, true, fmt.Errorf("error creating Deployment controller: %v", err)
}
go dc.Run(int(ctx.ComponentConfig.DeploymentController.ConcurrentDeploymentSyncs), ctx.Stop)
return nil, true, nil
}- Et l'intérieur le fera. syncEn fait, c'estReconcile loop, C'est - à - dire le cycle de réglage —— C'est un objet de comparaison. actualStateEtexpectStateDifférences, Effectuer les opérations d'ajout et de suppression correspondantes Par exemple,deployment Opération d'expansion et de réduction moyennes
- Calculer la différence, Que vous pouvez créer pod Nombre moins toutes les activités rs Somme des copies
- Si la différence est positive ,Description de l'expansion nécessaire,Et deReplicaSetsBySizeNewer Trier par l'expansion du nouveau à l'ancien
- Si la différence est négative , Description du rétrécissement requis ,Et deReplicaSetsBySizeOlder Trier par ancien à nouveau
La différence est calculée comme suit:
deploymentReplicasToAdd := allowedSize - allRSsReplicas
var scalingOperation string
switch {
case deploymentReplicasToAdd > 0:
sort.Sort(controller.ReplicaSetsBySizeNewer(allRSs))
scalingOperation = "up"
case deploymentReplicasToAdd < 0:
sort.Sort(controller.ReplicaSetsBySizeOlder(allRSs))
scalingOperation = "down"
}Compris.k8sDecontrollerAprès le mode,crd C'est toi qui l'as écrit. controller
- Écouter et traiter vos propres ressources définies ,
- C'est une image.

Installation Kubebuilder
wget https://github.com/kubernetes-sigs/kubebuilder/releases/download/v3.1.0/kubebuilder_linux_amd64
mv kubebuilder_linux_amd64 /usr/local/bin/kubebuilderCréer un projet d'échafaudage
- Créer un répertoire, Et spécifiez ce répertoire comme entrepôt de code
mkdir -p ~/projects/guestbook
cd ~/projects/guestbook
kubebuilder init --domain my.domain --repo my.domain/guestbook- Voir les résultats des fichiers dans ce répertoire
[[email protected] guestbook]# tree
.
├── config
│ ├── default
│ │ ├── kustomization.yaml
│ │ ├── manager_auth_proxy_patch.yaml
│ │ └── manager_config_patch.yaml
│ ├── manager
│ │ ├── controller_manager_config.yaml
│ │ ├── kustomization.yaml
│ │ └── manager.yaml
│ ├── prometheus
│ │ ├── kustomization.yaml
│ │ └── monitor.yaml
│ └── rbac
│ ├── auth_proxy_client_clusterrole.yaml
│ ├── auth_proxy_role_binding.yaml
│ ├── auth_proxy_role.yaml
│ ├── auth_proxy_service.yaml
│ ├── kustomization.yaml
│ ├── leader_election_role_binding.yaml
│ ├── leader_election_role.yaml
│ ├── role_binding.yaml
│ └── service_account.yaml
├── Dockerfile
├── go.mod
├── go.sum
├── hack
│ └── boilerplate.go.txt
├── main.go
├── Makefile
└── PROJECT
6 directories, 24 filesCréationapi
- Créer un nom webapp/v1De API (group/version)
- Créer un nouveau type Guestbook
kubebuilder create api --group webapp --version v1 --kind Guestbook- Suivi des résultats , J'ai trouvé beaucoup plus de fichiers. ,Parmi euxapi/v1/guestbook_types.goDéfinition de la représentationAPIOù? ,controllers/guestbook_controller.go Logique représentative de l'Accord
[[email protected] guestbook]# tree
.
├── api
│ └── v1
│ ├── groupversion_info.go
│ ├── guestbook_types.go
│ └── zz_generated.deepcopy.go
├── bin
│ └── controller-gen
├── config
│ ├── crd
│ │ ├── kustomization.yaml
│ │ ├── kustomizeconfig.yaml
│ │ └── patches
│ │ ├── cainjection_in_guestbooks.yaml
│ │ └── webhook_in_guestbooks.yaml
│ ├── default
│ │ ├── kustomization.yaml
│ │ ├── manager_auth_proxy_patch.yaml
│ │ └── manager_config_patch.yaml
│ ├── manager
│ │ ├── controller_manager_config.yaml
│ │ ├── kustomization.yaml
│ │ └── manager.yaml
│ ├── prometheus
│ │ ├── kustomization.yaml
│ │ └── monitor.yaml
│ ├── rbac
│ │ ├── auth_proxy_client_clusterrole.yaml
│ │ ├── auth_proxy_role_binding.yaml
│ │ ├── auth_proxy_role.yaml
│ │ ├── auth_proxy_service.yaml
│ │ ├── guestbook_editor_role.yaml
│ │ ├── guestbook_viewer_role.yaml
│ │ ├── kustomization.yaml
│ │ ├── leader_election_role_binding.yaml
│ │ ├── leader_election_role.yaml
│ │ ├── role_binding.yaml
│ │ └── service_account.yaml
│ └── samples
│ └── webapp_v1_guestbook.yaml
├── controllers
│ ├── guestbook_controller.go
│ └── suite_test.go
├── Dockerfile
├── go.mod
├── go.sum
├── hack
│ └── boilerplate.go.txt
├── main.go
├── Makefile
└── PROJECT
13 directories, 37 files- Ajouter un journal d'impression à la fonction Tuning ,Situé à controller/guestbook_controller.go
func (r *GuestbookReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
_ = log.FromContext(ctx)
// your logic here
log.FromContext(ctx).Info("print_req", "req", req.String())
return ctrl.Result{}, nil
}Déploiement àk8sEn grappes
- Compiler l'image de frappe
make docker-build IMG=guestbook:v1.0 # Mise en œuvre effective docker build -t guestbook:v1.0 .- En général, nous devons modifier les dockerfile,Voilà. go ParamètresproxyAgents,Voilà. go mod download Pas de temps mort.

- Le miroir doit ensuite être poussé manuellement dans l'entrepôt local ,Si la couche inférieureruntime- Oui.ctrEt si Besoindocker save Exporter et importer
docker save guestbook:v1.0 > a.tar
ctr --namespace k8s.io images import a.tar- Parce que le projet utilise kube-rbac-proxy, Ce miroir peut également avoir des problèmes de téléchargement , Il faut s'en occuper manuellement. ,Comme suit:

- Déployez - vous maintenant.crd
make deploy IMG=guestbook:v1.0 #Mise en œuvre effective kustomize build config/default | kubectl apply -f -- Vérifier àguestbook-system ns Objet du déploiement inférieur

- Vérifiezapi-resources

- Déploiementguestbook
kubectl apply -f config/samples/webapp_v1_guestbook.yaml
# guestbook.webapp.my.domain/guestbook-cxy created- Voircrd Les journaux peuvent être vus dans la fonction Tuning pour imprimer

边栏推荐
- Transformation of zero knowledge QAP problem
- 【力扣刷题】二分查找:4. 寻找两个正序数组的中位数
- JS教程之Electron.js设计强大的多平台桌面应用程序的好工具
- Solidus Labs欢迎香港前金融创新主管赵嘉丽担任战略顾问
- The details of the first pig heart transplantation were fully disclosed: human herpes virus was found in the patient, the weight of the heart doubled after death, and myocardial cell fibrosis
- 基于 MATLAB的自然过渡配音处理方案探究
- Hyperf框架使用阿里云OSS上传失败
- 心情不好,我就这样写代码
- NFT contract basic knowledge explanation
- Cookie和Session详解
猜你喜欢

STEPN 新手入門及進階

用Attention和微调BERT进行自然语言推断-PyTorch

1-12Vmware新增SSH功能

Simple use of tensor

OpenSea上如何创建自己的NFT(Polygon)

大话领域驱动设计——表示层及其他

Supplement the short board - Open Source im project openim about initialization / login / friend interface document introduction

【蓝桥杯集训100题】scratch辨别质数合数 蓝桥杯scratch比赛专项预测编程题 集训模拟练习题第15题

Svg canvas canvas drag

(一)keras手写数字体识别并识别自己写的数字
随机推荐
Swiftui retrieves the missing list view animation
Failed to upload hyperf framework using alicloud OSS
C# 读写文件从用户态切到内核态,到底是个什么流程?
(DFS search) acwing 2005 horseshoe
Redis 迁移(操作流程建议)
理想路径问题
Cookie和Session详解
架构实战营毕业设计
7 自定义损失函数
mha 切换(操作流程建议)
Interview pit summary I
redis的二进制数组命令
Arduino UNO + DS1302简单获取时间并串口打印
Binary array command of redis
JS教程之Electron.js设计强大的多平台桌面应用程序的好工具
手写数字体识别,用保存的模型跑自己的图片
人人都当科学家之免Gas体验mint爱死机
How to implement interface current limiting?
1-12vmware adds SSH function
Anaconda3 installation tensorflow version 2.0 CPU and GPU installation, win10 system