ToB企服应用市场:ToB评测及商务社交产业平台

标题: client-go实战之六:时隔两年,刷新版本继续实战 [打印本页]

作者: 民工心事    时间: 2023-10-20 02:22
标题: client-go实战之六:时隔两年,刷新版本继续实战
欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
时隔两年,《client-go实战》被激活,更多内容将会继续更新

本篇概览

版本信息

安装kubernetes

本地安装辅助工具kubectl

  1. curl -LO "https://dl.k8s.io/release/v1.22.8/bin/darwin/arm64/kubectl" \
  2. && chmod +x ./kubectl \
  3. && sudo mv ./kubectl /usr/local/bin/kubectl \
  4. && sudo chown root: /usr/local/bin/kubectl
复制代码
  1. ➜  ~ kubectl version --client
  2. Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.8", GitCommit:"7061dbbf75f9f82e8ab21f9be7e8ffcaae8e0d44", GitTreeState:"clean", BuildDate:"2022-03-16T14:10:06Z", GoVersion:"go1.16.15", Compiler:"gc", Platform:"darwin/arm64"}
复制代码
  1. ➜  ~ kubectl get pod -A
  2. NAMESPACE          NAME                                              READY   STATUS    RESTARTS   AGE
  3. calico-apiserver   calico-apiserver-bf576f79d-ljtst                  1/1     Running   0          105m
  4. calico-apiserver   calico-apiserver-bf576f79d-tmmxm                  1/1     Running   0          105m
  5. calico-system      calico-kube-controllers-78687bb75f-86nm6          1/1     Running   0          106m
  6. calico-system      calico-node-njxv4                                 1/1     Running   0          106m
  7. calico-system      calico-typha-59df5f67b9-hmngq                     1/1     Running   0          106m
  8. calico-system      csi-node-driver-5l6nk                             2/2     Running   0          106m
  9. kube-system        coredns-78fcd69978-gvzh8                          1/1     Running   0          106m
  10. kube-system        coredns-78fcd69978-xfftz                          1/1     Running   0          106m
  11. kube-system        etcd-izwz9h7q9tnbtp2qnzu8prz                      1/1     Running   0          107m
  12. kube-system        kube-apiserver-izwz9h7q9tnbtp2qnzu8prz            1/1     Running   0          107m
  13. kube-system        kube-controller-manager-izwz9h7q9tnbtp2qnzu8prz   1/1     Running   0          107m
  14. kube-system        kube-proxy-cqsgp                                  1/1     Running   0          106m
  15. kube-system        kube-scheduler-izwz9h7q9tnbtp2qnzu8prz            1/1     Running   0          107m
  16. tigera-operator    tigera-operator-6f669b6c4f-7tssg                  1/1     Running   0          106m
复制代码
选择版本


helloworld应用的运行和部署方式

开发helloworld应用

  1. go get k8s.io/client-go@v0.22.8
  2. go get k8s.io/client-go/rest@v0.22.8
  3. go get k8s.io/client-go/tools/clientcmd@v0.22.8
  4. go get k8s.io/client-go/discovery@v0.22.8
复制代码
  1. package main
  2. import (
  3.         "context"
  4.         "flag"
  5.         "fmt"
  6.         "path/filepath"
  7.         "k8s.io/apimachinery/pkg/api/errors"
  8.         metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
  9.         "k8s.io/client-go/kubernetes"
  10.         "k8s.io/client-go/tools/clientcmd"
  11.         "k8s.io/client-go/util/homedir"
  12. )
  13. func main() {
  14.         var kubeconfig *string
  15.         // 试图取到当前账号的家目录
  16.         if home := homedir.HomeDir(); home != "" {
  17.                 // 如果能取到,就把家目录下的.kube/config作为默认配置文件
  18.                 kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file")
  19.         } else {
  20.                 // 如果取不到,就没有默认配置文件,必须通过kubeconfig参数来指定
  21.                 kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file")
  22.         }
  23.         flag.Parse()
  24.         // 加载配置文件
  25.         config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
  26.         if err != nil {
  27.                 panic(err.Error())
  28.         }
  29.         // 用clientset类来执行后续的查询操作
  30.         clientset, err := kubernetes.NewForConfig(config)
  31.         if err != nil {
  32.                 panic(err.Error())
  33.         }
  34.         namespace := "kube-system"
  35.         // 查询pod列表
  36.         pods, err := clientset.CoreV1().Pods(namespace).List(context.TODO(), metav1.ListOptions{})
  37.         if err != nil {
  38.                 panic(err.Error())
  39.         }
  40.         nums := len(pods.Items)
  41.         fmt.Printf("There are %d pods in the cluster\n", nums)
  42.         // 如果没有pod就返回了
  43.         if nums < 1 {
  44.                 return
  45.         }
  46.         // 遍历列表中的每个pod
  47.         for index, pod := range pods.Items {
  48.                 fmt.Printf("%v. pod name : %v\n", index, pod.Name)
  49.                 // 用pod name精确搜索单个pod
  50.                 podObj, err := clientset.CoreV1().Pods(namespace).Get(context.TODO(), pod.Name, metav1.GetOptions{})
  51.                 if errors.IsNotFound(err) {
  52.                         fmt.Printf("Pod %s in namespace %s not found\n", pod.Name, namespace)
  53.                 } else if statusError, isStatus := err.(*errors.StatusError); isStatus {
  54.                         fmt.Printf("Error getting pod %s in namespace %s: %v\n",
  55.                                 pod.Name, namespace, statusError.ErrStatus.Message)
  56.                 } else if err != nil {
  57.                         panic(err.Error())
  58.                 } else {
  59.                         fmt.Printf("Found pod %s in namespace %s\n", podObj.Name, namespace)
  60.                 }
  61.         }
  62. }
复制代码
  1. There are 7 pods in the cluster
  2. 0. pod name : coredns-78fcd69978-gvzh8
  3. Found pod coredns-78fcd69978-gvzh8 in namespace kube-system
  4. 1. pod name : coredns-78fcd69978-xfftz
  5. Found pod coredns-78fcd69978-xfftz in namespace kube-system
  6. 2. pod name : etcd-izwz9h7q9tnbtp2qnzu8prz
  7. Found pod etcd-izwz9h7q9tnbtp2qnzu8prz in namespace kube-system
  8. 3. pod name : kube-apiserver-izwz9h7q9tnbtp2qnzu8prz
  9. Found pod kube-apiserver-izwz9h7q9tnbtp2qnzu8prz in namespace kube-system
  10. 4. pod name : kube-controller-manager-izwz9h7q9tnbtp2qnzu8prz
  11. Found pod kube-controller-manager-izwz9h7q9tnbtp2qnzu8prz in namespace kube-system
  12. 5. pod name : kube-proxy-cqsgp
  13. Found pod kube-proxy-cqsgp in namespace kube-system
  14. 6. pod name : kube-scheduler-izwz9h7q9tnbtp2qnzu8prz
  15. Found pod kube-scheduler-izwz9h7q9tnbtp2qnzu8prz in namespace kube-system
复制代码
欢迎关注博客园:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4