2022-01-17 在pod内部操作k8s
目录
摘要:
使用模块:
例子:
说明:
pod的接口:
摘要:
因为某些业务需要在pod内部直接操作k8s, 本文记录如何处理.
使用模块:
client-go标准接口:
https://github.com/kubernetes/client-go
例子:
在pod内访问k8s:
https://github.com/kubernetes/client-go/tree/master/examples/in-cluster-client-configuration
/*
Copyright 2016 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
// Note: the example only works with the code within the same release/branch.
package main
import (
"context"
"fmt"
"time"
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
//
// Uncomment to load all auth plugins
// _ "k8s.io/client-go/plugin/pkg/client/auth"
//
// Or uncomment to load specific auth plugins
// _ "k8s.io/client-go/plugin/pkg/client/auth/azure"
// _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
// _ "k8s.io/client-go/plugin/pkg/client/auth/oidc"
// _ "k8s.io/client-go/plugin/pkg/client/auth/openstack"
)
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 {
// get pods in all the namespaces by omitting namespace
// Or specify namespace to get pods in particular namespace
pods, err := clientset.CoreV1().Pods("").List(context.TODO(), metav1.ListOptions{})
if err != nil {
panic(err.Error())
}
fmt.Printf("There are %d pods in the cluster\n", len(pods.Items))
// Examples for error handling:
// - Use helper functions e.g. errors.IsNotFound()
// - And/or cast to StatusError and use its properties like e.g. ErrStatus.Message
_, err = clientset.CoreV1().Pods("default").Get(context.TODO(), "example-xxxxx", metav1.GetOptions{})
if errors.IsNotFound(err) {
fmt.Printf("Pod example-xxxxx not found in default namespace\n")
} else if statusError, isStatus := err.(*errors.StatusError); isStatus {
fmt.Printf("Error getting pod %v\n", statusError.ErrStatus.Message)
} else if err != nil {
panic(err.Error())
} else {
fmt.Printf("Found example-xxxxx pod in default namespace\n")
}
time.Sleep(10 * time.Second)
}
}
说明:
# Authenticating inside the cluster
This example shows you how to configure a client with client-go to authenticate
to the Kubernetes API from an application running inside the Kubernetes cluster.
client-go uses the [Service Account token][sa] mounted inside the Pod at the
`/var/run/secrets/kubernetes.io/serviceaccount` path when the
`rest.InClusterConfig()` is used.
## Running this example
First compile the application for Linux:
cd in-cluster-client-configuration
GOOS=linux go build -o ./app .
Then package it to a docker image using the provided Dockerfile to run it on
Kubernetes.
If you are running a [Minikube][mk] cluster, you can build this image directly
on the Docker engine of the Minikube node without pushing it to a registry. To
build the image on Minikube:
eval $(minikube docker-env)
docker build -t in-cluster .
If you are not using Minikube, you should build this image and push it to a registry
that your Kubernetes cluster can pull from.
If you have RBAC enabled on your cluster, use the following
snippet to create role binding which will grant the default service account view
permissions.
```
kubectl create clusterrolebinding default-view --clusterrole=view --serviceaccount=default:default
```
Then, run the image in a Pod with a single instance Deployment:
kubectl run --rm -i demo --image=in-cluster
There are 4 pods in the cluster
There are 4 pods in the cluster
There are 4 pods in the cluster
...
The example now runs on Kubernetes API and successfully queries the number of
pods in the cluster every 10 seconds.
### Clean up
To stop this example and clean up the pod, press <kbd>Ctrl</kbd>+<kbd>C</kbd> on
the `kubectl run` command and then run:
kubectl delete deployment demo
[sa]: https://kubernetes.io/docs/admin/authentication/#service-account-tokens
[mk]: https://kubernetes.io/docs/getting-started-guides/minikube/
pod的接口:
// 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
}
相关文章
- android sqlite #039;,问题详情_百度云推送_免费专业最精准的移动推送服务平台
未解决报错 SIGSEGV(SEGV_MAPERR)#31863个回答push_client_sdk_for_android6.0.0Nicholas_lol1 2017-12-21问:跟踪日志#00 pc 001e5672 /system/lib/libart.so (std::__1::__tree_iterator<:__1::__value_type art::safemap int std::__1::set std::__1::less>…...
2023/3/26 20:15:33 - vue 给取data值_在Vue中获取自定义属性方法:data-id的实例
获取自定义属性的方法:第一步:首先在标签上绑定上click"getDateId(item.id)",并将属性值传到绑定的事件里面第二步:在标签上继续绑定:date-id "item.id"属性第三步:在methods: {getDataId(id) {c…...
2023/3/26 20:15:10 - pca的python源代码_PCA python代码实现
PCA python代码实现#coding:utf-8from numpy import *import matplotlibimport matplotlib.pyplot as pltdef loadDataSet(fileName, delimt):fr open(fileName)stringArr [line.strip().split(delim) for line in fr.readlines()]datArr [map(float,line) for line in stri…...
2023/3/26 20:15:09 - 安卓自定义view(全面)
安卓自定义view 一、view的测量 1.测量的模式: EXACTLY :精确值模式,当把空间的layout_width属性或者layout_height的属性设置为具体的数值时,或者指定为match_parent时候,系统就是使用的EXACTLY 模式;AT_MOST: 最大…...
2023/3/26 20:15:06 - 手机上免费的C语言,C语言秘笈手机软件免费阅读可下载
C语言秘笈是款C语言学习的软件,C语言是学编程的基本,手机软件里边有比较丰富的实例教程和資源,特别适合程序编写的新手开展学习培训,客户在这儿可以学习培训到最基本的C语言,让客户可以迅速的把握C语言的基本。C语言秘…...
2023/3/26 20:14:03 - 苏宁!你还挺得过去吗?(苏宁大幅裁员)
前两天才写了一篇《作为一个江苏人,我眼中的苏宁》, 说实话,我内心是有点不太相信,偌大的苏宁会走到今天这步田地。 可一件件传闻都慢慢变成了实锤! 一、苏宁大裁员 一位多年老友刚跳槽去了苏宁; 入职一…...
2023/3/26 20:13:44 - Android设置页面PreferenceFragment使用详细+代码分析
Android设置页面PreferenceFragment使用详细 文章目录Android设置页面PreferenceFragment使用详细一 设置页面核心代码二 设置页面布局核心代码三SettingFragment核心代码四 setting.xml核心代码五 本文例子一份六 尾言 本文Demo 一 设置页面核心代码 /* * 创建者: KX * …...
2023/3/26 20:12:03 - 我爸说我应该感恩
是的,我知道,这个世界很多人都帮过我。 但是,面对家里的那些亲戚,我知道我不理他们,他们也没有义务理我。 我应该记住感恩。别人的生活,我并没有深入接触,我不了解。我的生活,我的选…...
2023/3/26 20:10:21 - 【计算机网络】对时延带宽积的理解
0.传播时延和带宽 传播时延: 指电磁信号或光信号在传输介质中传播一定的距离所花费的时间,即从发送端发送数据开始,到接收端收到数据,总共经历的时间。 带宽:单位时间内网络中的某信道所能通过的“最高数据率”,单位是…...
2023/3/26 20:10:12 - 推荐系统概述推荐系统算法简介
文章目录一. 推荐系统概述1. 推荐系统目的2. 推荐系统的应用3. 推荐系统的基本思想数据分析(数据源)4. 推荐系统的分类二. 推荐系统算法简介1. 基于人口统计学的推荐算法2. 基于内容的推荐算法3. 基于协同过滤(行为数据)4. 混合推…...
2023/3/26 20:07:47 - Android设置页面之PreferenceFragment的简单使用示例
1.PreferenceFragment介绍 a.PreferenceFragment实际为Fragment的一个子类 b.创建一个PreferenceFragment需要绑定一个xml来显示视图 c.绑定后没就可以当作普通Fragment使用,只是每new一个实例就会创建一个SharePreference,把之前绑定的xml中的值写入保存&#x…...
2023/3/26 20:04:50 - 遗传算法原理与应用详解
遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 。 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。因此在介绍遗传算法前有必要简单的介绍生物进化知识。 一.进化论知识 作为遗传算法生物背景的介绍࿰…...
2023/3/26 20:01:09 - ubuntu端口映射
echo 1 >/proc/sys/net/ipv4/ip_forward sudo iptables -t nat -A PREROUTING -d xxx.xxx.xxx.xxx -p tcp --dport 8000 -j DNAT --to-destination xxx.x.x.x:80 可以使用命令:iptables -t nat --list检查nat列表信息: Nat列表信息删除:…...
2023/3/26 20:00:13 - CSDN博客的简易使用
CSDN博客简易使用 在CSDN上写博客,总是遇到很多问题,虽然这些问题很简单,但是对于新手来说,缺经常遇到,因此写篇博客记载。 一、CSDN的博客如何上传图片 如果有现成的 图片就选择文件路径,没有是截图的话&…...
2023/3/26 20:00:03 - IT舔狗日记完全整理版,舔狗日记说说经典语录
“舔狗”是一种多么神奇的存在?让最近很火的“舔狗日记”带你感受!下面整理了来自各个渠道(包括大家发的评论)的内容,凑足了一个月的份额!舔狗日记 3月1日 雨今天你终于通过我好友了,打招呼的方式还是那么别致,一个阿玛尼包包的淘宝链接,我从兄弟那边借了3000,很快给…...
2023/3/26 19:58:46 - 共阳极管的代码_《手把手教你学FPGA》第三章设计实例
设计实例3.1.1 流水灯设计3.1.1 试验任务8个LED灯依次顺序点亮,产生流水效果,相邻LED灯发光时间间隔大约为0.5s,人眼可以明显感知到这个间隔。3.1.2 程序设计1、设计思路通过控制1/O口的高低电平可以实现LED发光或者熄灭,但是该怎样使用计数器…...
2023/3/26 19:55:44 - c语言小波分解csdn,小波总结
小波学习小波去噪方法一原理:因为噪声通常位于图像的高频部分,去除图像的高频部分,使用低频部分恢复图像。方法:对图像进行多级小波分解,舍去图像的水平细节子带,垂直细节子带,和对角线细节子带…...
2023/3/26 19:52:20 - jrebel使用
背景与愿景:开发环境下,tomcat对热布署的支持还不够全面,致使开发人员浪费大量时间在重起服务上。为了提高开发效率,决定引入Jrebel,它对热布署的支持相对比较全面。虽然Jrebel官方号称使用它不存在内存泄漏问题&#…...
2023/3/26 19:51:09 - C# 学生管理系统源码(含数据库)
【实例简介】简单的增删改查功能,适合初学者借鉴 请先附加数据库,否则无法进入系统(默认账户123,密码321) 文件:590m.com/f/25127180-488082951-100d8d(访问密码:551685࿰…...
2023/3/26 19:50:11 - 全球及中国吊顶行业研究及十四五规划分析报告
中国是最大的市场,约占59%的市场份额,其次是欧洲和美国,约占33%的市场份额。 主要的生产厂商有Armstrong, Saint-Gobain, Hunter, OWA, ROCKWOOL International, SAS International, Siniat, Hufcor, YOUPON INTEGRATED CEILING, Ouraohua等。…...
2023/3/26 19:49:49
最新文章
- 2022-01-17 在pod内部操作k8s
目录 摘要: 使用模块: 例子: 说明: pod的接口: 摘要: 因为某些业务需要在pod内部直接操作k8s, 本文记录如何处理. 使用模块: client-go标准接口: https://github.com/kubernetes/client-go 例子: 在pod内访问k8s: https://github.com/kubernetes/client-go/tree/maste…...
2023/3/26 20:17:02 - 常见网络安全攻击路径分析与防护建议
攻击路径是指网络攻击者潜入到企业内部网络应用系统所采取的路径,换句话说,也就是攻击者进行攻击时所采取的相关措施。攻击途径通常代表着有明确目的性的威胁,因为它们会经过详细的准备和规划。从心怀不满的内部人员到恶意黑客、间谍团伙&…...
2023/3/26 20:16:45 - 手撸一个Table组件(Table组件不过如此)
一、前言 手写Table组件这个文章我一直都想写,今天终于得空来写它了。小编认为Table组件是组件库里"较为复杂"的一个组件,因为它的扩展性非常强,并且它的基础样式如何去写都非常考究,那么今天我就带大家来实现一个基础…...
2023/3/26 20:16:27 - ROS实验笔记之——FAST-LIVO
最近IROS22的FAST-LVIO源码开源了,笔者赶紧测试一下。 源码链接:GitHub - hku-mars/FAST-LIVO: A Fast and Tightly-coupled Sparse-Direct LiDAR-Inertial-Visual Odometry. 论文连接:https://arxiv.org/pdf/2203.00893.pdf 配置过程 首…...
2023/3/26 20:16:24 - 【Linux】基础IO ——中
🎇Linux:基础IO 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看…...
2023/3/26 20:16:21 - 算法导论习题(1):摔杯子
选自Algorithm Design第二章第8题 1 题目描述 你正在对各种型号的玻璃罐进行一些压力测试,以确定它们可以跌落且不会破裂的高度。 在特定类型的玻璃罐上,此实验的设置如下:你有一个有 n 个梯级的梯子,你想找到最高的梯级…...
2023/3/26 20:16:15 - 「文档数据库之争」MongoDB和CouchDB的比较
MongoDB和CouchDB都是基于文档的NoSQL数据库类型。文档数据库又称mdocument store,通常用于存储半结构化数据的文档格式及其详细描述。它允许创建和更新程序,而不需要引用主模式。移动应用程序中的内容管理和数据处理是可以应用文档存储的两个字段。Mong…...
2023/3/26 20:16:14 - 【博客569】mysql主备容灾演练:主库异常无法恢复,备库提升为主库以及设置新备库
mysql主备容灾演练:主库异常无法恢复,备库提升为主库以及设置新备库 适用场景 mysql主备集群在主库所在节点异常,且无法恢复的时候,将备库提升为主库,并设置新的备库 设置新备库 1、准备新的机器,并部署好…...
2023/3/26 20:15:56 - CTFHUB技能树-SSRF-redis协议踩坑
在gopherus上面输入命令:python gophers.py --exploit redis 将自动生成的代码url解密可以得到 如果是get传参需要再进行一次url编码 虽然蚁剑连接不上但可以用urlshell?cmdls / 获取flag 接下来看可以连接蚁剑的代码 文件名最好还是用shell.php 我测试了s.…...
2023/3/26 20:15:37 - android sqlite #039;,问题详情_百度云推送_免费专业最精准的移动推送服务平台
未解决报错 SIGSEGV(SEGV_MAPERR)#31863个回答push_client_sdk_for_android6.0.0Nicholas_lol1 2017-12-21问:跟踪日志#00 pc 001e5672 /system/lib/libart.so (std::__1::__tree_iterator<:__1::__value_type art::safemap int std::__1::set std::__1::less>…...
2023/3/26 20:15:33 - 前端动画的另一种方式 json动画
前言 一谈到前端动画,最先想到的就是css3,当然这是其中一种方式,甚至有许多动画库,aniamte.css就是其中的一种。 我之前也谈到过三种做前端动画的方式 https://blog.csdn.net/glorydx/article/details/116102127 但现在&#x…...
2023/3/26 20:15:18 - l1和l2接口如何进行编写?一定要掌握这几个元素
在这个大数据时代,很多地方都需要用到l1和l2接口,l1和l2接口在应用程序与数据库之间起着桥梁的作用,是实现数据的整合与共享的重要帮手。 l1和l2接口适用于各行各业,应用场景的不断拓展,l1和l2接口的发展也兴起&#…...
2023/3/26 20:15:17 - 937页(39万字)智能矿山项目建设整体解决方案(煤矿)
【版权声明】本资料来源网络,仅用于行业知识分享,供个人学习参考,请勿商用。【侵删致歉】如有侵权请联系小编,将在收到信息后第一时间进行删除!完整资料领取见文末,部分资料内容: 1.1.1 煤矿一张…...
2023/3/26 20:15:16 - 华为OD机试真题Python实现【去重求和】真题+解题思路+代码(20222023)
去重求和 给定一个数组,编写一个函数, 计算他的最大N个数和最小N个数的和, 需要对数组进行去重。 🔥🔥🔥🔥🔥👉👉👉👉👉👉 华为OD机试(Python)真题目录汇总 输入 第一行输入M,M表示数组大小 第二行输入M个数,表示数组内容 第三行输入N表示需要…...
2023/3/26 20:15:15 - 【面试官让我十分钟实现一个链表?一个双向带头循环链表甩给面试官】
我们在面试中面试官一般都会让我们现场写代码,如果你面试的时候面试官让你十分钟写一个链表,你是不是懵逼了?十分钟写一个链表,怎么可能?事实上是有可能的,十分钟写出的链表也能震惊面试官。 我们学习单链…...
2023/3/26 20:15:14 - 分治策略与递归
目录分治策略分治概念递归概念分治策略的特征分治法步骤举例阶乘斐波那契数列打印数组数组中查找元素分治策略 分治概念 任何可以用计算机求解的问题所需要的时间都与其规模有关。问题规模越小,所解题所需要的时间就越小,从而也较容易处理。例如&#…...
2023/3/26 20:15:11 - vue 给取data值_在Vue中获取自定义属性方法:data-id的实例
获取自定义属性的方法:第一步:首先在标签上绑定上click"getDateId(item.id)",并将属性值传到绑定的事件里面第二步:在标签上继续绑定:date-id "item.id"属性第三步:在methods: {getDataId(id) {c…...
2023/3/26 20:15:10 - pca的python源代码_PCA python代码实现
PCA python代码实现#coding:utf-8from numpy import *import matplotlibimport matplotlib.pyplot as pltdef loadDataSet(fileName, delimt):fr open(fileName)stringArr [line.strip().split(delim) for line in fr.readlines()]datArr [map(float,line) for line in stri…...
2023/3/26 20:15:09 - 安卓自定义view(全面)
安卓自定义view 一、view的测量 1.测量的模式: EXACTLY :精确值模式,当把空间的layout_width属性或者layout_height的属性设置为具体的数值时,或者指定为match_parent时候,系统就是使用的EXACTLY 模式;AT_MOST: 最大…...
2023/3/26 20:15:06 - 【vue系列-04】vue的表单数据收集、基本指令和自定义指令
vue的表单数据收集、指令一,vue的核心属性1,收集表单数据1.1,收集数据案例1.1.1,type类型的输入框1.1.2,radio类型的单选框1.1.3,checkbox类型的复选框1.1.4,select类型的下拉框1.2,…...
2023/3/26 20:14:50