k8s-基础知识(Pod,Deployment,ReplicaSet)

这篇具有很好参考价值的文章主要介绍了k8s-基础知识(Pod,Deployment,ReplicaSet)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

k8s职责

  • 自动化容器部署和复制
  • 随时扩展或收缩容器
  • 容器分组group,并且提供容器间的负载均衡
  • 实时监控,即时故障发现,自动替换

k8s概念及架构

k8s-基础知识(Pod,Deployment,ReplicaSet),docker && k8s && devops,kubernetes,容器,Pod,Deployment,docker

pod

pod是容器的容器,可以包含多个container
pod是k8s最小可部署单元,容器的本质是一个隔离的进程,而Pod则是一组相互联系的进程(进程组)。Pod 内的多个容器共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。
pod内部容器网络互通,每个pod都有独立虚拟IP。
pod都是部署完整的应用或模块(项目中通常:一个pod部署一个应用,或部署一个应用的一部分)。
k8s-基础知识(Pod,Deployment,ReplicaSet),docker && k8s && devops,kubernetes,容器,Pod,Deployment,docker

#获取节点
kubectl get pods

k8s-基础知识(Pod,Deployment,ReplicaSet),docker && k8s && devops,kubernetes,容器,Pod,Deployment,docker

#通过kubectl 运行一节点
kubectl run nginx-pod --image=nginx

k8s-基础知识(Pod,Deployment,ReplicaSet),docker && k8s && devops,kubernetes,容器,Pod,Deployment,docker

#查看详细信息
kubectl describe pod nginx-pod

k8s-基础知识(Pod,Deployment,ReplicaSet),docker && k8s && devops,kubernetes,容器,Pod,Deployment,docker

#查看拓展信息 可以看到IP等信息
kubectl get pods -o wide

k8s-基础知识(Pod,Deployment,ReplicaSet),docker && k8s && devops,kubernetes,容器,Pod,Deployment,docker
提醒:官方不退年使用kubectl 命令来创建pod,推荐使用yml的方式来创建pod

YAML 方式创建POD
apiVersion: v1
kind: Pod
metadata:
  name: demo-pod
  labels: 
    app: demonginx
    type: nginxservice
spec:
  containers:
  - name: nginx
    image: nginx
#创建并启动pod 下面两个命令是一样的效果
kubectl create -f pod-ngix.yml
kubectl apply -f pod-ngix.yml
#停止pod
kubectl delete -f pod-ngix.yml

字段说明
apiVersion:API版本号。根据创建的内容,必须使用正确的API版本,不同版本号支持的功能可能不太一样。V1, app/V1beta,extensions/V1beta,等等
kind:资源类型,类型指的是创建的对象的类型,其他可能的值 Pod, Service, ReplicaSet, Deployment.
metadata:用来描述这个pod的元信息,比如名称和标签。有了这个元信息,我们区分这个pod,方便众多pod进行筛选。比如我们可以pod标识为前端应用,后端应用,数据库,中间件等。
spec: 其中container是一个数组,因为pod中可以有多个容器,名字前面的破折号表示这是列表中的第一个项目。列表中的每一个元素又是一个字典,所以要添加一个名称和image属性。image的值是nginx,这是docker仓库中的docker镜像。

ReplicationController

Pod 可以通过控制器来管理。它可以监测Kubernetes对象并及时反应,有下面这两个应用场景:
1 保证高可用,比如一个节点挂掉了,控制器会监测到会立即开启一个新的节点继续提供服务。
2 负载均衡,比如我们需要一个服务维持在3个节点以负载均衡。那么比如我们一个节点所在的宿主机的资源耗尽了,这个时候控制器可以调度在集群的其它机器上再创建一个节点,始终保持这个服务有三个节点来提供服务。

apiVersion: v1
kind: ReplicationController
metadata:
  name: demo-rc
  labels: 
    app: demonginx
    type: nginxservice
spec:
  template:
    metadata:
      name: ningx-pod
      labels: 
        app: nginxapp
    spec:
      containers:
      - name: nginx
        image: nginx
  replicas: 3

可以看到和前面的yml非常的类似,只是这次我们在spec定义了一个模板,这个模板就是比如我们一个节点挂掉了,这个时候控制器可以用这个模板来创建副本。同时replicas制定了节点数量为三个。

提醒:这里有个现象,比如你之前用命令行创建了一个pod,然后pod的标签和使用rc的一样,你会发现rc在启动的时候会直接把这个节点拿过来直接使用,也就是实际上只创建了两个节点

ReplicaSet

ReplicaSet与ReplicationController非常相似。ReplicaSet则相当于ReplicationController的升级版,它的作用也是控制pod的数量始终维持在预设的个数。

apiVersion: apps/v1 #注意需要使用这个版本
kind: ReplicaSet
metadata:
  name: demo-rc
  labels: 
    app: demonginx
    type: nginxservice
spec:
  template:
    metadata:
      name: ningx-pod
      labels: 
        app: nginxapp
        type: nginxservice #注意下面 selector 指定的matchLabels 要和这里的labels来对应
    spec:
      containers:
      - name: nginx
        image: nginx
  replicas: 3
  selector: 
    matchLabels:
      #这个是指定使用那个标签的服务 比如之前有一个服务标签叫这个 会直接拿过来用 和ReplicationController 一样 只是 ReplicationController不显示的定义,默认与pod定义文件中提供的标签相同
      type: nginxservice
#查看replicaset
kubectl get replicaset
#查看详细信息
kubectl describe replicaset demo-rs
扩容

使用下面命令:

kubectl scale replicaset myapp-rs --replicas=6
#修改命令 直接修改配置yml文件 修改以后k8会响应变化 demo-rc为replicaset名称
kubectl edit rs  demo-rc 

Deployment

官方推荐不要直接使用ReplicaSet,用Deployments。Deployment可以通过selector来匹配labels字段,过滤出它所关心的被控制对象。
Deployment不直接管理Pod对象,而是由Deployment管理ReplicaSet,再由ReplicaSet负责管理Pod对象。
Deployment为我们提供了使用滚动更新无缝升级底层实例的能力,e.g.撤销变化,暂停,并根据需要恢复变化。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  labels: 
    app: myapp
    type: myservice
spec:
  selector: 
    matchLabels:
      type: myservice
  replicas: 3
  template:
    metadata:
      name: myapp-pod
      labels: 
        app: myapp
        type: myservice
    spec:
      containers:
      - name: nginx
        image: nginx
#查看
kubectl get deployments
#查看所有资源
kubectl get all
kubectl describe deploy demo-deploy
滚动更新与回滚
kubectl create -f myapp-deploy.yml --record #通过--record 执行以后就可以看到history里面多了一条 记录

k8s-基础知识(Pod,Deployment,ReplicaSet),docker && k8s && devops,kubernetes,容器,Pod,Deployment,docker

#我们可以看到滚动更新的日志
kubectl edit deployment myapp-deployment --record && kubectl rollout status deployment/myapp-deployment

k8s-基础知识(Pod,Deployment,ReplicaSet),docker && k8s && devops,kubernetes,容器,Pod,Deployment,docker

#在执行一次镜像修改
kubectl set image deployment myapp-deployment nginx=nginx:perl --record && kubectl rollout status deployment/myapp-deployment

k8s-基础知识(Pod,Deployment,ReplicaSet),docker && k8s && devops,kubernetes,容器,Pod,Deployment,docker

kubectl describe pod  myapp-deployment-f5b5cdd5-22278

我们可以看到镜像已经变成了perl
k8s-基础知识(Pod,Deployment,ReplicaSet),docker && k8s && devops,kubernetes,容器,Pod,Deployment,docker
接着我们做一次回滚

kubectl rollout undo deployment/myapp-deployment

可以看到就是把1拿过来重新执行一遍:
k8s-基础知识(Pod,Deployment,ReplicaSet),docker && k8s && devops,kubernetes,容器,Pod,Deployment,docker
deployment 可以简写为deploy ,我们可以通过kubectl api-resources 这个命令来查看
这里有那些命令可以简写,简写成什么,对应的版本是什么
k8s-基础知识(Pod,Deployment,ReplicaSet),docker && k8s && devops,kubernetes,容器,Pod,Deployment,docker

多容器Pod

微服务架构允许我们根据需要使用需要扩展、缩减以及修改每个服务, 而不是修改整个应用程序。
有时可能需要两个服务一起工作,例如Web服务器和日志记录服务。每个Web服务器实例都需要一个日志收集代理一组。但是二者具有独立的代码库,单独开发和部署。文章来源地址https://www.toymoban.com/news/detail-819000.html

  • 共享同一Pod生命周期, 一起创建和销毁。
  • 共享相同的网络空间,可以通过localhost相互访问,
  • 共享存储卷。
    pod yaml文件中spec部分下的container部分是一个数组,允许一个pod中有多个container
 apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels: 
    app: myapp
    type: myservice
spec:
  containers: #这里指定了多个容器
  - name: nginx
    image: nginx
  - name: log-agent
    image: log-agent

到了这里,关于k8s-基础知识(Pod,Deployment,ReplicaSet)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s deployment创建pod流程图

    k8s 创建pod和deployment的流程 - SoulChild随笔记

    2024年02月11日
    浏览(59)
  • k8s基础知识

    理解docker [二] - namespace - 知乎 Kubernetes Controller 机制详解(一)-赵化冰的博客 | Zhaohuabing Blog K8S之自定义Controller - 知乎 Controller - K8S - 知乎 https://coolshell.cn/articles/17010.html/comment-page-2#comment-2133157 https://windsock.io/uts-namespace/ A Brief Tour of Linux Security Modules — Star Lab Software https://w

    2024年01月24日
    浏览(43)
  • 在学习k8s时候,pod services 和deployment

    在学习 Kubernetes(K8s)时,Pod、Service 和 Deployment 是三个非常重要的概念。它们是 Kubernetes 中用于管理容器化应用程序的核心组件。 Pod(Pods): Pod 是 Kubernetes 最基本的调度和管理单位,它是一个或多个紧密关联的容器的组合。Pod 提供了一个独立的运行环境,包含应用程序所

    2024年02月11日
    浏览(48)
  • 02 k8s考试基础知识(一)

    服务发现负载平衡 , 服务很方便的给外部用户 方便回滚和故障恢复 有金主爸爸们(google 红帽之类的) master(或者叫做Control Plane) 这边4个 etcl 存储这个分布式集群的信息 apiserver 通信用的 controller manage 这个是apiserver的小弟,没有主意的古惑仔 schedule 这个是apiserver的小弟之

    2024年02月03日
    浏览(59)
  • k8s(Kubernetes)设置 pod,Deployment 域名自定义映射ip,hosts 解析 HostAliases

    直接 编辑修改 Deployment 最后内容如下,如需保存 按 esc 键,最后输入 :wq 保存退出,容器会自动重新生成新的

    2024年02月12日
    浏览(47)
  • k8s-基础知识(Service,NodePort,CusterIP,NameSpace,资源限制)

    Node Node 是 Pod 真正运行的主机,可以是物理机,也可以是虚拟机。 Annotations 原文链接 Annotations 是 key/value 形式附加于对象的注解。不同于 Labels 用于标志和选择对象,Annotations 则是用来记录一些附加信息,用来辅助应用部署、安全策略以及调度策略等。比如 deployment 使用 an

    2024年01月24日
    浏览(56)
  • 【Java】基于fabric8io库操作k8s集群实战(pod、deployment、service、volume)

    一开始了解到Java Api库操作k8s集群,有两个,分别为: kubernetes-client/java fabric8io/kubernetes-client 但个人对比使用了两个发现,还是 fabric8io更易用 ,用的人多是有道理的, fabric8io和yaml文件十分贴切 ,所以 通俗易懂 。本文前提是已配置好集群,已经熟悉了kubectl工具常用命令。

    2024年02月02日
    浏览(48)
  • K8s(五)ReplicaSet控制器

    在Kubernetes(简称K8s)中,控制器是负责管理和维护集群中资源状态的组件。控制器监视集群中的对象,并根据它们的预期状态来采取行动,以确保系统的期望状态与实际状态保持一致。 对于自主式pod来说,删除pod之后pod就直接消失了,如果因为一些误操作或pod错误退出,就

    2024年01月21日
    浏览(43)
  • k8s基础4——deployment控制器、应用部署、升级、回滚、水平扩容缩容

    基本了解: Deployment是最常用的K8s工作负载控制器(Workload Controllers),实际项目部署调试中必用资源之一,所以必须要熟练掌握deploy资源的使用。 它是K8s的一个抽象概念,用于更高级层次对象,部署和管理Pod。 其他控制器还有DaemonSet、StatefulSet等,不同控制器针对不同的需

    2024年02月03日
    浏览(56)
  • k8s基础:使用kubectl set image命令更新Deployment中容器的镜像

    在Kubernetes中,使用 kubectl 更新Deployment中容器的镜像,可以使用以下命令: 例如,如果你有一个名为 myapp 的 Deployment,其中包含一个名为 mycontainer 的容器,你想将镜像从 myregistry/myimage:v1 更新到 myregistry/myimage:v2 ,可以执行: 这条命令将会触发一个滚动更新,根据你的Deploy

    2024年04月26日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包