Kubernetes2——Pod管理应用、资源清单

一、Pod

  • 在Kubernetes中,最小的管理元素不是一个个独立的容器,而是Pod,Pod是管理,创建,计划的最小单元.一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip。
  • 一个pod类似一个豌豆荚,包含一个或多个容器(通常是docker),多个容器间共享IPC、Network和UTC namespace。
  • 一个Pod就相当于一个共享context的配置组,在同一个context下,应用可能还会有独立的cgroup隔离机制,一个Pod是一个容器环境下的“逻辑主机”,它可能包含一个或者多个紧密相连的应用,这些应用可能是在同一个物理主机或虚拟机上。
  • Pod 的context可以理解成多个linux命名空间的联合:
    PID 命名空间(同一个Pod中应用可以看到其它进程);
    网络 命名空间(同一个Pod的中的应用对相同的IP地址和端口有权限);
    IPC 命名空间(同一个Pod中的应用可以通过VPC或者POSIX进行通信);
    UTS 命名空间(同一个Pod中的应用共享一个主机名称);
  • Pod和相互独立的容器一样,Pod是一种相对短暂的存在,而不是持久存在的,正如我们在Pod的生命周期中提到的,Pod被安排到节点上,并且保持在这个节点上直到被终止(根据重启的设定)或者被删除,当一个节点死掉之后,节点上运行的所有Pod均会被删除。

二、Namespace

  • Namespace是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的pods, services, replication controllers和deployments等都是属于某一个namespace的(默认是default),而node, persistentVolumes等则不属于任何namespace。
  • Namespace常用来隔离不同的用户,比如Kubernetes自带的服务一般运行在kube-system namespace中。
  • Kubernetes中的名称空间与docker中的名称空间不同。K8s中的名称空间只是做了一个逻辑上的隔离

常用命令:

[root@server2 ~]# kubectl get namespaces #查看K8s中存在的名称空间
NAME              STATUS   AGE
default           Active   12h
kube-node-lease   Active   12h
kube-public       Active   12h
kube-system       Active   12h
#namespace包含两种状态”Active”和”Terminating”。在namespace删除过程中,namespace状态被设置成”Terminating”
[root@server2 ~]# kubectl describe namespaces default 
Name:         default
Labels:       kubernetes.io/metadata.name=default
Annotations:  <none>
Status:       Active

No resource quota.

No LimitRange resource.
#查看default名称空间的详细信息
[root@server2 ~]# kubectl get pod --namespace=default
No resources found in default namespace.
[root@server2 ~]# kubectl get pod -n default #查看default名称空间中的pod资源(两者都可以)
No resources found in default namespace.
[root@server2 ~]# kubectl get pod #如果不指定,则默认也是查看default名称空间中的资源
No resources found in default namespace.

三、Pod操作

1、创建删除pod

kubectl run demo --image=myapp:v1 #创建并运行demo
kubectl get pod #查看创建的demo
kubectl describe pod demo #查看详细内容
kubectl get pod -o wide #查看pod的ip
cat /var/run/flannel/subnet.env
kubectl  delete  pod demo #删除pod

查看node端的flannel环境:
在这里插入图片描述
该pod是在server3上部署的,所以处于一个网段
在这里插入图片描述

2、创建控制器管理pod

创建控制器,并创建两个副本控制器rs,由deployment管理副本控制器rs,rs管理pod

[root@server2 ~]# kubectl create deployment demo --image=myapp:v1 --replicas=2
deployment.apps/demo created
[root@server2 ~]# kubectl get pod -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP           NODE      NOMINATED NODE   READINESS GATES
demo-5b4fc8bb88-98q5c   1/1     Running   0          18s   10.244.1.3   server3   <none>           <none>
demo-5b4fc8bb88-x7nqx   1/1     Running   0          18s   10.244.2.2   server4   <none>           <none>
kubectl  get all #查看所有资源信息

在这里插入图片描述
删除创建的pod,会发现删不掉,会自动重新部署,这是因为有控制器在,想彻底删除要先删掉控制器
在这里插入图片描述
设置控制器对外暴露的端口为80
在这里插入图片描述
访问对外暴露的ip,自动实现了负载均衡
在这里插入图片描述
查看服务(svc:service)的具体信息,可以看到后端节点的ip
在这里插入图片描述

kubectl delete deployments.apps demo #删除控制器

3、pod扩容

kubectl scale deployment demo --replicas=6
kubectl get pod

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
减小规模

kubectl scale deployment demo --replicas=2
kubectl get pod

在这里插入图片描述

4、镜像更新

kubectl set image deployment demo myapp=myapp:v2
kubectl rollout history deployment demo #查看回滚历史
#如果想显示详细信息,在更新镜像时要加–record参数来记录
kubectl rollout undo deployment demo --to-revision=1 #切回版本1(注意,一个版本切一次后就会变为一个新的版本,比如我们现在切回1但其实他已经变为版本3了)
kubectl get rs

在这里插入图片描述
在这里插入图片描述

四、资源清单

  • 资源清单是K8S的一种yml格式文件,按照这种文件,可以自定义的去创建K8S的资源。在kubernetes中,所有控制器,组件等都称为资源。
• apiVersion: group/version   //指明api资源属于哪个群组和版本,同一个组可以有多个版本
$ kubectl api-versions        //查询命令


• kind:          //标记创建的资源类型,k8s主要支持以下资源类别
Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob

• metadata:      //元数据
name:            //对像名称
namespace:       //对象属于哪个命名空间
labels:          //指定资源标签,标签是一种键值数据


• spec:           //定义目标资源的期望状态
• $ kubectl explain pod   //查询帮助文档

示例文件:用pod.yaml 文件创建pod

apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  #hostNetwork: true #直接把物理机的端口给容器用
  #nodeName: server4 #使用server4作为后端
  #imagePullSecrets: 
  containers:
  - name: myapp
    image: westos/game2048:latest
    imagePullPolicy: IfNotPresent #优先在已有镜像的服务端创建,不再重复拉取镜像,节省资源
    resources:
      requests: #对cpu和mem的最低要求
        cpu: "100m"
        memory: "50Mi"
      limits: #对cpu和mem的最高限制
        cpu: "200m"
        memory: "100Mi"
    #ports: #指定容器所在主机需要监听的端口号,会写到iptables策略中
    #  - containerPort: 80
    #    hostPort: 80 #利用NAT把物理机的80端口影射到容器的80端口
#  - name: busybox
#    image: busyboxplus:latest
#    imagePullPolicy: IfNotPresent
#    tty: true
#    stdin: true
kubectl apply -f pod.yaml #拉起pod
kubectl get pod -o wide

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

贾几人要努力

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

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

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

打赏作者

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

抵扣说明:

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

余额充值