k8s学习之路【02.基础概念介绍】

零基础学kubernetes(k8s)必看教程,带你10分钟快速实战入门k8s 作为一个工作十余年,拥有比较丰富的计算机网络运维、主机运维、云计算平台运维、自动化运维开发经验的老鸟,我来说说我当初刚接触Kubernetes时的一些感受以及学习技巧。 阅读详情

基础概念介绍

俗话说,磨刀不误砍柴工。上一章,我们成功搭建了 k8s 集群,接下来我们主要花时间了解一下 k8s 的相关概念,为后续掌握更高级的知识提前做好准备。

本文主要讲解以下四个概念:

  • Pod

  • Deployment

  • Service

  • Namespace

引入

让我们使用Deployment运行一个无状态应用来开启此章节吧,比如运行一个nginx Deployment(创建文件:nginx-deployment.yaml):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

配置文件第二行,有个kind字段,表示的是此时yaml配置的类型,即Deployment。什么是Deployment?这里我先不做解释,让我们先实践,看能不能在使用过程中体会出这个类型的概念意义。

在终端执行:

kubectl apply -f ./nginx-deployment.yaml
# 输出
deployment.apps/nginx-deployment created

然后通过以下命令分别查看集群中创建的 Deployment 和 Pod 的状态:

# 查看 Deployment
kubectl get deployments
# 输出
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   1/1     1            1           2m29s

# 查看 Pod
kubectl get pods
# 输出
NAME                               READY   STATUS    RESTARTS   AGE
nginx-deployment-585449566-qslv5   1/1     Running   0          2m38s

# 查看 Deployment 的信息
kubectl describe deployment nginx

# 删除 Deployment
kubectl delete deployment nginx-deployment

# 查看 Pod 的信息
# kubectl describe pod <pod-name>
# 这里的 <pod-name> 是某一 Pod 的名称
kubectl describe pod  nginx-deployment-585449566-qslv5

# 进入容器
kubectl exec -it nginx-deployment-585449566-qslv5 -- /bin/bash

此时我们已经成功在 k8s 上部署了一个实例的 nginx 应用程序。但是,等等!我们好像又看到了一个新的名词Pod,这又是什么?让我们带着疑问继续往下看吧。

Pod

“

在 Kubernetes 中,最小的管理元素不是一个个独立的容器,而是 pod。

”
Kubernetes教程:Pod概念

Pod是一组并置的容器,代表了Kubernetes中的基本构建模块:

  • 一个Pod包含:

    • 一个或多个容器(container)

    • 容器(container)的一些共享资源:存储、网络等

  • 一个Pod的所有容器都运行在同一个节点

容器可以被管理,但是容器里面的多个进程实际上是不好被管理的,所以容器被设计为每个容器只运行一个进程,由于这个原因,我们需要另一种更高级的结构来将容器绑定在一起,并将它们作为一个单元进行管理,这就是Pod出现的目的。

如何定义并创建一个 Pod

创建文件nginx-pod.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
      - containerPort: 80

相关字段解释如下:

  • kind: 该配置的类型,这里是 Pod

  • metadata:元数据

    • name:Pod 的名称

    • labels:标签

  • spec:期望 Pod 实现的功能

    • name:container 名称

    • image:镜像

    • ports:容器端口

    • containerPort:应用监听的端口

    • containers:容器相关配置

运行:

# 创建
kubectl create -f nginx-pod.yaml
# 输出
pod/nginx created

# 查看
kubectl get pods
# 输出
NAME                                READY   STATUS    RESTARTS   AGE
nginx                               1/1     Running   0          43s

# 查看 Pod 完整的描述性文件
# yaml 是你想看的格式 也可以是 json
kubectl get po nginx -o yaml

# 删除 Pod
kubectl delete -f nginx-pod.yaml

外部访问

此时我们已经启动了一个nginx,我们有哪些方法可以对Pod进行连接测试呢?

可以使用如下命令:

kubectl port-forward nginx 8088:80
# 输出
Forwarding from 127.0.0.1:8088 -> 80
Forwarding from [::1]:8088 -> 80

# 再开一个终端访问测试或者打开浏览器
curl http://0.0.0.0:8088/
image-20210105230002954

显然,成功访问,但是这个有个问题就是此端口不会长期开放,一旦一定时间内没有访问,就会自动断掉,我们需要其他的方式来进行访问。比如后面会提到的Service,这里就简单运行个命令,大家感受一下:

# 创建一个服务对象
# NodePort 在所有节点(虚拟机)上开放一个特定端口,任何发送到该端口的流量都被转发到对应服务
kubectl expose po nginx --port=80 --target-port=80 --type=NodePort  --name nginx-http
# 输出
service/nginx-http exposed

# 查看服务
kubectl get svc
# 输出
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        16d
nginx-http   NodePort    10.102.141.232   <none>        80:32220/TCP   1s

# 终端访问测试
curl http://0.0.0.0:32220/
# 输出 html, 表示成功端口成功开放给外部

标签

现在我们的集群里面只运行了一个Pod,但在实际环境中,我们运行数十上百个Pod也是一件很正常的事情,这样就引出了Pod管理上的问题,我们可以通过标签来组织Pod和所有其他Kubernetes对象。

前面nginx-pod.yaml里面就声明了labels字段,标签为name,相关操作记录如下:

# 查看标签
kubectl get pods --show-labels
# 输出
NAME                              READY   STATUS    RESTARTS   AGE   LABELS
nginx                             1/1     Running   0          17m   name=nginx

# 增加标签
kubectl label pods nginx version=latest
# 输出
pod/nginx labeled

# 查看特定标签
kubectl get pods -l "version=latest" --show-labels

# 更新标签
kubectl label pods nginx version=1 --overwrite

# 删除标签
kubectl label pods nginx version-

命名空间

利用标签,我们可以将Pod和其他对象组织成一个组,这是最小粒度的分类,当我们需要将对象分割成完全独立且不重叠的组时,比如我想单独基于k8s搭建一套Flink集群,我不用想让我的Flink和前面搭建的Nginx放在一起,这个时候,命名空间(namespace)的作用就体现出来了。

# 列出所有的命名空间
kubectl get ns
# 输出,我们目前都是在 default 命名空间中进行操作
NAME                   STATUS   AGE
default                Active   20d
kube-node-lease        Active   20d
kube-public            Active   20d
kube-system            Active   20d
kubernetes-dashboard   Active   19d

让我们创建一个命名空间vim cus-ns.yaml,输入:

apiVersion: v1
kind: Namespace
metadata:
  name: cus-ns

让我们在终端实践一番:

# 开始创建命名空间
kubectl create -f cus-ns.yaml
# 输出
NAME                   STATUS   AGE
cus-ns                 Active   6s

# 为新建资源选择命名空间
kubectl create -f nginx-pod.yaml -n cus-ns

这里我们可以暂时先做一个总结,如前面所说,Pod可以表示k8s中的基本部署单元。经过前面的讲解,你应该知道以下一些知识点:

  • 手动增删改查Pod

  • 让其服务化(Service)

但是在实际使用中,我们并不会直接人工干预来管理Pod,为什么呢?当Pod健康出问题,人是没有精力来做这种维护管理工作的,但我们擅长创造工具来自动化这些繁琐的事情。

所以我们可以使用Deployment。

Deployment

窥一斑而知全豹,好好了解完Pod之后,再继续了解k8s的概念也就水到渠成了。我们一般不会直接创建Pod,毕竟通过创建Deployment资源可以很方便的创建管理Pod,并支持声明式地更新应用程序。

本章第一小节引入部分就是以Deployment举例,当时启动配置文件我们看到了一个Deployment资源和一个Pod,查看命令如下:

kubectl get deployments
# 输出
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   0/1     1            0           4s

kubectl get pods
# 输出 如果名字有变化不用在意,只是我重新创建了一个 Deployment
NAME                               READY   STATUS    RESTARTS   AGE
nginx-deployment-585449566-mnrtn   1/1     Running   0          2m1s

这里我们再增加一条命令:

kubectl get replicasets.apps
# 输出
NAME                         DESIRED   CURRENT   READY   AGE
nginx-deployment-585449566   1         1         1       10m

嗯嗯~,让我们捋一捋,当我们创建一个Deployment对象时,k8s不会只创建一个Deployment资源,还会创建另外的ReplicaSet以及 1 个Pod对象。

所以问题来了, ReplicaSet又是个是什么东西?说到ReplicaSet就得说到ReplicationController(弃用)。

“

ReplicationController是一种k8s资源,其会持续监控正在运行的 pod 列表,从而保证Pod的稳定(在现有Pod丢失时启动一个新Pod),也能轻松实现Pod的水平伸缩。

ReplicaSet的行为与ReplicationController完全相同,但 Pod 选择器的表达能力更强。

”

所以我们可以将Deployment当成一种更高阶的资源,用于部署应用程序,并以声明的方式管理应用,而不是通过ReplicaSet进行部署,上述命令的创建关系如下图:

image-20210110174652178

Service

在本文第二节Pod部分的外部访问小节,就已经提到并演示了Service,它很方便地将我们的服务端口成功开放给外部访问。

介绍

我们的Pod是有生命周期的,它们可以被创建、销毁,但是一旦被销毁,这个对象的相关痕迹就没有了,哪怕我们用ReplicaSet让他又复生了,但是新Pod 的IP我们是没法管控的。

很显然,如果我们的后端服务的接口地址总是在变,我们的前端人员心中定然大骂,怎么办?这就轮到Service出场了。

定义 Service

前面我们创建了一个名为nginx-http的Services,用的是命令行;接下来我们介绍一下配置文件的形式,在nginx-deployment.yaml后面增加以下配置:

---
kind: Service
apiVersion: v1
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  type:  NodePort
  ports:
    - nodePort: 30068
      port: 8068
      protocol: TCP
      targetPort: 80

相信上述配置,大部分的字段看起来都没什么问题了吧,这里我想强调的是type字段,说明如下:

  • ClusterIP:默认类型,服务只能够在集群内部可以访问

  • NodePort:通过每个 Node 上的 IP 和静态端口(NodePort)暴露服务

  • LoadBalancer:使用云提供商的负载均衡器,可以向外部暴露服务。

关于LoadBalancer,基本上是云商会提供此类型,如果是我们自行搭建的,就没有此类型可选,但是很多开源项目默认是启用这种类型,我们可以自行打一个补丁来解决这个问题:

kubectl patch svc {your-svc-name} -n default -p '{"spec": {"type": "LoadBalancer", "externalIPs":["0.0.0.0"]}}'

执行生效命令:

kubectl apply -f ./nginx-deployment.yaml
# 输出
deployment.apps/nginx-deployment unchanged
service/nginx created

# 查看服务
kubectl get services -o wide
# 输出
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE     SELECTOR
nginx        NodePort    10.110.245.214   <none>        8068:30068/TCP   11m     app=nginx

# 终端测试
curl http://0.0.0.0:30068/

说明

基础概念就先介绍这么多,我后续还会在持续学习中作进一步地补充,到时候应该会更新到我的博客。

前情回顾,k8s学习之路系列:

本部分内容有参考如下文章:

  • 学习Kubernetes基础知识[1]

  • 详解 Kubernetes Deployment 的实现原理[2]

  • Kubernetes 中文指南[3]:Deployment

  • Kubernetes 中文指南[4]:Service

  • Kubernetes in Action中文版:第3、4、9章

参考资料

[1]

学习Kubernetes基础知识: https://kuboard.cn/learning/k8s-basics/kubernetes-basics.html

[2]

详解 Kubernetes Deployment 的实现原理: https://draveness.me/kubernetes-deployment/

[3]

Kubernetes 中文指南: https://jimmysong.io/kubernetes-handbook/concepts/deployment.html

[4]

Kubernetes 中文指南: https://jimmysong.io/kubernetes-handbook/concepts/service.html

如果对你有帮助,欢迎转发分享,点个好看呗哈哈????

通过实例快速掌握k8s(Kubernetes)核心概念 容器技术是微服务技术的核心技术之一,并随着微服务的流行而迅速成为主流。Docker是容器技术的先驱和奠基者,它出现之后迅速占领市场,几乎成了容器的代名词。但它在开始的时候并没有很好地解决容器的集群问题。Kubernetes抓住了这个机遇,以容器编排者(Container Orchestration)的身份出现,对容器集群进行管理和调度,现在已经打败了Docker成为了容器技术事实上的标准。当然K8... 阅读详情

相关推荐

云原生(十三) | Kubernetes篇之深入Kubernetes(k8s)概念

文章目录 深入Kubernetes(k8s)概念 一、基础概念理解 二、kubernetes Objects(k8s对象) 1、什么是k8s对象 2、描述k8s对象 3、k8s对象yaml的结构 4、管理k8s对象 5、对象名称 6、名称空间 7、标签和选择器 8、注解annotation 9、字段选择器 10、给vscode安装插件 11、认识kubectl和kubelet 12、自动补全 深入Kubernetes(k8s)概念 一、基础概念理解 集群 ..

Lansonli(蓝深李)的博客 2558

【云原生】Kubernetes中deployment是什么?

一个 Deployment 为转存失败重新上传取消在该例中:创建名为(由字段标明)的 Deployment。该名称将成为后续创建 ReplicaSet 和 Pod 的命名基础。参阅获取更多详细信息。该 Deployment 创建一个 ReplicaSet,它创建三个(由字段标明)Pod 副本。字段定义所创建的 ReplicaSet 如何查找要管理的 Pod。在这里,你选择在 Pod 模板中定义的标签(app: nginx不过,更复杂的选择规则是也可能的,只要 Pod 模板本身满足所给规则即可。

征服Bug的博客 2024

从IR Drop到EM分析:数字IC电源规划中那些没人明说的细节(以MTCMOS配置为例)

本文深入探讨数字IC后端设计中电源规划的关键细节,特别关注MTCMOS配置、电源网络电阻最小化和level shifter供电等实战技巧。通过分析IR Drop和EM问题,提供优化floorplan和powerplan的具体策略,帮助工程师避免常见陷阱,提升芯片设计的稳定性和可靠性。

q9w8e7r6t5的博客 511

Kubernets部署Nginx Deployment增删改查功能

创建Deployment 1、通过 YAML 文件创建一个 Deployment vi nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 1 template: metadata: labels: .

每一步,都在缩短你与梦想的距离。 1002

破译丰田BEAN总线之谜

我对CAN的深入了解并不是从CAN本身开始的,而是起源于丰田公司自主研发的BEAN总线。由于BEAN总线协议并不是公开的,而是一种技术机密,所以当丰田车不在使用BEAN总线两年多后的今天,虽然这里还不敢公开技术细节,但回想起当年的作品,随便写写也算对自己的努力有所交代。   南方都市报惠州版曾经报道过一则新闻,说的是丰田皇冠车被盗率非常高。其实两年前就已经知道了皇冠车的防盗系数很低,所以当时的首

粤嵌 5266

不同比例尺地质数据共享

包含20w、25w、100w、250w比例尺地质数据共享。

sinat_38828898的博客 2329

k8s学习之路【01.安装】

什么是 Kubernetes随着微服务架构被越来越多的公司使用,大部分单体应用正逐步被拆解成小的、独立运行的微服务。微服务的优势这里不做探讨,但是其带来的服务维护问题大大增加,若想要在管...

howie6879's blog 708

值得苦练的100道Python经典练手题(全网最全,附详细答案,建议收藏)

这100道Python练习题涵盖了从基础语法到高级算法、从数据库操作到Web开发的各个方面,是备考数据库系统工程师的绝佳素材。建议按照章节顺序逐一练习,遇到难点可反复钻研,真正掌握每一道题背后的知识点。通过这些练习,不仅能提升Python编程能力,还能加深对数据库系统原理的理解,为考试和实际工作打下坚实基础。

yue_yun_的博客 9401

k8s_day06_03

k8s_day06_03 deployment deployment 主要是控制无状态应用的 deployment 借助一到多个rs 间接的管理pod。 deployment 是rs 控制器,但是 deploy在定义的时候完全用不到rs 相关的配置。deployments 在更新时候 会创建新的rs和pod。但是k8s 会保存 历史版本的rs 信息, k8s 默认最多保存10个版本的rs 信息 (revisionHistoryLimit),但是只有最近的版本的rs 的pod 才会被创建出来,之

qq_36801585的博客 578

【数据分享】中国371个城市的坡度矢量数据和excel数据

在城市发展的进程中,地形地貌始终是影响规划决策的关键因素,而坡度作为表征地表倾斜程度的核心指标,更是贯穿于城市建设、生态保护等诸多环节。本文将全面解读中国 371 个城市坡度数据的相关情况,包括数据概况、生成流程、应用场景等内容,为读者呈现一份详尽的坡度数据指南。

qq_39719713的博客 1845

DSNU与PRNU:隐藏在图像均匀性背后的“加性”与“乘性”噪声

本文深入解析光电传感器成像质量的两大关键参数PRNU(光响应非均匀性)和DSNU(暗信号非均匀性)。DSNU源于暗电流差异,表现为无光照时的固定噪点;PRNU则由像素灵敏度差异导致,在均匀光照下呈现亮度不均。两者分别影响动态范围下限和图像一致性,需要通过暗场校正与平场校正来消除。文章指出,高精度成像不仅依赖分辨率,更需关注这两项指标,工业级传感器通过精确校正保留细节,而消费级产品往往通过算法涂抹掩盖不均匀性。理解这些底层参数对传感器选型和图像处理至关重要。

致力于lidar应用开发 116

Kubernetes系列(三)Deployment

本文主要介绍基于上篇构建的docker镜像,通过Deployment方式部署到minikube中。

u012961000的博客 552

C#上位机3D可视化:HelixToolkit.Wpf集成点云/模型(机器人臂姿态实时监控)

核心控件是3D可视化的核心,需搭配和网格辅助定位;模型加载:按关节拆分机械臂模型,通过组合平移+旋转实现姿态控制;姿态更新:将机器人关节角度转换为3D模型的旋转变换,工业场景需从控制器实时获取角度;点云渲染:通过实现点云加载,需注意坐标系转换和性能优化。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 716

K8S--02Kubernetes 基础概念--学习笔记sgg

文章目录2.1 Pod概念2.1.1 Pod类型2.1.2 Pod控制器类型1.ReplicationController & ReplicaSet2.Deployment3.HPA(HorizontalPodAutoScale)4.StatefullSet5.DaemonSet6.Job,Cronjob2.1.3 服务发现2.2 网络通信方式2.2.1 网络通讯模式2.2.2 网络解决方案Kubernetes + Flannel -12.2.3 不同情况下网络通信方式组件通讯示意图 2.1 Pod

学无止境,勤则可达;志存高远,恒亦能成! 1110

HyperLynx(二十二)DDR(五)DDRx总线时序模型设计

DDR3 的数据选通信号与时钟信号的频率是一样的,在数据选通信号写操作时,控制器典型的输出方式是数据选通信号边沿与时钟近似对齐。该界面中显示了所有需要编辑的参数,包括地址/命令信号的时序、控制信号的时序、读和写操作的数据选通和数据信号时序、写操作的数据选通和数据掩码信号时序,以及建立和保持时间的降额参数。由于DDRx总线对时序的要求非常严格,随着速率的提升,时序的要求会更高。反之也是一样的,如果数据选通信号的上升沿在时钟信号上升沿的后面到达 DRAM,那么数据选通信号的下降沿就会在时钟信号的前面到达。

小幽余生不加糖 1938

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【云原生 • Kubernetes】认识 k8s、k8s 架构、核心概念点介绍

Kubernetes(k8s)概念、架构介绍,k8s 包含的核心概念点讲解(部分基础及重要概念,掌握基本可以满足绝大部分场景的使用)。

商务合作 | 共同学习 | 携手共进 19万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Kubernetes(k8s)基础入门

K8S是Kubernetes的全称,官方称其是across multiple hosts. It provides basic mechanisms for deployment, maintenance, and scaling of applications. 用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。容器就是一个包,其中包含了应用及其所有依赖。容器中的应用与主机系统是隔离的,不关注环境。

沉浸式Study 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

深度学习工具包 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,从入门到实战

10w+的Kubernetes详细教程,涵盖k8s中常用的所有概念以及面试的高频问点(pod的深入理解),帮助你从零开始学习k8s,搭建k8s集群,从入门到实战,希望对大家学习k8s有所帮助

一弓虽的博客 6万+

【云原生 • Kubernetes】k8s功能特性、k8s集群架构介绍

Kubernetes 功能和特性介绍、k8s 集群架构理论体系介绍,k8s 核心概念。

商务合作 | 共同学习 | 携手共进 6万+

K8S(Kubernetes)概念、原理及部署过程

目录: 云计算概念和原理 云计算分类 什么是K8S K8S部署 云计算概念和原理 What 云计算是将硬件服务器、网络设备、网络资源、操作系统、应用程序统一的管理和调度,将所有的资源统一的按需分配,租户可以根据自己的需求来按需购买和使用 云计算重点强调的是资源池、租户概念,资源池中资源可以分配或者租用给租户(企业内部、互联网用户),可以根据需求直接去购买或者租用,对于租户来讲,不需要关...

番茄炒蛋君的博客 1万+

k8s 基础介绍及概念

k8s 的介绍 容器化相对于传统虚拟化优势 选择docker容器部署要使用k8s的原因 k8s Master节点和Node节点各个节点组件间的关系 Master节点组件介绍 Node节点组件介绍 ks8 核心概念 容器化相对于传统虚拟化优势 如果要选择k8s,首先就需要知道为什么会选择容器化。 传统方式是将所有应用直接部署在同一个物理机器节点上,这样每个App的依赖都是完全相同的,无法做到App之间隔离,当然,为了隔离,我们也可以通过创建虚拟机的方式.

查理王的博客 3163

Kubernetes(K8S)的基础概念

Kubernetes(K8S)的基础概念

shanjun12的博客 841

一、kubernetes k8s

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

2401_87896172的博客 3668

Kubernetes(K8s)的基础概念

Kubernetes Master是集群的主要控制单元,用于管理其工作负载并指导整个系统的通信。Kubernetes控制平面由各自的进程组成,每个组件都可以在单个主节点上运行,也可以在支持high-availability clusters的多个主节点上运行。组件名称作用etcd保存整个集群的状态apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制负责维护集群的状态,比如故障检测、自动扩展、滚动更新等scheduler。

qq_48810547的博客 1356

Kubernetes(k8s)基础概念介绍

一、简介 Kubernetes是容器集群管理系统工具,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。Kubernetes的名字来自希腊语,意思是“舵手” 或 “领航员”,K8s是将8个字母“ubernete”替换为“8”的缩写。 二、起源 大规模容器集群管理工具,从Borg到Kubernetes 在Docker 作为高级容器引擎快速发展的同时,Google也开始将自身在容器技术及集群方面的积累贡献出来。在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上

匠人精神,持之以恒! 1252

金钥匙系列:Kubernetes (K8s) 服务集群技术栈学习路线

维护 Kubernetes 服务集群是一项技术含量高且复杂的工作,需要多方面的知识与技能,包括 Linux 基础、网络、容器化技术、Kubernetes 核心概念与实践、集群管理、安全、高可用性、监控、日志、CI/CD 集成等。通过扎实的基础学习和大量的实践操作,你可以逐步掌握这些技术栈,并在企业级 Kubernetes 集群维护中发挥重要作用。学习 Kubernetes 不仅仅是为了掌握一项技术,更是为了理解云原生架构背后的思维方式和工作流,这对未来的职业发展也具有非常重要的意义。

百锦再的博客 3万+
上一篇: k8s学习之路【01.安装】
下一篇: 一站式机器学习云研发平台
老胡的储物柜
博客等级 码龄12年 1145粉丝 284原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值