k8s-Pod 管理、资源清单、pod生命周期、控制器

目录

Pod 管理

集群内部pod外部访问

集群外部访问pod

pod的应用版本更新和回滚

​资源清单

Pod生命周期

容器初始化

容器探针

​ 控制器


Pod 管理

Pod是Kubernetes中能够创建和部署的最小单元,是Kubernetes集群中的一个应用实例,总是部署在同一个节点Node上。Pod中包含了一个或多个容器,还包括了存储、网络等各个容器共享的资源。Pod支持多种容器环境,Docker则是最流行的容器环境

Kubernetes中Pod控制器

pod的管理主要有RC(RS)、Deployment、StatefulSet、DaemonSet和Job(CronJob)等

Replication Controller

Replication Controller简称RC,简单来说,RC可以保证在任意时间运行Pod的副本数量,能够保证Pod总是可用的。总维持pod是指定的副本数量运行。

Replication Set
Replication Set简称RS,随着Kubernetes的发展,RS在RC的基础上做了一些扩展,官方已经推荐使用RS和Deployment来代替RC了

Deployment
主要职责和RC一样的都是保证Pod的数量和健康,二者大部分功能都是完全一致的,可以看成是一个升级版的RC控制器。比如一些官方组件kube-dns、kube-proxy也都是使用的Deployment来管理的.

 kubectl run nginx --image=nginx #运行一个pod
 kubectl get pod #查看pod running
 kubectl get pod -o wide # - o wide 查看详细信息可以看到调度到server4上

curl 10.244.2.2 #可以访问
kubectl delete pod nginx #删除pod
kubectl get pod
kubectl describe nodes server2 | grep Tain #可以看到server2为master 有污点,不能调度

 kubectl create deployment my-dep --image=myapp:v1 --replicas=3 ##创建一个deployment控制器,pod副本数为3
kubectl get pod
kubectl get pod -o wide ##查看pod的ip
curl 10.244.2.4 可以访问到容器
curl 10.244.2.3
curl 10.244.2.2
kubectl delete pod my-dep-587db649dc-cg2r4 #删除其中一个pod
kubectl get pod ##系统会根据副本数自动重新创建
kubectl get all

集群内部pod外部访问

此时的pod在集群外部和pod外部并不能被访问,只能在pod内部被访问,要实现集群内部pod外部访问就要借助service,service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略,一般把service称为微服务。

接下来创建service:

kubectl expose deployment my-dep --port=80 --target-port=80 ##暴露控制器端口
kubectl get svc #此时pod客户端可以通过service的名称访问后端的两个pod,其中Cluster ip为默认类型,自动分配一个仅集群内部可以访问的虚拟ip。
kubectl describe svc my-dep
kubectl get pod -o wide
curl 10.102.166.126
curl 10.102.166.126/hostname.html
kubectl get svc

集群外部访问pod

要想实现集群外部访问,我们可以使用NodePort类型暴露端口,让外部客户端访问Pod。

NodePort:在ClusterIp基础上为Service在每台机器上绑定一个端口,这样就可以通过NodeIP:NodePort来访问该服务。

由于集群已经创建,因此要实现集群外部访问需要更改集群网络类型:

kubectl edit svc my-dep ##将ClusterIp该为NodePort
kubectl get svc #查看暴露出来的端口

可以通过外部访问指定端口 32397

基于deployment我们也可以实现拉伸pod 

kubectl scale --replicas=6 deployment my-dep ##扩大副本数为6
kubectl get pod
kubectl get pod -o wide

pod的应用版本更新和回滚

kubectl set image deployment my-dep myapp=myapp:v2 --record ##更新版本为v2 --record记录更新信息
kubectl rollout history deployment my-dep #查看更新历史
kubectl get pod
kubectl get all
kubectl rollout undo deployment my-dep --to-revision=1 回滚到v1
kubectl get all
kubectl get pod

可以看到更新为v2

资源清单

在k8s中,一般使用yaml格式的文件来创建符合我们预期期望的pod,这样的yaml文件我们一般称为资源清单

资源清单的格式

apiVersion: group/apiversion: 如果没有给定group名称,那么默认为croe,可以使用kubectl api-versions 获取当前k8s版本上所有的apiVersion版本信息(每个版本可能不同)

kind:  资源类别
metadata: 资源元数据
name
namespace #k8s自身的namespace
lables        #标签
    annotations #主要目的是方便用户阅读查找
spec:期望的状态(disired state)
status:当前状态,本字段有kubernetes自身维护,用户不能去定义

实验之前删除之前创建的控制器

kubectl get pod
kubectl delete deployment.apps my-dep
kubectl get pod

kubectl run demo --image=nginx
kubectl get pod -o yaml ##将容器信息生成yaml文件
kubectl get pod -o yaml > demo.yaml
kubectl delete -f demo.yaml
kubectl get pod 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值