上篇我们是创建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已经建立,而且参数和我们设置的一样。