目录
一、Pod简介
Pod是可以创建和管理Kubernetes计算的最小可部署单元,一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip。
一个pod类似一个豌豆荚,包含一个或多个容器(通常是docker),多个容器间共享IPC、Network和UTC namespace。
二、Pod管理
1.Pod创建与使用
(1)先启动harbor仓库,因为集群创建pod时需要从私有仓库中拉取镜像,检查test1的harbor仓库是否启动
(2)test2集群Master端查看集群内各节点均处于就绪状态
(3)启动容器创建Pod应用,(当前版本的k8s)使用这种方式不可以指定Pod内副本个数,只能生成一个容器,使用describe参数可以查看指定Pod中容器的详细属性信息
kubectl run demo1 --image=myapp:v1 ##创建Pod应用
kubectl describe pod demo1 ##查看指定Pod中容器的详细属性信息
kubectl get pod -o wide查看Pod资源的额外信息如容器分配到的ip、调度到集群中的哪一台主机上, curl访问查询到的ip可以看到生成容器所使用的镜像的默认发布页面
(4)删除Pod,创建deployment控制器,这种方式可以使用-replicas参数指定创建副本的个数,集群会自动创建Pod,此时查看pod信息可以看到pod中有4个随机调度生成的容器副本
kubectl delete pod demo1 ##删除
kubectl create deployment demo --image=myapp:v1 --replicas=4 ##创建deployment控制器,指定创建副本的个数为4
2.Pod扩容与缩容
(1)使用scale参数将已有pod中的容器副本数目扩容到指定数量6
kubectl scale deployment demo --replicas=6
(2)使用scale参数将已有pod中的容器副本数目缩容到指定数量3,缩容时是把最新创建的容器副本删掉,保留运行时间最长的容器副本
kubectl scale deployment demo --replicas=3
3.Pod中镜像的滚动更新
(1)使用deployment控制器更新pod中容器副本的镜像版本,可以看到原来的容器副本被删掉,创建了新镜像版本的容器副本
kubectl set image deployment demo myapp=myapp:v2
(2)查看Pod资源的额外信息得到容器分配到的ip, curl访问查询到的ip,从镜像默认发布页面可以看出生成容器所使用的镜像版本成功更新
(3)查看集群中所有已存在的资源可以发现,原来的RS副本控制器不会删掉,会创建新的RS控制器,这样便于镜像版本回滚,当pod中镜像回滚到原来的版本时,原来的控制器又会再次运行
kubectl get all
(4)使用deployment控制器回滚pod中容器副本的镜像版本,查看Pod资源的额外信息得到容器分配到的ip, curl访问查询到的ip可以看到生成容器所使用的镜像版本已回滚,原来的RS控制器再次运行,同理新的RS控制器不会删掉
kubectl rollout undo deployment demo --to-revision=1
4.设定暴露端口
ClusterIP: 默认类型,自动分配一个仅集群内部可以访问的虚拟IP
自动分配一个仅集群内部可以访问的虚拟IP暴露deployment控制器创建service,设定暴露端口,此时k8s集群会为pod自动分配一个仅集群内部可以访问的虚拟IP即vip,访问这一vip会轮询pod中的几个容器副本,实现自动负载均衡
service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略,一般把service称为微服务。
kubectl expose deployment demo --port=80 --target-port=80
kubectl describe svc demo ##查看service详细信息
使用test2节点curl此虚拟ip,可看到已实现负载均衡(随机访问节点中的一个)
NodePort:在ClusterIP基础上为Service在每台机器上绑定一个端口,这样就可以通过 NodeIP:NodePort 来访问该服务类型暴露端口,让外部客户端访问Pod
修改service的type为NodePort
kubectl edit svc dem
此时在宿主机访问集群内任意节点ip的30325端口,都可访问到pod,且实现了负载均衡