K8s: 最佳实践经验之谈

Kubernetes最佳实践与进阶技巧 Kubernetes的调度器负责将Pod分配到集群中的节点上。在某些情况下,你可能希望定义自己的调度策略,以便更灵活地控制Pod的分配。这可以通过使用Node Affinity(节点亲和性)和Taints/Tolerations(污点与容忍度)等特性来实现。除了Node Affinity和Taints/Tolerations外,Kubernetes还支持自定义调度器。这允许你根据自己的需求编写调度逻辑,实现更灵活的Pod分配。 阅读详情

最佳实践


1 )普通配置

  • 定义配置时,请指定最新的稳定 API 版本
  • 在推送到集群之前,配置文件应存储在版本控制中
    • 这允许您在必要时快速回滚配置更改
    • 它还有助于集群重新创建和恢复
  • 使用 YAML 而不是 JSON 编写配置文件
    • 虽然这些格式几乎可以在所有场景中互换使用
    • 但 YAML往往更加用户友好
  • 只要有意义,就将相关对象分组到一个文件中 (推荐)
    • 一个文件通常比几个文件更容易管理
    • 另请注意,可以在目录上调用许多kubectl命令 (相比于上面,不推荐)
      • 例如,你可以在配置文件的目录中调用 kubectl apply

2 )关于“Naked”Pods 与 ReplicaSet,Deployment 和 Jobs

  • 如果可能,不要使用独立的 Pods
    • 即,未绑定到 ReplicaSet 或 Deployment 的 Pod
    • 如果节点发生故障,将不会重新调度独立的 Pods
  • Deployment 会创建一个 ReplicaSet 以确保所需数量的 Pod 始终可用
    • 并指定替换 Pod 的策略(例如 RollingUpdate)
    • 除了一些显式的restartPolicy: Never 场景之外
    • 几乎总是优先考虑直接创建 Pod
    • Job 也可能是合适的

3 )服务

  • 在创建相应的后端工作负载(Deployment 或 ReplicaSet)

  • 以及在需要访问它的任何工作负载之前创建服务

  • 当 Kubernetes 启动容器时,它提供指向启动容器时正在运行的所有服务的环境变量

  • 例如,如果存在名为 foo 的服务,则所有容器将在其初始环境中获得以下变量

    FOO_SERVICE_HOST=<the host the Service is running on>
    FOO_SERVICE_PORT=<the port the Service is running on>
    
  • 这确实意味着在顺序上的要求

    • 必须在 Pod 本身被创建之前创建 Pod 想要访问的任何 Service
    • 否则将环境变量不会生效,而 DNS 没有此限制
  • 一个可选(尽管强烈推荐)的集群插件 是 DNS 服务器

    • DNS 服务器为新的 Services 监视Kubernetes API,并为每个创建一组 DNS 记录
    • 如果在整个集群中启用了 DNS,则所有 Pods 应该能够自动对 Services 进行名称解析
      • Service 有虚拟ip, 这些ip会被注册在域名服务器DNS上
      • 所有worknode上的pod都能找到集群内的所有Service
  • 除非绝对必要,否则不要为 Pod 指定 hostPort

    • 就是 worknode 节点挂掉,Pod就没法调度了
    • 将 Pod 绑定到hostPort时,它会限制 Pod 可以调度的位置数
    • 因为每个 <hostIP, hostPort, protocol> 组合必须是唯一的
    • 如果没有明确指定 hostIP 和 protocol 时,
    • K8s 将使用 0.0.0.0 作为默认 hostIP 和 TCP 作为默认 protocol
    • 如果只需要访问端口以进行调试,则可以使用 apiserver proxy或 kubectl port-forward
  • 如果明确需要在节点上公开 Pod 的端口

    • 请在使用 hostPort 之前考虑使用 NodePort 服务
  • 避免使用 hostNetwork

    • 原因与 hostPort 相同。
  • 当不需要 kube-proxy 负载均衡时

    • 使用 无头服务(ClusterIP 被设置为 None)
    • 以便于服务发现

4 )使用标签

  • 定义并使用标签来识别应用程序 或 Deployment 的 语义属性

    • 例如 { app: myapp, tier: frontend, phase: test, deployment: v3 }
      • 这种属于应用分组,好处是互不影响
    • 你可以使用这些标签为其他资源选择合适的 Pod
    • 例如,一个选择所有 tier: frontend Pod 的服务
    • 或者 app: myapp 的所有 phase: test 组件
  • 通过从选择器中省略特定发行版的标签

    • 可以使服务跨越多个 Deployment
    • Deployment 可以在不停机的情况下轻松更新正在运行的服务
  • Deployment 描述了对象的期望状态,并且如果对该规范的更改被成功应用

    • 则 Deployment 控制器以受控速率将实际状态改变为期望状态

5 )容器镜像

  • imagePullPolicy和镜像标签会影响kubelet何时尝试拉取指定的镜像
    • imagePullPolicy: IfNotPresent:仅当镜像在本地不存在时才被拉取
    • imagePullPolicy: Always:每次启动 Pod 的时候都会拉取镜像
    • imagePullPolicy 省略时,镜像标签为 :latest 或不存在,使用 Always 值
    • imagePullPolicy 省略时,指定镜像标签并且不是 :latest,使用 IfNotPresent 值
    • imagePullPolicy: Never:假设镜像已经存在本地,不会尝试拉取镜像
  • 说明
    • 在生产中部署容器时应避免使用 :latest 标记
    • 因为这样更难跟踪正在运行的镜像版本,并且更难以正确回滚
    • 底层镜像驱动程序的缓存语义能够使即便 imagePullPolicy: Always 的配置也很高效
    • 例如,对于 Docker,如果镜像已经存在,则拉取尝试很快,因为镜像层都被缓存并且不需要下载

6 )使用 kubectl

  • 选择使用 $ kubectl apply -f 更灵活
  • 使用标签选择器进行 get 和 delete 操作,而不是特定的对象名称

7 )kubectl apply -f 和 kubectl create -f 区别

  • 行为差异

    • kubectl create -f
      • 这个命令用于根据提供的配置文件(通常是 YAML 或 JSON 格式)创建 Kubernetes 对象
      • 如果对应的资源已经存在,它会返回错误
      • 因此,在使用 create 命令之前,你需要确保资源对象不存在,或者先删除原有的资源对象
    • kubectl apply -f
      • 这个命令也是用于根据配置文件应用 Kubernetes 对象
      • 但是,如果资源对象已经存在,apply 命令会尝试更新对应的字段值和配置,而不是报错
      • 如果资源对象不存在,apply 命令会自动创建资源对象
      • 因此,apply 命令提供了更大的灵活性,既可以用于创建新对象,也可以用于更新现有对象
  • 记录差异

    • kubectl apply 命令通过将先前应用的配置写入资源的注释来维护配置记录
    • 这有助于计算下一次调用时的差异,从而精确地知道需要应用哪些更改
    • 这种机制使得 apply 命令在处理复杂的混合 IT 场景时特别有用
    • 相比之下,kubectl create 命令不会维护这样的记录
    • 它只是简单地根据提供的配置文件创建资源对象。
  • 其他选项

    • kubectl apply 还提供了许多可选的参数
    • 如 --force、–validate 和 --record 等,这些参数可以使更新操作更加精确和可控
    • 例如,–force 参数可以强制应用配置,即使某些字段可能会导致无效的资源定义
    • kubectl create 命令通常没有这么多可选参数,它主要关注于根据配置文件创建资源对象
  • 总的来说

    • kubectl apply -f 和 kubectl create -f 在行为、记录和其他选项方面存在显著差异
    • 选择使用哪个命令取决于你的具体需求,例如是否需要更新现有资源对象,是否需要维护配置记录等
    • 在大多数情况下,kubectl apply 可能是一个更灵活和强大的选择
    • 因为它既可以用于创建新对象,也可以用于更新现有对象
阿里云K8s部署详细教程 创建或更新。 阅读详情

相关推荐

Kubernetes(K8S)学习(三):K8S实战案例

本文介绍了在Kubernetes集群中使用NodePort方式部署WordPress和MySQL的完整流程。首先创建了wordpress命名空间,然后通过yaml文件分别部署MySQL数据库(配置了root和wordpress用户密码)和WordPress应用(需指定MySQL服务地址)。最后通过NodePort暴露WordPress服务端口30467,实现通过宿主机IP访问WordPress安装界面。整个过程涵盖了命名空间创建、yaml文件编写、资源部署、服务暴露等关键步骤,并提供了常用kubectl命令

꯭ 瞎꯭扯꯭蛋꯭的博客 4627

容器化的最佳实践:阿里内部出品,Docker+K8S实战文档

阿里巴巴,作为国内互联网公司的Top,算是业界的标杆,有阿里背景的程序员,也更具有权威性。作为程序员,都清楚阿里对于员工要求有多高,技术人员掌握的技术水平更是望尘莫及。所以,大厂程序员的很多经验也都值得我们借鉴和学习,在一定程度上确实能够帮助我们“走捷径”。而对于。

jjc4261的博客 492

K8S:Rancher管理 Kubernetes 集群

本文对Rancher介绍:Rancher 是一个开源的企业级多集群 Kubernetes 管理平台,确保集群的安全性,能够管理 k8s 集群。 对对Rancher安装以及配置、登录进入平台后如何操作进行介绍

Katie_ff的博客 5834

Kubernetes 最佳实践

公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !本文翻译自 Jack Roper 的文章 Kubernetes Best Practice。译者:文章中作者从应用程序开发、治理和集群配置三个方面给出了一些 Kubernetes 的最佳实践,同时翻译过程中也加入了我过往的一些使用经验。有误的地方,也欢迎大家指正。在这篇文章中,我将介绍一些使...

easylife206的专栏 899

[Kubernetes]1.Kubernetes(K8S)介绍,基于腾讯云的K8S环境搭建集群以及裸机搭建K8S集群

Kubernetes(K8S)介绍,基于腾讯云的K8S环境搭建集群以及裸机搭建K8S集群

资深系统架构,深耕高并发研发与 AI 大模型工程化落地。技术栈以 Python (AI/NLP/RAG/Agent) 与 Golang (高并发架构) 为双核心,兼具 PHP 大型应用经验。专注算法落地、复杂系统设计及团队技术赋能 3221

离线安装4:kubernetes(k8s)离线安装_kubernetes 离线安装

firewall-cmd --zone=public --add-port=10257/tcp --permanent # kube-controller-manager 自身。firewall-cmd --zone=trusted --add-source=192.168.80.60 --permanent # 信任集群中各个节点的IP。firewall-cmd --zone=public --add-port=10259/tcp --permanent # kube-scheduler 自身。

2401_87034001的博客 2758

Kubernetes K8S 基于 Docker 安装部署

在 Docker 容器技术被炒得热火朝天之时,大家发现,如果想要将 Docker 应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对 Docker 及容器进行更高级更灵活的管理。就在这个时候,K8S 出现了。K8S,就是基于容器的集群管理平台,它的全称,是 Kubernetes。 本次主题将会为你分享: K8S 起源 K8S 集群 为什...

GitChat 1万+

【Kubernetes】以LOL的视角打开K8s

LOL和K8s都上手之后,其实我觉得相比较起来,LOL的上手难度要高多了,这么多个英雄,每个英雄有不同的机制和技能,这些可比K8s的内容多多了,所以如果大家LOL都能上手的话,上手K8s肯定不会是问题的!

ThisIsClark 2075

一、kubernetes k8s

k8s的全称:kubernetes k8sk8s的版本:1.301.20------------用的最多的版本,1.18-1.211.24------------>k8s的镜像不再使用docker,containerd。

2401_87896172的博客 3667

K8S-LLM:用自然语言轻松操作 Kubernetes

介绍 K8S-LLM,一个基于大型语言模型的命令行工具,允许用户通过自然语言与 Kubernetes 进行交互,简化复杂的 K8s 操作流程。

panzhixiang 1706

【Kubernetes的SpringCloud最佳实践】Spring Cloud netflix 能否被K8s资源完全替代?

Spring Cloud netflix能否被K8s替代最佳实践?

weixin_42430947的博客 1671

k8s kubernetes

(Container Runtime Interface): 容器运行时接口,用来运行容器,k8s通过这个接口去兼容不同的容器,目前主要的CRI有CRI-O和containered,dockershim在k8s的1.24版本后从kubelet中剥离出来,主要由docker维护(不是亲儿子k8s也不会管了):containerd由docker开发,是docker用来操作runc的handler,与docker平级,docker生成的images等资源与containerd生成的images等资源不共享。

六月长安的博客 2736

Decoder如何工作、Transformer如何训练、以及exposure bias问题

1、结合图文描述Decoder中各个模块是什么,以及是如何工作的。2、transformer是如何训练的。3、exposure bias问题造成的原因及解决方法

m0_59113542的博客 3345

什么是Kubernetes(K8s)?

更新时间: 2024-02-02 16:41:38内容Kubernetes(通常简称为K8s)是一款用于自动部署、扩缩和管理容器化应用程序的开源容器编排平台。Kubernetes已发展为现代企业实现敏捷开发、快速迭代、资源优化及灵活扩展的关键技术组件之一。它拥有庞大的开源社区和丰富的生态系统。围绕Kubernetes已经形成了众多工具、插件和解决方案,其使企业能够实现更高的资源利用率、更优的业务连续性和稳定性、更快的创新速度。为什么需要。

weixin_46575696的博客 2421

LoRa项目实战:手把手教你为ESP32选配和焊接天线(从PCB到信号测试)

本文详细介绍了为ESP32选配和焊接LoRa天线的全流程,包括天线选型、PCB布局设计、焊接工艺及信号测试。重点解析了PCB板载天线、导线天线和陶瓷贴片天线的适用场景与性能特点,并提供专业的焊接技巧和信号测试方案,帮助开发者优化LoRa模块的无线通信性能。

weixin_30470643的博客 395

全桥LLC谐振变换器设计与双环控制策略详解

LLC谐振变换器作为高频开关电源的核心拓扑,通过谐振腔实现软开关特性,显著提升转换效率(可达96%以上)。其工作原理基于谐振电感、电容的协同作用,当开关频率接近谐振点时实现ZVS/ZCS。在工业电源、电动汽车充电等场景中,电压电流双环控制策略通过引入电流内环和竞争仲裁机制,有效改善动态响应(实测负载跳变时电压跌落减少60%)。数字控制实现时需注意ADC采样同步和PWM更新时序,而谐振参数测量与温升管理则是工程实践的关键。

weixin_29189987的博客 257

k8s教程6:Kubernetes安全性最佳实践

Kubernetes安全涵盖了从集群配置、网络通信、访问控制到应用安全的各个方面。确保集群安全不仅仅是防止外部攻击,还包括内部的权限管理、数据保护和资源隔离。身份认证与授权:确保只有授权用户和服务能够访问集群资源。网络安全:控制服务间的通信,防止未经授权的访问。数据保护:保护存储在集群中的敏感数据。运行时安全:确保容器和Pod在运行时不被恶意利用。审计与监控:持续监控集群活动,及时发现并响应安全事件。通过实施这些安全措施,能够显著提高Kubernetes集群的安全性,防止数据泄露和服务中断。

你是我的天晴 1524

AI编程助手Cursor如何革新经济学研究:从计量模型到可视化全流程实战

在数据科学和人工智能技术蓬勃发展的今天,如何高效地将前沿AI工具融入专业领域的研究工作流,成为提升科研效率的关键。其核心原理在于通过自然语言交互,将研究者的专业问题转化为机器可执行的指令,从而实现人机协作的范式转移。这一技术的核心价值在于大幅降低非计算机背景研究者的编程门槛,将精力从繁琐的代码实现中解放出来,更聚焦于学科本身的思想与逻辑。尤其在经济学、金融学等高度依赖数据分析和计量建模的领域,AI编程助手能够快速处理数据清洗、模型估计、可视化及结果解释等任务。具体到应用场景,研究者可以利用结构化提示词工程,

weixin_42531579的博客 296

Ansible for Kubernetes最佳实践:10个技巧提升你的Kubernetes自动化效率

Ansible for Kubernetes是一套基于《Ansible for Kubernetes Book》的实践示例,通过Ansible实现Kubernetes集群的自动化部署与管理。本文将分享10个实用技巧,帮助新手用户快速掌握Ansible与Kubernetes结合的核心方法,显著提升容器编排的自动化效率。 ## 1. 掌握基础目录结构设计 合理的项目结构是高效管理Ansible p

gitblog_00743的博客 800

GEE案例:Landsat 5、7、8影像构建1985-2023年rsei生态遥感指数详细代码

rsei(Regional Silviculture Ecological Index,地区林业生态指数)是一种生态遥感指标,用于评估森林生态系统的健康状况和生态服务。构建1985-2023年的rsei生态遥感指,主要需要使用Landsat 5、7和8的遥感影像数据。以下是一种可能的构建方法:1. 数据获取:从美国地质调查局(USGS)或其他可靠数据提供商处获取Landsat 5、7和8的遥感影像数据。确保选择的影像具有适当的空间和时间分辨率,以覆盖所需的时间段。

此星光明博客 3428

通信原理 | 随机数仿真 | 均匀、正态、双高斯、瑞利、莱斯、对数正态、nakagami、Suzuki分布的随机数仿真(matlab)

信道建模在通信系统设计和分析中扮演着至关重要的角色。它指的是使用数学和物理模型来描述和模拟无线或有线通信路径中的信号传播特性。

若北辰 1988

从入门到实践:Kubernetes(K8s)完全指南

微服务架构:统一管理数十到数千个微服务容器。CI/CD 集成:与 Jenkins、ArgoCD 等工具结合,实现自动化部署流水线。弹性负载场景:电商促销、实时数据处理等需要动态扩缩容的业务。多云部署:通过 K8s 实现跨云厂商的统一管理,避免厂商锁定。

qq_35800459的博客 6071

凝聚态物理新引擎:AI 驱动材料预测与相变识别大突破

摘要:本文深入探讨 AI 在凝聚态物理中的创新应用。在材料性质预测方面,AI 借助数据收集、特征提取和模型训练,能依据材料微观信息准确预估其宏观性质,以石墨烯为例验证了高效性。对于拓扑相变识别,AI 通过分析量子力学数据,利用机器学习算法判别相变节点,助力拓扑绝缘体研究。尽管面临数据质量、模型可解释性等挑战,但未来多模态数据融合、可解释 AI 等发展方向,将推动 AI 与凝聚态物理深度融合,助力探索物质奥秘与新材料研发。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1828

K8s(Kubernetes)内容分享(一):K8s(Kubernetes) 介绍

容器运行时是 Kubernetes 中用于运行容器的底层组件,它负责将容器镜像转换为可以运行的进程,并提供容器的隔离、资源管理和网络管理等功能。同时,Kubernetes 还提供了一系列的资源管理机制,如资源调度、容器网络、存储编排等,控制整个容器集群的运行状态,并保证应用程序在容器集群中的高可用性和可靠性。Scheduler 是 Kubernetes 集群中的另一个重要组件,主要负责根据集群中各个节点的负载情况,以及用户的调度策略,将新创建的 Pod 分配到合适的节点上。

之乎者也·的博客 1437

应用商店评论分析实战:Python逆向工程破解Google Play加密接口与NLP建模

在移动互联网时代,应用商店中的用户评论成为了开发者优化应用、提升用户体验的重要依据。然而,Google Play等应用商店对评论数据进行了加密处理,直接爬取难度较大。本文将介绍如何使用Python逆向工程破解Google Play的加密接口,实现对应用商店评论的实时采集,并结合NLP(自然语言处理)技术进行情感分析和主题建模,为开发者提供有价值的数据支持。

u014481728的博客 1349

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【云原生】详解Kubernetes、详解k8s,什么是k8s,k8s有什么用;k8s集群是什么、有什么用?

Kubernetes 是Google开源的分布式容器管理平台,是为了更方便的在服务器中管理我们的容器化应用。Kubernetes 简称 K8S,为什么会有这个称号?因为K和S是 Kubernetes 首字母和尾字母,而K和S中间有八个字母,所以简称 K8S,加上 Kubernetes比较绕口,所以一般使用简称 K8S。Kubernetes 即是一款容器编排工具,也是一个全新的基于容器技术的分布式架构方案,在基于Docker的基础上,可以提供从 一系列服务,提高了容器集群管理的便捷性。大家可以先看一下,下面一

点赞的都能无bug通过! 3979

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: K8s: ConfigMap 与 Secret 的配置管理
下一篇: K8s: 公有镜像中心和私有镜像中心的搭建
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值