基于web的k8s仿真调度评价平台4-删除pod,建立与删除node

上篇我们是创建pod,现在我们把之前创建pod删除

package main

import (
	//"context"
	//"fmt"
	//corev1 "k8s.io/api/core/v1"
	//"k8s.io/apimachinery/pkg/api/resource"
	//metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	//v1 "k8s.io/client-go/applyconfigurations/core/v1"
	"k8s.io/client-go/kubernetes"
	//"k8s.io/client-go/tools/cache"
	"k8s.io/client-go/tools/clientcmd"
	//"strings"

	"context"
	"k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/api/resource"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func getResourceList(cpu, memory string) v1.ResourceList {
	res := v1.ResourceList{}
	if cpu != "" {
		res[v1.ResourceCPU] = resource.MustParse(cpu)
	}
	if memory != "" {
		res[v1.ResourceMemory] = resource.MustParse(memory)
	}
	return res
}

func getResourceRequirements(requests, limits v1.ResourceList) v1.ResourceRequirements {
	res := v1.ResourceRequirements{}
	res.Requests = requests
	res.Limits = limits
	return res
}


func main() {
	// uses the current context in kubeconfig
	// path-to-kubeconfig -- for example, /root/.kube/config
	config, err := clientcmd.BuildConfigFromFlags("", "C:\\Users\\HJW\\.kube\\config")
	if err!= nil{
		panic(err)
	}

	// creates the clientset
	clientset, err := kubernetes.NewForConfig(config)
	if err!= nil{
		panic(err)
	}
	//pod模版
	//newPod := &v1.Pod{
	//	ObjectMeta: metav1.ObjectMeta{
	//		Name: "pod2",
	//	},
	//	Spec: v1.PodSpec{
	//		Containers: []v1.Container{
	//			{Name: "pod2", Image: "busybox:latest", Command: []string{"sleep", "1000"},
	//				Resources: getResourceRequirements(getResourceList("10m", "1Gi"), getResourceList("50m", "1Gi"))},
	//		},
	//	},
	//}

	//创建pod
	//pod, err := clientset.CoreV1().Pods("kube-system").Create(context.Background(), newPod, metav1.CreateOptions{})
	if err != nil {
		panic(err)
	}
	//fmt.Printf("Created pod %q.\n", pod.GetObjectMeta().GetName())
	clientset.CoreV1().Pods("kube-system").Delete(context.Background(),"pod1",metav1.DeleteOptions{})
}

这个没有查资源,思路是啥呢,我就直接在goland中查了pods对象中有些什么操作

// PodInterface has methods to work with Pod resources.
type PodInterface interface {
	Create(ctx context.Context, pod *v1.Pod, opts metav1.CreateOptions) (*v1.Pod, error)
	Update(ctx context.Context, pod *v1.Pod, opts metav1.UpdateOptions) (*v1.Pod, error)
	UpdateStatus(ctx context.Context, pod *v1.Pod, opts metav1.UpdateOptions) (*v1.Pod, error)
	Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error
	DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error
	Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Pod, error)
	List(ctx context.Context, opts metav1.ListOptions) (*v1.PodList, error)
	Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error)
	Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.Pod, err error)
	Apply(ctx context.Context, pod *corev1.PodApplyConfiguration, opts metav1.ApplyOptions) (result *v1.Pod, err error)
	ApplyStatus(ctx context.Context, pod *corev1.PodApplyConfiguration, opts metav1.ApplyOptions) (result *v1.Pod, err error)
	UpdateEphemeralContainers(ctx context.Context, podName string, pod *v1.Pod, opts metav1.UpdateOptions) (*v1.Pod, error)

	PodExpansion
}

然后根据库函数写就行了,运行完之后看一下
在这里插入图片描述
pod1没了。同理把pod2也删了
在这里插入图片描述
现在仿照pod的新建,新建一个node,同样是types.go

package main

import (
	"context"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	//"fmt"
	//corev1 "k8s.io/api/core/v1"
	//"k8s.io/apimachinery/pkg/api/resource"
	//metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	//v1 "k8s.io/client-go/applyconfigurations/core/v1"
	"k8s.io/client-go/kubernetes"
	//"k8s.io/client-go/tools/cache"
	"k8s.io/client-go/tools/clientcmd"
	//"strings"

	"k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/api/resource"
)

func getResourceList(cpu, memory string) v1.ResourceList {
	res := v1.ResourceList{}
	if cpu != "" {
		res[v1.ResourceCPU] = resource.MustParse(cpu)
	}
	if memory != "" {
		res[v1.ResourceMemory] = resource.MustParse(memory)
	}
	return res
}

func getResourceRequirements(requests, limits v1.ResourceList) v1.ResourceRequirements {
	res := v1.ResourceRequirements{}
	res.Requests = requests
	res.Limits = limits
	return res
}


func main() {
	// uses the current context in kubeconfig
	// path-to-kubeconfig -- for example, /root/.kube/config
	config, err := clientcmd.BuildConfigFromFlags("", "C:\\Users\\HJW\\.kube\\config")
	if err!= nil{
		panic(err)
	}

	// creates the clientset
	clientset, err := kubernetes.NewForConfig(config)
	if err!= nil{
		panic(err)
	}
	//pod模版
	//newPod := &v1.Pod{
	//	ObjectMeta: metav1.ObjectMeta{
	//		Name: "pod2",
	//	},
	//	Spec: v1.PodSpec{
	//		Containers: []v1.Container{
	//			{Name: "pod2", Image: "busybox:latest", Command: []string{"sleep", "1000"},
	//				Resources: getResourceRequirements(getResourceList("10m", "1Gi"), getResourceList("50m", "1Gi"))},
	//		},
	//	},
	//}
	//node模板
	newNode := &v1.Node{
		ObjectMeta: metav1.ObjectMeta{
					Name: "node1",
				},
		Spec: v1.NodeSpec{},
		Status: v1.NodeStatus{
			Capacity: getResourceList("50m", "1Gi"),
			Allocatable:getResourceList("50m", "1Gi"),
			Phase:"running",
		},
	}
	//创建pod
	//pod, err := clientset.CoreV1().Pods("kube-system").Create(context.Background(), newPod, metav1.CreateOptions{})
	if err != nil {
		panic(err)
	}
	//fmt.Printf("Created pod %q.\n", pod.GetObjectMeta().GetName())
	//clientset.CoreV1().Pods("kube-system").Delete(context.Background(),"pod2",metav1.DeleteOptions{})
	clientset.CoreV1().Nodes().Create(context.Background(), newNode, metav1.CreateOptions{})

}

node建立很少有人做,没找到,在github里面别人也在问,也没有,可能很少有人像我有这么离谱的操作。
在这里插入图片描述
可以看到node1已经建立起来了
下面再把他删了,和pod的删除一样

package main

import (
	"context"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	//"fmt"
	//corev1 "k8s.io/api/core/v1"
	//"k8s.io/apimachinery/pkg/api/resource"
	//metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	//v1 "k8s.io/client-go/applyconfigurations/core/v1"
	"k8s.io/client-go/kubernetes"
	//"k8s.io/client-go/tools/cache"
	"k8s.io/client-go/tools/clientcmd"
	//"strings"

	"k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/api/resource"
)

func getResourceList(cpu, memory string) v1.ResourceList {
	res := v1.ResourceList{}
	if cpu != "" {
		res[v1.ResourceCPU] = resource.MustParse(cpu)
	}
	if memory != "" {
		res[v1.ResourceMemory] = resource.MustParse(memory)
	}
	return res
}

func getResourceRequirements(requests, limits v1.ResourceList) v1.ResourceRequirements {
	res := v1.ResourceRequirements{}
	res.Requests = requests
	res.Limits = limits
	return res
}


func main() {
	// uses the current context in kubeconfig
	// path-to-kubeconfig -- for example, /root/.kube/config
	config, err := clientcmd.BuildConfigFromFlags("", "C:\\Users\\HJW\\.kube\\config")
	if err!= nil{
		panic(err)
	}

	// creates the clientset
	clientset, err := kubernetes.NewForConfig(config)
	if err!= nil{
		panic(err)
	}
	//pod模版
	//newPod := &v1.Pod{
	//	ObjectMeta: metav1.ObjectMeta{
	//		Name: "pod2",
	//	},
	//	Spec: v1.PodSpec{
	//		Containers: []v1.Container{
	//			{Name: "pod2", Image: "busybox:latest", Command: []string{"sleep", "1000"},
	//				Resources: getResourceRequirements(getResourceList("10m", "1Gi"), getResourceList("50m", "1Gi"))},
	//		},
	//	},
	//}
	//node模板
	//newNode := &v1.Node{
	//	ObjectMeta: metav1.ObjectMeta{
	//				Name: "node1",
	//			},
	//	Spec: v1.NodeSpec{},
	//	Status: v1.NodeStatus{
	//		Capacity: getResourceList("50m", "1Gi"),
	//		Allocatable:getResourceList("50m", "1Gi"),
	//		Phase:"running",
	//	},
	//}
	//创建pod
	//pod, err := clientset.CoreV1().Pods("kube-system").Create(context.Background(), newPod, metav1.CreateOptions{})
	if err != nil {
		panic(err)
	}
	//fmt.Printf("Created pod %q.\n", pod.GetObjectMeta().GetName())
	//clientset.CoreV1().Pods("kube-system").Delete(context.Background(),"pod2",metav1.DeleteOptions{})
	//clientset.CoreV1().Nodes().Create(context.Background(), newNode, metav1.CreateOptions{})
	clientset.CoreV1().Nodes().Delete(context.Background(),"node1",metav1.DeleteOptions{})
}

在这里插入图片描述
可以看到已经被删除了

现在我们重新把node信息丰富一下,加入cpu与内存的限制

package main

import (
	"context"
	"time"

	//"fmt"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	//"fmt"
	//corev1 "k8s.io/api/core/v1"
	//"k8s.io/apimachinery/pkg/api/resource"
	//metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	//v1 "k8s.io/client-go/applyconfigurations/core/v1"
	"k8s.io/client-go/kubernetes"
	//"k8s.io/client-go/tools/cache"
	"k8s.io/client-go/tools/clientcmd"
	//"strings"

	"k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/api/resource"
)

func getResourceList(cpu, memory string) v1.ResourceList {
	res := v1.ResourceList{}
	if cpu != "" {
		res[v1.ResourceCPU] = resource.MustParse(cpu)
	}
	if memory != "" {
		res[v1.ResourceMemory] = resource.MustParse(memory)
	}
	return res
}

func getResourceRequirements(requests, limits v1.ResourceList) v1.ResourceRequirements {
	res := v1.ResourceRequirements{}
	res.Requests = requests
	res.Limits = limits
	return res
}


func main() {
	// uses the current context in kubeconfig
	// path-to-kubeconfig -- for example, /root/.kube/config
	config, err := clientcmd.BuildConfigFromFlags("", "C:\\Users\\HJW\\.kube\\config")
	if err!= nil{
		panic(err)
	}

	// creates the clientset
	clientset, err := kubernetes.NewForConfig(config)
	if err!= nil{
		panic(err)
	}
	//pod模版
	//newPod := &v1.Pod{
	//	ObjectMeta: metav1.ObjectMeta{
	//		Name: "pod2",
	//	},
	//	Spec: v1.PodSpec{
	//		Containers: []v1.Container{
	//			{Name: "pod2", Image: "busybox:latest", Command: []string{"sleep", "1000"},
	//				Resources: getResourceRequirements(getResourceList("10m", "1Gi"), getResourceList("50m", "1Gi"))},
	//		},
	//	},
	//}
	//node模板
	lastheartbeattime,_ :=time.Parse("2006-01-02 15:04:05", "2019-06-05 18:38:35")
	lasttransitiontime,_ :=time.Parse("2006-01-02 15:04:05", "2019-06-05 11:41:27")
	newNode := &v1.Node{
		ObjectMeta: metav1.ObjectMeta{
					Name: "node1",
				},
		Spec: v1.NodeSpec{},
		Status: v1.NodeStatus{
			Capacity: getResourceList("50m", "1Gi"),
			Allocatable:getResourceList("50m", "1Gi"),
			Phase:"running",
			//Conditions:Conditions.Type="Ready",Conditions.Status="True"
			Conditions: []v1.NodeCondition{
				{"Ready","True",metav1.Time{lastheartbeattime},metav1.Time{lasttransitiontime},"KubeletReady","kubelet is posting ready status"},
			},
		},
	}
	//创建pod
	//pod, err := clientset.CoreV1().Pods("kube-system").Create(context.Background(), newPod, metav1.CreateOptions{})
	if err != nil {
		panic(err)
	}
	//fmt.Printf("Created pod %q.\n", pod.GetObjectMeta().GetName())
	//clientset.CoreV1().Pods("kube-system").Delete(context.Background(),"pod2",metav1.DeleteOptions{})
	clientset.CoreV1().Nodes().Create(context.Background(), newNode, metav1.CreateOptions{})
	//clientset.CoreV1().Nodes().Delete(context.Background(),"node1",metav1.DeleteOptions{})
	//nodes, err := clientset.CoreV1().Nodes().List(metav1.ListOptions{})
	//fmt.Println(nodes.Items[0].Status.Conditions[len(nodes.Items[0].Status.Conditions)-1].Type)
}

这里面有大坑,就是lastheartbeattime要time.Time类型的,搞了半天,最后类型转换曲线救国了

在这里插入图片描述
可以看到node已经建立,而且参数和我们设置的一样。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值