go基于k8s二次开发(二)

client创建资源

接下来用代码创建资源,先将前面的main函数改个名比如list(),作为一个模块,都是在同一个目录下,同一个main包,下面创建main函数,实现这个创建资源的操作,因为go run需要有main函数存在
(模块化编程)

创建deployment

先放源码

package main

import (
        "context"
        "fmt"
        appsV1 "k8s.io/api/apps/v1"
        coreV1 "k8s.io/api/core/v1"
        metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/client-go/kubernetes"
        "k8s.io/client-go/tools/clientcmd"
)

func cretaeDeploy() {
        configPath := "etc/kube.conf"
        config, _ := clientcmd.BuildConfigFromFlags("", configPath)
        clientset, _ := kubernetes.NewForConfig(config)
        namespace := "default"
        var replicas int32 = 3
        deployment := &appsV1.Deployment{
                ObjectMeta: metaV1.ObjectMeta{
                        Name: "nginx",
                        Labels: map[string]string{
                                "app": "nginx",
                                "env": "dev",
                        },
                },
                Spec: appsV1.DeploymentSpec{
                        Replicas: &replicas,   //这里要传递的是指针
                        Selector: &metaV1.LabelSelector{
                                MatchLabels: map[string]string{
                                        "app": "nginx",
                                        "env": "dev",
                                },
                        },
                        Template: coreV1.PodTemplateSpec{
                                ObjectMeta: metaV1.ObjectMeta{
                                        Name: "nginx",
                                        Labels: map[string]string{
                                                "app": "nginx",
                                                "env": "dev",
                                        },
                                },
                                Spec: coreV1.PodSpec{
                                        Containers: []coreV1.Container{
                                                {
                                                        Name:  "nginx",
                                                        Image: "nginx:1.20.1",
                                                        Ports: []coreV1.ContainerPort{
                                                                {
                                                                        Name:          "http",
                                                                        Protocol:      coreV1.ProtocolTCP,
                                                                        ContainerPort: 80,
                                                                },
                                                                {
                                                                        Name:          "https",
                                                                        Protocol:      coreV1.ProtocolTCP,
                                                                        ContainerPort: 443,
                                                                },
                                                        },
                                                },
                                        },
                                },
                        },
                },
        }
        deployment, _ = clientset.AppsV1().Deployments(namespace).Create(context.TODO(), deployment, metaV1.CreateOptions{})
        fmt.Println(deployment)
}

create方法需要的参
在这里插入图片描述
在这里插入图片描述
看源码可以知道client-go创建deployment主要是写这些信息
在这里插入图片描述
可以看到的ObjectMeta结构体中可以定义哪些内容

都是这样,详细的内容记不住就看源码或者帮助文档

创建service

package main

import (
        "client-go/tools/clientcmd"
        "context"
        "fmt"
        coreV1 "k8s.io/api/core/v1"
        metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/client-go/kubernetes"
)

func createService() {
        configPath := "etc/kube.conf"
        config, _ := clientcmd.BuildConfigFromFlags("", configPath)
        clientset, _ := kubernetes.NewForConfig(config)
        namespace := "default"
        service := &coreV1.Service{
                ObjectMeta: metaV1.ObjectMeta{
                        Name: "nginx-service",
                        Labels: map[string]string{
                                "env": "dev",
                        },
                },
                Spec: coreV1.ServiceSpec{
                        Type: coreV1.ServiceTypeNodePort,
                        Selector: map[string]string{
                                "env": "dev",
                                "app": "nginx",
                        },
                        Ports: []coreV1.ServicePort{
                                {
                                        Name:     "http",
                                        Port:     80,
                                        Protocol: coreV1.ProtocolTCP,
                                },
                        },
                },
        }
        service, _ = clientset.CoreV1().Services(namespace).Create(context.TODO(), service, metaV1.CreateOptions{})
        fmt.Println(service)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一些学习Kubernetes二次开发的推荐教程: 1. Kubernetes官方文档:Kubernetes官方文档提供了丰富的学习资源,包括快速入门、API参考、设计指南等。可以从官方文档中了解Kubernetes的整体架构和API设计,以及如何进行二次开发。 2. Kubernetes源码:Kubernetes源码是学习Kubernetes二次开发的必备资源。可以通过源码了解Kubernetes的实现细节,深入掌握其内部机制。同时,Kubernetes社区也提供了很多示例代码,可以借鉴学习。 3. Kubernetes开发指南:这是一份由Kubernetes社区维护的开发指南,提供了很多关于Kubernetes二次开发的实践经验和最佳实践。可以从中学习如何编写Kubernetes Operator、插件、扩展等。 4. Kubernetes Cookbook:这是一本由Kubernetes社区编写的实用手册,提供了很多Kubernetes的使用场景和解决方案。可以从中了解如何使用Kubernetes API、管理Pod、配置存储等。 5. Kubernetes Operators:这是一份由Red Hat维护的文档,介绍了如何编写Kubernetes Operator。可以从中学习Operator的设计思路、开发流程和最佳实践。 6. Kubernetes in Action:这是一本由Marko Luksa撰写的Kubernetes实战指南,包括Kubernetes的基础知识、实践案例和二次开发。可以从中学习如何使用Kubernetes构建容器化应用,以及如何进行二次开发。 以上是一些推荐的Kubernetes二次开发教程,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿白,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值