Kubernetes集群部署(二)——Pod管理,资源清单,Pod生命周期,控制器

一 Pod管理

1 pod概述

Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程。

一个Pod封装一个应用容器(也可以有多个容器),存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。Pod代表部署的一个单位:Kubernetes中单个应用的实例,它可能由单个容器或多个容器共享组成的资源。
Kubernetes中的Pod使用可分两种主要方式:

Pod中运行一个容器。“one-container-per-Pod”模式是Kubernetes最常见的用法; 在这种情况下,你可以将Pod视为单个封装的容器,但是Kubernetes是直接管理Pod而不是容器。
Pods中运行多个需要一起工作的容器。Pod可以封装紧密耦合的应用,它们需要由多个容器组成,它们之间能够共享资源,这些容器可以形成一个单一的内部service单位
  • 一个容器共享文件,另一个“sidecar”容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理。

2Pods如何管理多个容器

Pods的设计可用于支持多进程的协同工作(作为容器),形成一个cohesive的Service单位。Pod中的容器在集群中Node上被自动分配,容器之间可以共享资源、网络和相互依赖关系,并同时被调度使用。

请注意,在单个Pod中共同管理多个容器是一个相对高级的用法,应该只有在容器紧密耦合的特殊实例中使用此模式。例如,有一个容器被用作WEB服务器,用于共享volume,以及一个单独“sidecar”容器需要从远程获取资源来更新这些文件

3 创建Pod应用

[root@server1 ~]# kubectl run demo --image=myapp:v1
pod/demo created
[root@server1 ~]# kubectl get pod
NAME   READY   STATUS    RESTARTS   AGE
demo   1/1     Running   0          10s
[root@server1 ~]# kubectl get pod -o wide
NAME   READY   STATUS    RESTARTS   AGE   IP           NODE      NOMINATED NODE   READINESS GATES
demo   1/1     Running   0          16s   10.244.3.2   server4   <none>           <none>
[root@server1 ~]# curl 10.244.3.2
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@server1 ~]# curl 10.244.3.2/hostname.html
demo
#集群内部任意节点可以访问Pod,但集群外部无法直接访问。

4 删除Pod

[root@server1 ~]# kubectl delete pod demo 
pod "demo" deleted

5 创建service

service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略,
一般把service称为微服务。

[root@server1 ~]# kubectl create deployment demo --image=myapp:v1 --replicas=2
deployment.apps/demo created
[root@server1 ~]# kubectl get all
NAME                        READY   STATUS    RESTARTS   AGE
pod/demo-5b4fc8bb88-qhww4   1/1     Running   0          17s
pod/demo-5b4fc8bb88-x6dqp   1/1     Running   0          17s

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   41h

NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/demo   2/2     2            2           17s

NAME                              DESIRED   CURRENT   READY   AGE
replicaset.apps/demo-5b4fc8bb88   2         2         2       17s
#此时pod客户端可以通过service的名称访问后端的两个Pod
#ClusterIP: 默认类型,自动分配一个仅集群内部可以访问的虚拟IP

6 Pod扩容与缩容

$ kubectl scale --replicas=6 deployment nginx
$ kubectl scale --replicas=3 deployment nginx

7 使用NodePort类型暴露端口,让外部客户端访问Pod

[root@server1 ~]# kubectl expose deployment demo --port=80 --target-port=80
service/demo exposed
[root@server1 ~]# kubectl get all
NAME                        READY   STATUS    RESTARTS   AGE
pod/demo-5b4fc8bb88-6nd75   1/1     Running   0          2m36s
pod/demo-5b4fc8bb88-x6dqp   1/1     Running   0          4m17s

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/demo         ClusterIP   10.99.239.76   <none>        80/TCP    10s
service/kubernetes   ClusterIP   10.96.0.1      <none>    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值