kubernetes(3) ——Pod管理

1. 什么是Pod

Pod是可以创建和管理Kubernetes计算的最小可部署单元,一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip。

一个pod类似一个豌豆荚,包含一个或多个容器(通常是docker),多个容器间共享IPC、Network和UTC namespace。
kubernetes(3) ——Pod管理_第1张图片
注意:以下实验是在搭建好k8s的基础上进行的(见上一篇博文)

2.pod管理

- 1.用自主命令的方式运行pod

部署过程中所有需要的镜像均由server2 push到harbor仓库中
各个节点必须配置有certs.d/westos.org/ca.crt 认证
可以从harbor仓库中拉取镜像

kubernetes(3) ——Pod管理_第2张图片
运行服务nginx:
修改镜像仓库
kubernetes(3) ——Pod管理_第3张图片

docker run --name demo --image=westos.org/library/nginx

注意:创建时不指定namespace,默认都在default中

kubernetes(3) ——Pod管理_第4张图片
kubernetes(3) ——Pod管理_第5张图片
查看日志

kubeclt logs demo

kubernetes(3) ——Pod管理_第6张图片
kubernetes(3) ——Pod管理_第7张图片
容器中访问pod
kubernetes(3) ——Pod管理_第8张图片
删除pod:

kubectl delete pod demo

在这里插入图片描述

- 2.deployment方式运行pod(部署)

首先我们用自主命令方式运行nginx和myapp镜像:

kubectl run nginx --image=nginx
kubectl run myapp --image=myapp:v1

查看pod的运行状态:

kubectl get pod
kubectl get pod -o wide

删除myapp:

kubectl delete pod myapp

我们发现用这种方式运行的myapp可以顺利删除

用 deployment方式运行myapp:

kubectl create deployment myapp --image=myapp:v1
kubectl get pod

kubernetes(3) ——Pod管理_第9张图片

删除myapp:

kubectl delete pod myapp-7449b5b68f-ss8b8

kubectl get pod	#可以看到又多出了myapp-7449b5b68f-pm5mn
kubectl get all

kubernetes(3) ——Pod管理_第10张图片
kubernetes(3) ——Pod管理_第11张图片
我们可以发现删除deployment方式运行的myapp,删除后会自动创建一个新的,这是通过副本来维护的
kubernetes(3) ——Pod管理_第12张图片
kubernetes(3) ——Pod管理_第13张图片
通过该方式创建的pod无法通过kubectl delete pod ,这是通过rs(副本)来维护的。
可以通过使用depolyment来删除
kubernetes(3) ——Pod管理_第14张图片

  • 3.deloyment形式的pod拉伸
 kubectl scale --replicas=2 deployment app
kubectl get pod
kubectl get pod -o wide

kubernetes(3) ——Pod管理_第15张图片
删除Pod:

kubectl delete pod app-6db489d4b7-2v97v
         ##由于--replicas=2,集群会自动创建Pod。
kubectl delete deployment nginx	

kubernetes(3) ——Pod管理_第16张图片

  • 4.创建服务Pod间的互相访问

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

创建service

kubectl expose deployment app --port=80 --target-port=80
kubectl get deployments.apps 

此时pod客户端可以通过service的名称访问后端的两个Pod

ClusterIP: 默认类型,自动分配一个仅集群内部可以访问的虚拟IP

kubectl get svc
kubectl describe svc app 

kubernetes(3) ——Pod管理_第17张图片
测试:

kubectl run test1 -it --image=reg.westos.org/k8s/busyboxplus 
kubectl attach test -it
curl 10.109.54.133/hostname.html
curl 10.109.54.133/hostname.html

kubernetes(3) ——Pod管理_第18张图片 我们可以看到它实现了pod的负载均衡
当我们拉伸pod时,它会自动识别,从而添加到负载均衡集群中
kubernetes(3) ——Pod管理_第19张图片
实现了Pod的负载均衡。

当拉伸时,会自动识别
kubernetes(3) ——Pod管理_第20张图片
kubernetes(3) ——Pod管理_第21张图片
kubernetes(3) ——Pod管理_第22张图片
kubernetes(3) ——Pod管理_第23张图片
但是这种方式实现的还是一个集群内部可以访问的虚拟ip

  • 5.把pod暴露给集群外部主机

对于已经创建的Pod,可以手动修改type

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

方法一:对于已经创建的pod,可以手动修改type
kubernetes(3) ——Pod管理_第24张图片
kubernetes(3) ——Pod管理_第25张图片
访问:
kubernetes(3) ——Pod管理_第26张图片
kubernetes(3) ——Pod管理_第27张图片
kubernetes(3) ——Pod管理_第28张图片
方法二:在创建时指定–type=NodePort

kubectl expose deployment app --port=80 --target-poet=80 --type=NodePort
kubectl get pod -o wide
kubectl get svc app

可以看到它对外提供的端口
测试:

curl 172.25.254.3:31365
curl 172.25.254.3:31365/hostname.html

此时在集群外部也可以访问到集群内部的pod

  • 6.Pod扩容与缩容
$ kubectl scale --replicas=6 deployment  nginx
$ kubectl scale --replicas=3 deployment  nginx

kubernetes(3) ——Pod管理_第29张图片

  • 7.pod的滚动更新以及回滚
    更新pod镜像:
kubectl set image deployments app myapp=westos.org/library/myapp:v2 --record

回滚:

kubectl rollout history deployment app  //查看历史版本
kubectl rollout undo deployment app --to-revision=1	//回滚版本

kubernetes(3) ——Pod管理_第30张图片
kubernetes(3) ——Pod管理_第31张图片
可以看到版本信息变成v2了:
kubernetes(3) ——Pod管理_第32张图片
回滚到v1版本:
kubernetes(3) ——Pod管理_第33张图片

你可能感兴趣的:(kubernetes(3) ——Pod管理)