首页 文章 精选 留言 我的

精选列表

搜索[k8s],共3940篇文章
优秀的个人博客,低调大师

k8s 机器学习工具包 Kubeflow 发布 1.0 稳定版

Kubeflow 首个重要版本 1.0 已发布,Kubeflow 原本称作TensorFlow Extended,是谷歌内部用于将TensorFlow 模型部署到 Kubernetes 的平台,现在的的名称取自Kubernetes+Tensorflow。Kubeflow 也是首个针对 Kubernetes,提供可移植与可扩展的机器学习解决方案,让用户利用机器学习来调度在 Kubernetes 上执行的复杂工作流。 随着此版本的发布,一批用于在 Kubernetes 上有效开发、构建、训练和部署模型的稳定应用程序也即将毕业,这些应用包括: Kubeflow UI:Central Dashboard Jupyter notebook 控制器和web app 用于分布式训练的Tensorflow Operator(TFJob) 和PyTorch Operator 用于部署和升级的kfctl Profile controller和用于多用户管理的 UI 接下来还会有许多工具在 Kubeflow 中逐渐成熟,例如内置在 Serverless 管理平台 Knative 之上的自定义资源 KFServing,可帮助用户部署和管理机器学习模型,其模型的“可解释性”功能正处于Alpha 测试阶段。除此之外,还有可用于定义复杂机器学习工作流程的工具 Pipelines;可追踪数据集、作业和模型的 Metadata;超参数(hyper-parameter)调校工具 Katib,这些工具都处于 beta 测试阶段,在未来的发布版本会陆续加入 Kubeflow 1.0。 详细更新内容和细节点此查看。

优秀的个人博客,低调大师

云原生生态周报 Vol. 14 | K8s CVE 修复指南

业界要闻 1 Mesosphere公司正式更名为 D2IQ, 关注云原生Mesosophere公司日前发布[官方声明](https://mp.weixin.qq.com/s/nxEEESqxQv5pxwtoDn0gJQ)正式更名为:D2iQ(Day-Two-I-Q),称关注点转向Kubernetes与云原生领域, 并会继续将“Mesosphere”作为产品技术和品牌的一部。 2 Kubernetes 两个安全漏洞修复指南 2.1 Kubernetes API server 暴出安全漏洞(CVE-2019-11247),该漏洞使得指定了命名空间权限的请求可以访问到集群级别权限的自定义资源(CR),漏洞产生的主要原因在于CRD的服务API没有检查请求的命名空间范围(namespaceScope)。 漏洞涉及的版本包括: Kubernet

优秀的个人博客,低调大师

K8S 从懵圈到熟练:读懂此文,集群节点不下线!

阿里妹导读:排查完全陌生的问题、不熟悉的系统组件,对许多工程师来说是无与伦比的工作乐趣,当然也是一大挑战。今天,阿里巴巴售后技术专家声东跟大家分享一例 Kubernetes 集群上的问题。这个问题影响范围较广,或许某天你也会遇到。更重要的是,作者在问题排查过程中的思路和方法,也会让你有所启发。 关于问题 I am Not Ready 阿里云有自己的 Kubernetes 容器集群产品。随着 Kubernetes 集群出货量剧增,线上用户零星地发现,集群会非常低概率地出现节点 NotReady 情况。据我们观察,这个问题差不多每个月,都会有一两个用户遇到。在节点 NotReady 之后,集群 Master 没有办法对这个节点做任何控制,比如下发新的 Pod,再比如抓取节点上正在运行 Pod 的实时信息。 需要知道的Kubernetes知识 这

优秀的个人博客,低调大师

通过阿里云K8S Ingress Controller实现路由配置的动态更新

简介 在Kubernetes集群中,Ingress作为集群内服务对外暴露的访问接入点,其几乎承载着集群内服务访问的所有流量。我们知道,Nginx Ingress Controller是Kubernetes社区很重要的一个子项目,其内部主要依托于高性能的负载均衡软件Nginx,将Kubernetes Ingress资源对象实时地自动化转换为Nginx配置规则来对外提供期望的授权访问入口。 现实问题 当随着Kubernetes集群中部署的微服务越来越多,对外暴露的路由规则越来越复杂,服务后端Endpoint变化的越来越频繁,那么对应地都会引起Nginx Ingress Controller组件内Nginx配置文件的变化越来越频繁;而我们知道,任何一行Nginx配置的变化,都需要Reload Nginx才能生效,这在变化频率较低的场景下索性还

优秀的个人博客,低调大师

k8s与日志--采用golang实 现Fluent Bit的output插件

s" "time" "unsafe" "github.com/Shopify/sarama" "github.com/fluent/fluent-bit-go/output" "github.com/ugorji/go/codec" ) var ( brokers []string producer sarama.SyncProducer timeout = 0 * time.Minute topic string module string messageKey string ) //export FLBPluginRegister func FLBPluginRegister(ctx unsafe.Pointer) int { return output.FLBPluginRegister(ctx, "out_kafka", "Kafka Output Plugin.!") } //export FLBPluginInit // ctx (context) pointer to fluentbit context (state/ c code) func FLBPluginInit(ctx unsafe.Pointer) int { if bs := output.FLBPluginConfigKey(ctx, "brokers"); bs != "" { brokers = strings.Split(bs, ",") } else { log.Printf("you must set brokers") return output.FLB_ERROR } if tp := output.FLBPluginConfigKey(ctx, "topics"); tp != "" { topic = tp } else { log.Printf("you must set topics") return output.FLB_ERROR } if mo := output.FLBPluginConfigKey(ctx, "module"); mo != "" { module = mo } else { log.Printf("you must set module") return output.FLB_ERROR } if key := output.FLBPluginConfigKey(ctx, "message_key"); key != "" { messageKey = key } else { log.Printf("you must set message_key") return output.FLB_ERROR } config := sarama.NewConfig() config.Producer.Return.Successes = true if required_acks := output.FLBPluginConfigKey(ctx, "required_acks"); required_acks != "" { if acks, err := strconv.Atoi(required_acks); err == nil { config.Producer.RequiredAcks = sarama.RequiredAcks(acks) } } if compression_codec := output.FLBPluginConfigKey(ctx, "compression_codec"); compression_codec != "" { if codec, err := strconv.Atoi(compression_codec); err == nil { config.Producer.Compression = sarama.CompressionCodec(codec) } } if max_retry := output.FLBPluginConfigKey(ctx, "max_retry"); max_retry != "" { if max_retry, err := strconv.Atoi(max_retry); err == nil { config.Producer.Retry.Max = max_retry } } if timeout == 0 { timeout = 5 * time.Minute } // If Kafka is not running on init, wait to connect deadline := time.Now().Add(timeout) for tries := 0; time.Now().Before(deadline); tries++ { var err error if producer == nil { producer, err = sarama.NewSyncProducer(brokers, config) } if err == nil { return output.FLB_OK } log.Printf("Cannot connect to Kafka: (%s) retrying...", err) time.Sleep(time.Second * 30) } log.Printf("Kafka failed to respond after %s", timeout) return output.FLB_ERROR } //export FLBPluginFlush // FLBPluginFlush is called from fluent-bit when data need to be sent. is called from fluent-bit when data need to be sent. func FLBPluginFlush(data unsafe.Pointer, length C.int, tag *C.char) int { var h codec.MsgpackHandle var b []byte var m interface{} var err error b = C.GoBytes(data, length) dec := codec.NewDecoderBytes(b, &h) // Iterate the original MessagePack array var msgs []*sarama.ProducerMessage for { // decode the msgpack data err = dec.Decode(&m) if err != nil { if err == io.EOF { break } log.Printf("Failed to decode msgpack data: %v\n", err) return output.FLB_ERROR } // Get a slice and their two entries: timestamp and map slice := reflect.ValueOf(m) data := slice.Index(1) // Convert slice data to a real map and iterate mapData := data.Interface().(map[interface{}]interface{}) flattenData, err := Flatten(mapData, "", UnderscoreStyle) if err != nil { break } message := "" host := "" for k, v := range flattenData { value := "" switch t := v.(type) { case string: value = t case []byte: value = string(t) default: value = fmt.Sprintf("%v", v) } if k == "pod_name" { host = value } if k == messageKey { message = value } } if message == "" || host == "" { break } m := &sarama.ProducerMessage{ Topic: topic, Key: sarama.StringEncoder(fmt.Sprintf("host=%s|module=%s", host, module)), Value: sarama.ByteEncoder(message), } msgs = append(msgs, m) } err = producer.SendMessages(msgs) if err != nil { log.Printf("FAILED to send kafka message: %s\n", err) return output.FLB_ERROR } return output.FLB_OK } //export FLBPluginExit func FLBPluginExit() int { producer.Close() return output.FLB_OK } func main() { } FLBPluginExit 插件退出的时候需要执行的一些方法,比如关闭连接。 FLBPluginRegister 注册插件 FLBPluginInit 插件初始化 FLBPluginFlush flush到数据到output FLBPluginConfigKey 获取配置文件中参数 PS 当然除了FLBPluginConfigKey之外,也可以通过获取环境变量来获得设置参数。 ctx相当于一个上下文,负责之间的数据的传递。 编译和执行 编译的时候 go build -buildmode=c-shared -o out_kafka.so . 生成out_kafka.so 执行的时候 /fluent-bit/bin/fluent-bit" -c /fluent-bit/etc/fluent-bit.conf -e /fluent-bit/out_kafka.so 总结 采用类似的编写结构,就可以定制化自己的输出插件了。 本文转自SegmentFault-k8s与日志--采用golang实现Fluent Bit的output插件

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册