linux怎么查看本机内存大小
334
2022-09-11
client-go连接kubernetes集群-update相关操作
背景:
紧接client-go连接kubernetes集群-connect and list,client-go连接kubernetes集群-create相关操作。实例都是拿namespace 和deployment两个为代表进行展开延伸的(个人环境中deployment还是具有代表性的),前面创建了namespace deployment,正常的流程下一步就是修改namespace and deployment 了!
client-go连接kubernetes集群-update相关操作
1. namespace的update
package main import ( "context" "flag" "fmt" 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" "k8s.io/client-go/util/homedir" "path/filepath" ) func main() { var kubeconfig *string if home := homedir.HomeDir(); home != "" { kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file") } else { kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file") } flag.Parse() config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) if err != nil { panic(err.Error()) } // create the clientset clientset, err := kubernetes.NewForConfig(config) if err != nil { panic(err.Error()) } namespace := &corev1.Namespace{ ObjectMeta: metav1.ObjectMeta{ Name: "zhangpeng", GenerateName: "", Namespace: "", SelfLink: "", UID: "", ResourceVersion: "", Generation: 0, CreationTimestamp: metav1.Time{}, DeletionTimestamp: nil, DeletionGracePeriodSeconds: nil, Labels: map[string]string{ "dev": "test", }, Annotations: nil, OwnerReferences: nil, Finalizers: nil, ClusterName: "", ManagedFields: nil, }, } result, _ := clientset.CoreV1().Namespaces().Update(context.TODO(), namespace, metav1.UpdateOptions{}) fmt.Println(result) }
2. 扩展一下resourcequotas
main.go
package main import ( "context" "flag" "fmt" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" "path/filepath" ) func main() { var kubeconfig *string if home := homedir.HomeDir(); home != "" { kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file") } else { kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file") } flag.Parse() config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) if err != nil { panic(err.Error()) } // create the clientset clientset, err := kubernetes.NewForConfig(config) if err != nil { panic(err.Error()) } namespace := &corev1.Namespace{ ObjectMeta: metav1.ObjectMeta{ Name: "zhangpeng", GenerateName: "", Namespace: "", SelfLink: "", UID: "", ResourceVersion: "", Generation: 0, CreationTimestamp: metav1.Time{}, DeletionTimestamp: nil, DeletionGracePeriodSeconds: nil, Labels: map[string]string{ "dev": "test", }, Annotations: nil, OwnerReferences: nil, Finalizers: nil, ClusterName: "", ManagedFields: nil, }, } result, _ := clientset.CoreV1().Namespaces().Update(context.TODO(), namespace, metav1.UpdateOptions{}) fmt.Println(result) quotaTest := clientset.CoreV1().ResourceQuotas("zhangpeng") quota := &corev1.ResourceQuota{ ObjectMeta: metav1.ObjectMeta{ Name: "quota-namespace", }, Spec: corev1.ResourceQuotaSpec{ Hard: map[corev1.ResourceName]resource.Quantity{ corev1.ResourceLimitsCPU: resource.MustParse("200m"), corev1.ResourceLimitsMemory: resource.MustParse("200M"), corev1.ResourceRequestsCPU: resource.MustParse("1000m"), corev1.ResourceRequestsMemory: resource.MustParse("1Gi"), }, }, } result1, err := quotaTest.Create(context.TODO(), quota, metav1.CreateOptions{}) if err != nil { fmt.Println(err) } else { fmt.Println(result1) } }
kubectl get resourcequotas -n zhangpeng
3. update deployment
参照:client-go连接kubernetes集群-create相关操作,生成yaml读取文件流的方式:修改nginx镜像tag为1.16src/yamls/nginx.yaml
apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: nginx name: nginx spec: replicas: 1 selector: matchLabels: app: nginx strategy: {} template: metadata: creationTimestamp: null labels: app: nginx spec: containers: - image: nginx:1.16 name: nginx resources: {} status: {}
package main import ( "context" "encoding/json" "flag" "fmt" "io/ioutil" v1 "k8s.io/api/apps/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/yaml" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" "path/filepath" ) func main() { var kubeconfig *string if home := homedir.HomeDir(); home != "" { kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file") } else { kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file") } flag.Parse() config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) if err != nil { panic(err.Error()) } // create the clientset clientset, err := kubernetes.NewForConfig(config) if err != nil { panic(err.Error()) } b, err := ioutil.ReadFile("src/yamls/nginx.yaml") nginxDep := &v1.Deployment{} nginxJson, _ := yaml.ToJSON(b) if err = json.Unmarshal(nginxJson, nginxDep); err != nil { return } if _, err = clientset.AppsV1().Deployments("zhangpeng").Update(context.Background(), nginxDep, metav1.UpdateOptions{}); err != nil { fmt.Println(err) return } }
kubectl get deployments -n zhangpeng -o yaml
强调:
context.Background() context.TODO()还是有点懵 分不清什么时候用...... 执行结果的返回没有一致格式化输出,以及一下错误的处理?
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~