Kubernetes学习路上的那些事儿,很有必要分享出来

什么是Pod

要弄清楚这个概念,我们还是先上官网瞧瞧,https://kubernetes.io/zh/docs/concepts/workloads/pods/

个人的理解,Pod就是k8s中的一个个篮子,至于里面是装韭菜,还是装鸡蛋,得根据具体的业务环境要求来定。在k8s世界中,重点是把这些篮子调度和管理好,所以得首先学Pod,只有理解和掌握了Pod,后面的一些k8s组件学习起来才有意思。

实操过程

实验准备:

Kubernetes集群环境一套,可以选择在本地虚拟机(VirtualBox)上搭建,也可以选择在公有云上利用云主机来搭建,比如移动云、阿里云、腾讯云、华为云等。

当然,在生产环境中,肯定建议直接使用服务器进行搭建。以下是我的实验环境,1台master节点,2台node节点。

步骤一:编写Pod的yaml文件。因为在k8s中是“声明式”命令,通过编写的yaml文件来实现组件的操作。

在Master节点的当前环境下,先编写一个名字叫“pod1.yaml”的文件,具体代码如下:

apiVersion: v1kind: Podmetadata:  name: pod1  namespace: default  labels:    evn: dev    res: stablespec:  containers:  - name: testpod-dev    image: nginx    ports:    - containerPort: 80

还是那句老话,先别慌,会奉上详细的解释的,如下图:

步骤二:提交yaml文件并创建Pod。在这个小实验里,只创建了一个Pod,且该Pod中只有一个容器,该容器安装的是nginx最新版本的镜像,也就是部署了一个nginx容器。

kubectl apply -f pod1.yamlkubectl get pod

由于我做实验的环境设置的带宽低,所以拉取镜像的过程比较长一些,如果运行正常,获取的Pod状态是Running。如果是非Running的状态,可使用kubectl describe pod pod1命令来查看pod1的运行信息,以便找到问题,然后解决问题。

步骤三:验证结果。可以使用kubectl命令行直接进入Pod内,然后查看nginx安装文件。如果想使用curl命令看nginx欢迎页面信息,单独操作Pod是不行的,需要配合Service组件来使用,后续会单独分享Service。毕竟k8s是集群调度,无论是从物理层面的“垂直维度”,还是从编排层面的“水平维度”,都是做了隔离的,这跟单独操作虚拟机还是有较大区别的。

kubectl exec -it pod1 -c testpod-dev -- /bin/bash    //pod1是本实验的Pod名称,testpod-dev是本实验pod1中的容器名称,该docker容器部署了nginx

以上红色方框中的配置文件,就是咱们熟悉的nginx配置文件了,/conf.d/default.conf中可以修改监控端口(默认是80),nginx.conf中可以修改worker_processes的数量。

步骤四:一个Pod中部署多个docker容器。这里就开始体现k8s的好处了,只需要在原来的pod1.yaml文件上里的spec语句块中,继续增加容器规格参数即可。为了方便对比,增加了代码的文件叫pod-1.yaml,同时名称定义为pod-1。

然后使用同样的命令,创建pod-1。

kubectl apply -f pod-1.yaml     //增加了my-tomcat容器的yaml文件kubectl get pod        //查看pod状态,直到状态变成Running

做个对比,pod1中只有一个docker容器,而pod-1中有两个docker容器。

步骤五:在Pod中限制docker容器的资源使用。操作也很简单,仍然是通过修改yaml文件的相应配置区来实现。

为了好做对比,在pod1.yaml基础上复制一个pod11.yaml文件,然后增加资源设置语句块。

然后让pod1(没有设置资源限制)和pod-11(设置了资源限制)都Running起来,然后使用命令查看当前Node上的运行情况。

kubectl get pod -o wide    //查看pod在哪些Node上kubectl describe node k8s-node2  //查看k8s-node2这个Node上的运行信息

扩展内容

1)实验环境的对比,公有云VS本地虚拟机

如果使用公有云上的云主机搭建环境,好处是“一次部署,永久运行”,想做实验的时候,马上登陆云主机即可,不好的地方是要注意安全组的配置,注意端口的放通,如果为了省事儿也可以将所有端口放通,但因为是公有云又容易被攻击。

如果使用本地虚拟机环境搭建,好处是不用配置安全组,也不用担心80,8080这些常用的web端口进行备案,不好的地方就是PC要关机,虚拟机环境自然要关机,由于无线网络ip地址变化,每次启动虚拟机环境后需要捣鼓网络,因为既要能够上公网(为了能够从公共镜像仓库拉取镜像),也要保证节点注册不受影响。

2)Pod中其它配置项

Pod中可配置项很多,本实验只是列举了一部分,主要目的是简单介绍如何使用Pod。在k8s中直接操作Pod的机会不多,更多的是通过deployment,ReplicationController,ReplicaSet,Service,Job等组件来自动调度和操作Pod。

更多配置项及解释可参照如下:(转自网络:https://www.jianshu.com/p/35dde2b1951b )

apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中  kind: Pod #指定创建资源的角色/类型  metadata: #资源的元数据/属性    name: web04-pod #资源的名字,在同一个namespace中必须唯一    labels: #设定资源的标签,详情请见http://blog.csdn.net/liyingke112/article/details/77482384    k8s-app: apache      version: v1      kubernetes.io/cluster-service: "true"    annotations:            #自定义注解列表      - name: String        #自定义注解名字  spec:#specification of the resource content 指定该资源的内容    restartPolicy: Always #表明该容器一直运行,默认k8s的策略,在此容器退出后,会立即创建一个相同的容器    nodeSelector:     #节点选择,先给主机打标签kubectl label nodes kube-node1 zone=node1      zone: node1    containers:    - name: web04-pod #容器的名字      image: web:apache #容器使用的镜像地址      imagePullPolicy: Never #三个选择Always、Never、IfNotPresent,每次启动时检查和更新(从registery)images的策略,                           # Always,每次都检查                           # Never,每次都不检查(不管本地是否有)                           # IfNotPresent,如果本地有就不检查,如果没有就拉取    command: ['sh'] #启动容器的运行命令,将覆盖容器中的Entrypoint,对应Dockefile中的ENTRYPOINT      args: ["$(str)"] #启动容器的命令参数,对应Dockerfile中CMD参数      env: #指定容器中的环境变量      - name: str #变量的名字        value: "/etc/run.sh" #变量的值      resources: #资源管理,请求请见http://blog.csdn.net/liyingke112/article/details/77452630      requests: #容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行          cpu: 0.1 #CPU资源(核数),两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m)        memory: 32Mi #内存使用量        limits: #资源限制          cpu: 0.5          memory: 32Mi      ports:      - containerPort: 80 #容器开发对外的端口      name: httpd  #名称      protocol: TCP      livenessProbe: #pod内容器健康检查的设置,详情请见http://blog.csdn.net/liyingke112/article/details/77531584      httpGet: #通过httpget检查健康,返回200-399之间,则认为容器正常          path: / #URI地址          port: 80          #host: 127.0.0.1 #主机地址          scheme: HTTP        initialDelaySeconds: 180 #表明第一次检测在容器启动后多长时间后开始        timeoutSeconds: 5 #检测的超时时间        periodSeconds: 15  #检查间隔时间        #也可以用这种方法        #exec: 执行命令的方法进行监测,如果其退出码不为0,则认为容器正常        #  command:        #    - cat        #    - /tmp/health        #也可以用这种方法        #tcpSocket: //通过tcpSocket检查健康         #  port: number       lifecycle: #生命周期管理        postStart: #容器运行之前运行的任务          exec:            command:              - 'sh'              - 'yum upgrade -y'        preStop:#容器关闭之前运行的任务          exec:            command: ['service httpd stop']      volumeMounts:  #详情请见http://blog.csdn.net/liyingke112/article/details/76577520    - name: volume #挂载设备的名字,与volumes[*].name 需要对应          mountPath: /data #挂载到容器的某个路径下        readOnly: True    volumes: #定义一组挂载设备    - name: volume #定义一个挂载设备的名字      #meptyDir: {}      hostPath:        path: /opt #挂载设备类型为hostPath,路径为宿主机下的/opt,这里设备类型支持很多种  

k8s查看pod的yaml文件_K8S系列学习,Pod实战那些事儿,有必要知道知道相关推荐

  1. k8s查看pod的yaml文件_K8S教程(6)YAML资源配置清单

    一.K8S配置清单作用 虽然使用kubectl或者dashboard都可以创建Pods,但在实际使用中基本都是使用yaml配置清单来对资源进行一个声明,然后K8S按照声明信息进行创建.对于K8S来说, ...

  2. k8s查看pod的yaml文件_k8s yaml文件说明

    nginx yaml文件说明 --- #定义nginx命名空间 apiVersion: v1 kind: Namespace metadata: name: k8s-nginx #自定义的命名空间 - ...

  3. k8s启动centos7的yaml文件_K8S yaml文件详解

    apiVersion: extensions/v1beta1 #接口版本 kind: Deployment #接口类型 metadata: name: ptengine-demo #Deploymen ...

  4. k8s查看pod的yaml文件_【大强哥-k8s从入门到放弃04】Yaml语法解析

    依然小福利[Python-零基础入门]2020感谢走进我的生命,Python!(已更新至206集)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com 一.K8S名称 ...

  5. k8s查看pod的yaml文件_每天5分钟|轻松掌握开发工作中必会的k8s-yaml配置说明和常用命令...

    在 K8S 中,创建资源有两种方式: 方式一:使用kubectl 命令行,在输入kubectl命令的时候,填上对应的参数 优点:方便快捷,一行命令搞定 缺点:一行命令太多参数,可读性差,不利于维护 方 ...

  6. k8s查看pod的yaml文件_K8s-yaml的使用及命令

    YAML配置文件管理对象 对象管理: # 创建deployment资源 kubectl create-f nginx-deployment.yaml # 查看deployment kubectl ge ...

  7. 通过编写k8s的资源清单yaml文件部署gitlab服务

    微信公众号搜索DevOps和k8s全栈技术 ,即可关注我的公众号,也可通过扫描文章最后的二维码关注,每天都会分享技术文章供大家参考阅读~,拥抱开源,同大家共同进步~~!!! 搭建nfs服务器 1.为什 ...

  8. yaml存储到文件服务器,通过编写k8s的资源清单yaml文件部署gitlab服务

    搭建nfs服务器 1.为什么搭建nfs服务器? 因为我们要使用nfs作为持久化存储,创建的pv后端存储时需要nfs,所以需要搭建nfs服务. 2.安装nfs服务 选择自己的任意一台机器,我选择k8s的 ...

  9. Pod定义YAML文件详解

最新文章

  1. 2019 年 ACM Fellow出炉,陈熙霖、陶大程、周礼栋、谢源、李向阳等7位华人学者入选
  2. 第八届全国大学生智能汽车竞赛获奖名单
  3. css盒子子类继承父类哪些,css不继承父类的属性有哪些
  4. 现在还有哪些价值 100 亿美金的产品机会?
  5. 前K个高频元素(top k)(TX)
  6. hbase启动后在log中出现cannot get log writer
  7. 统信软件用一年时间跨越式发展说明了一件事
  8. mysql safe 停止工作_mysql不明原因停止后不能启动,请高手分析
  9. 2016学计算机软件,2016年夏季学期计算机(软件)学院学年论文字数、页数和格式要求.doc...
  10. Git 命令行(cygwin) + Git Extensions + Git Source Control Provider
  11. centos7 python2换成python3后,yum报错解决
  12. oracle下载,linux版本的oracle数据库下载
  13. 「精品」无损批量压缩图片工具 - Caesium Image Compressor
  14. AI(人工智能:一种现代的方法)学习之:基于信息的搜索策略(informed search)——启发式(heuristic)搜索、贪婪(greedy)搜索、A* (A star)搜索
  15. 七大江河水系--海河
  16. 关键字深度剖析,集齐所有关键字可召唤神龙?【三】
  17. ARM开发工具软件命令详解---嵌入式回归第三篇
  18. 一份完整的报价单内容
  19. 如何用python代码发送邮件
  20. vs运行程序时报错:“XXX处有未经处理的异常: 0xC0000374: 堆已损坏”

热门文章

  1. wxWidgets:wxRibbonPanel类用法
  2. wxWidgets:wxMemoryInputStream类用法
  3. wxWidgets:文档/视图框架
  4. boost::detail::invoke相关的测试程序
  5. boost::mpl::times相关的测试程序
  6. boost::multiprecision模块cpp_bin_float_100相关的测试程序
  7. Boost:不受约束的bimap双图的测试程序
  8. ITK:读取网格并显示2个给定顶点之间的欧几里得距离
  9. ITK:创建一个大小Size
  10. VTK:可视化之ColorSeriesPatches