kubernetes 开发入门之获取pod信息
来源:互联网 发布:广发手机证券交易软件 编辑:程序博客网 时间:2024/06/01 07:28
之前写了很多kubernetes源码阅读的文章,今天介绍一下kubernetes开发入门,kubernetes提供了一个client-go,它里面封装了kubernetes的相关操作,分为两种情况,在集群内核集群之外
先说一下集群内
package mainimport ( "fmt" "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest")func main() { // creates the in-cluster config config, err := rest.InClusterConfig() if err != nil { panic(err.Error()) } // creates the clientset clientset, err := kubernetes.NewForConfig(config) if err != nil { panic(err.Error()) } for { pods, err := clientset.CoreV1().Pods("").List(metav1.ListOptions{}) if err != nil { panic(err.Error()) } fmt.Printf("There are %d pods in the cluster\n", len(pods.Items)) time.Sleep(10 * time.Second) }}
代码很简单,其实是通过kubernetes自身的服务发现去完成的,kubernetes自带的service;访问token也通过secret的方式注入到容器里面,这样容器里面就可以调用kubernetes的api了。
如果是集群之外去访问的话就只能通过kubeconfig文件了。
package mainimport ( "flag" "fmt" "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/cache" "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/clientcmd" // Uncomment the following line to load the gcp plugin (only required to authenticate against GKE clusters). // _ "k8s.io/client-go/plugin/pkg/client/auth/gcp")func main() { kubeconfig := flag.String("kubeconfig", "/mnt/go/src/k8s.io/client-go/examples/out-of-cluster/config", "absolute path to the kubeconfig file") flag.Parse() // uses the current context in kubeconfig config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) if err != nil { panic(err.Error()) } // creates the clientset clientset, err := kubernetes.NewForConfig(config) if err != nil { panic(err.Error()) } watchlist := cache.NewListWatchFromClient(clientset.Core().RESTClient(), "pods", v1.NamespaceDefault, fields.Everything()) _, controller := cache.NewInformer( watchlist, &v1.Pod{}, time.Second * 0, cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { fmt.Printf("add: %s \n", obj) }, DeleteFunc: func(obj interface{}) { fmt.Printf("delete: %s \n", obj) }, UpdateFunc:func(oldObj, newObj interface{}) { fmt.Printf("old: %s, new: %s \n", oldObj, newObj) }, }, ) stop := make(chan struct{}) go controller.Run(stop) for { pods, err := clientset.CoreV1().Pods("").List(metav1.ListOptions{}) if err != nil { panic(err.Error()) } fmt.Printf("There are %d pods in the cluster\n", len(pods.Items)) time.Sleep(10 * time.Second) }}
上面代码通过kubeconfig建立连接,通过watchlist的方式监听pods的变化,监听add/delete/update事件。
阅读全文
0 0
- kubernetes 开发入门之获取pod信息
- Kubernetes组件之Pod
- kubernetes之Pod详解
- Kubernetes之Pod调度
- Kubernetes之Pod详解
- Kubernetes之Pod调度
- kubernetes之pod状态分析
- Kubernetes之深入了解Pod
- Kubernetes 对象之Pod(重点)
- Kubernetes 学习之入门
- kubernetes源码阅读之kubelet pod之来源
- Kubernetes对象之Pod详解(附安装部署方法)
- Kubernetes单Pod操作
- Kubernetes技术分析之入门
- Kubernetes单Pod启动sonarqube
- Kubernetes中pod创建流程
- Kubernetes的Pod网络设置
- kubernetes--pod的生命周期管理
- eclipse中配置Tomcat
- centos 7.x下,安装vscode
- 自定制 UITableViewHeaderFooterView 加载不上视图问题
- Android:Activity中的数据传递
- 给工厂分配销售组织/分销渠道
- kubernetes 开发入门之获取pod信息
- java运算符优先级记忆口诀
- 《Java EE 互联网轻量级框架整合开发——SSM+Redis实现》7月初即将上市
- 所有的教学网站及牛人博客分享
- 多态理解,方法重写分析,类继承与接口实现中,方法重写的实现机制的区别
- idea/eclipse远程调试Tomcat
- 欢迎使用CSDN-markdown编辑器
- StringUtils 中isEmpty 和 isBlank区别
- LVDS接口分类,时序,输出格式