栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

K8s---Pod管理之基本操作、资源清单构建与应用、pod生命周期、探针、控制器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

K8s---Pod管理之基本操作、资源清单构建与应用、pod生命周期、探针、控制器

目录

k8s平台使用:

Pod管理

外部访问集群节点:

回滚【undo】

集群外部访问:

资源清单构建与应用

pod生命周期

探针

pod的生命

控制器

job控制器:

周期化job


k8s平台使用:

server2

kubectl get node   #查看节点
kubectl get pod  
#查看pod(pod是k8s最小调度单位)
【默认是在default namespace来进行查询】

kubectl get pod -n kube-system 
#-n后跟其他的namespace

kubectl get namespaces   
#查看的有多少个namespaces

kubectl  get pod --all-namespaces  
#查看所有的namespaces

kubectl get  all  
#查看所有资源

kubectl get  svc

kubectl命令指南:
• https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

kubectl run demo --image=myapp:v1
运行demo容器 

kubectl get  pod  #查看是否运行
kubectl get  pod -o wide 
#查看运行在那个节点【默认master不参加调度】

curl 10.244.1.2
#此地址所有集群节点都可以访问,但是不能从集群外部访问

kubectl logs demo #查看容器日志

kubectl describe pod demo 
#查看pod详细信息

kubectl delete pod demo #删除
kubectl get pod


Pod管理

Pod是可以创建和管理Kubernetes计算的最小可部署单元,一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip。一个pod类似一个豌豆荚,包含一个或多个容器(通常是docker),多个容器间共享IPC、Network和UTC namespace。 

 

server2

kubectl create deployment demo --image=myapp:v1 --replicas=3
#创建容器,指定镜像,指定副本数为3
kubectl get pod
kubectl get pod -o wide 
#查看运行的节点是否全部就绪【可以看到在3、4两个节点上均衡】

kubectl scale deployment demo --replicas=6 
#设置副本数为6【拉伸】

kubectl get pod
kubectl set image deployment/demo myapp=myapp:v2 
#设置更新镜像

kubectl get pod
kubectl get pod -o wide 
curl 10.244.2.5 
#访问ip地址查看是否更新镜像成功

外部访问集群节点:
kubectl expose deployment demo --port=80 --target-port=80
#expose后跟暴露的服务器(deployment)指定暴露容器端口为80,目标端口为80

kubectl get all

kubectl describe svc demo
#可以看到svc的名字和刚才创建的demo一样 

curl 10.109.148.15
#访问svx地址

curl 10.109.148.15/hostname.html
此命令多执行几次,可以实现pod的负载均衡(算法是随即的)

kubectl scale deployment demo --replicas=3
#调至副本数为3

kubectl get pod

kubectl describe svc demo 
#查看资源变为三(动态的去修改svc底下的Endpoint)【svc在这里是个负载均衡器】
curl 10.109.148.15

回滚【undo】
kubectl get all 
#可以看到有两个rs

kubectl rollout history deployment demo 
#可以看到deployment控制器的历史

kubectl rollout undo deployment demo --to-revision=1
#undo到1上

kubectl get pod 
#可以看到更新到v1上

kubectl get svc
curl 10.109.148.15

 

kubectl get svc 
#回滚之后可以看到rs又变了(一个rs管控一个版本)【之前在67上现在在7c上】
#对于deployment而言,更新一次镜像变了会创建一个rs,之前的也会保留,但会使其副本数为0

kubectl get all

kubectl edit svc demo 
#编辑svc type:NodePort

kubectl get svc
多了一个80端口分配了30270【端口影射】

 

集群外部访问:
curl 172.25.70.2:30270
#访问集群内任何一个节点都可以访问到集群

curl 172.25.70.2:30270/hostname.html
curl 172.25.70.3:30270/hostname.html
curl 172.25.70.4:30270/hostname.html
#均衡的但是也是随即的

server2

kubectl get pod
注意:回收pod,自主式的删除pod,没有用。因为在容器集群中是自愈的,刚才删的pod又会自己创建

kubectl delete deployments.apps demo  #要删除控制器
kubectl get pod  
kubectl get all
kubectl delete svc demo 
kubectl get pod

 

资源清单构建与应用

kubectl api-versions 
#查看api资源版本

kubectl run demo --image=myapp:v1
kubectl get pod

kubectl get pod -o yaml
#生成资源清单
kubectl delete pod demo 
ls
mkdir pod
cd pod/
ls
vim pod.yml 
#编写资源清单【注意缩进】

查询帮助文档:

kubectl explain  pod.spec #查看参数
kubectl explain  pod.spec.containers

kubectl apply -f pod.yml  #创建
kubectl get pod
kubectl delete -f pod.yml #删除
kubectl get pod

vim pod.yml 
kubectl apply -f pod.yml 
kubectl get pod

kubectl get pod -o wide 
#查看运行的节点

curl 172.25.70.3 
#只能访问在运行的主机

查看帮助文档【可以一级一级往下走】

kubectl explain pod.spec.containers.resources
kubectl explain pod.spec.containers.resources.limits

kubectl get pod
kubectl describe pod pod-example  
#可以看有无资源单位

kubectl delete -f pod.yml 
#删除(自主式的pod不支持滚动更新)

vim pod.yml 
kubectl apply -f pod.yml 

kubectl describe pod pod-example 
#可以看到cgroup直接把资源设定好 

kubectl run -it demo --image=busybox --restart=Never
#使用busybox镜像
--restart=Never:pod终止后kubectl退出并报告给master,不会在重启该pod

kubectl get pod 
#可以看到没有刚才pod

kubectl delete pod demo 

 

kubectl run -it demo --image=busybox 

kubectl get pod  
#可以看到RESTARTS 有重启1次

kubectl attach demo -c demo -i -t  
#-c指容器名称

kubectl describe pod demo 
#可以看到name就是demo

kubectl get pod 
#可以看到重启两次

kubectl delete pod demo #删除
kubectl get pod
kubectl delete -f pod.yml 
ls

kubectl apply -f pod.yml 
#没改再次创建

kubectl get pod -o wide   
#可以发现运行在server4上

kubectl delete -f  pod.yml  
#删除

kubectl apply -f pod.yml 
#再次创建

kubectl get pod -o wide 
#这次运行在3上

kubectl delete -f  pod.yml 
#删除

vim pod.yml 
#修改清单,让pod在server4上

kubectl apply  -f pod.yml 
kubectl get pod -o wide 
kubectl delete -f pod.yml 

vim pod.yml 
#注释掉端口,使用物理网络

kubectl apply  -f pod.yml 

kubectl get pod -o wide 
#查看运行在哪

server4

netstat -antlp| grep 80 
#使用的是物理网络

server2

kubectl delete -f pod.yml 

 

pod生命周期
vim pod.yml 
#编写启动两个容器

kubectl apply -f pod.yml #创建

kubectl get pod 
#有一个重启动作,有错误,两个容器只有一个是就绪的

kubectl describe pod pod-example 
#查看详细信息

kubectl logs pod-example myapp2  
#myapp2有报错,端口冲突【在同一个pod内所有容器是共享网络盏】

kubectl logs pod-example myapp1 
#没有报错,占用了80端口,所有myapp2不能用

kubectl delete -f pod.yml #删除

 

vim pod.yml  
#把myapp2的镜像改为busybox(交互式)

kubectl apply -f pod.yml 
kubectl get pod  
#可以看到2个都已经准备就绪

kubectl attach -it pod-example -c myapp2
--/ # curl localhost  
#其实访问的是myapp1

kubectl get pod -o wide 
#两者用的是同一ip

curl 10.244.2.16   
#访问的是myapp1
kubectl delete -f pod.yml 

vim pod.yml 
#初始化容器

kubectl apply -f pod.yml 
kubectl get pod 
#可以看到正在初始化

kubectl describe pod pod-example 
#执行指令不成功

kubectl get svc  
#当前没有svc

kubectl logs pod-example  -c busybox  
#查看busybox日志

 

vim pod.yml 
kubectl apply -f pod.yml 
kubectl get pod
#pod没变,新创建了myservice

kubectl logs pod-example  -c busybox
kubectl get pod 
#解析成功状态运行

kubectl get pod -o wide 

curl 10.244.1.14
#访问容器ip

kubectl run -it demo --image=busyboxplus --restart=Never
--/ # nslookup myservice.default.svc.cluster.local #解析

kubectl get svc #查看svc
kubectl delete -f pod.yml 
kubectl get pod
kubectl delete pod demo 

 

探针
vim pod1.yaml
kubectl apply -f pod1.yaml 
kubectl get pod 
#容器状态运行

kubectl delete -f pod1.yaml 

vim pod1.yaml 【端口改为8080】
kubectl apply -f pod1.yaml 
kubectl get pod 
#状态running

kubectl get pod

kubectl get pod -w  
#可以看到容器一直在重启(认为是不存活的)检测发现8080端口不存在,就会一直重启容器

kubectl describe pod liveness-http 
kubectl get pod
kubectl delete -f pod1.yaml 

 

vim pod1.yaml 
kubectl apply -f pod1.yaml 
kubectl get pod 
#可以看到没有重启,但状态始终没有就绪

kubectl describe pod liveness-http 
#存活探针没有问题,就绪有问题:404找不到test.html页面
【如果pod不是就绪状态,就不会被svc发现,不会出现在svc上】

kubectl get pod
kubectl expose pod liveness-http --port=80 --target-port=80 
#暴露端口,端口80,目标端口80

kubectl get svc
kubectl describe svc liveness-http 
#svc名称和pod名称保持一致【Endpoints是空的,不能访问地址】

kubectl get pod

kubectl exec -it liveness-http -- bash
--/# ls
--/# cd /usr/share/nginx/html/
--/usr/share/nginx/html# ls
--/usr/share/nginx/html# echo www.westos.org > test.html
--/usr/share/nginx/html# ls

kubectl get  pod 
#状态就绪

kubectl describe pod liveness-http 

kubectl describe svc liveness-http 
#Endpoint,地址出现

kubectl exec  liveness-http -- rm -f /usr/share/nginx/html/test.html 
#删除页面

kubectl exec  liveness-http -- ls /usr/share/nginx/html
kubectl get pod 
#删除页面后不能就绪

kubectl describe svc liveness-http  
#Endpoint又变成空的

pod的生命
vim deploy.yml
kubectl apply -f deploy.yml 
kubectl get pod  
#出现3个pod

kubectl delete -f pod1.yaml 
#删掉探针

kubectl get pod
kubectl get all
kubectl get pod --show-labels 

kubectl label pod myapp-deployment-678fcbc488-4vqrc app=nginx --overwrite 
#改标签,--overwrite覆盖

kubectl get pod --show-labels 
#副本数还是3,之前改了标签的pod就不能被匹配

kubectl get all

kubectl label pod myapp-deployment-678fcbc488-4vqrc app=myapp --overwrite 
#改回原来的标签

kubectl get pod --show-labels 
#副本又是三个,之前的副本还在,最后启动的被回收了

 

kubectl label pod myapp-deployment-678fcbc488-4vqrc app=nginx --overwrite 

kubectl get pod --show-labels 
改标签之后,符合副本数的标签不对,就会在拉取一个

kubectl delete pod myapp-deployment-678fcbc488-4vqrc
把nginx标签的副本删除,没有控制器控制

kubectl get pod --show-labels 
 #被删掉了

kubectl delete pod myapp-deployment-678fcbc488-fqzmc
删除myapp标签的副本

kubectl get pod --show-labels 
又被拉了一个副本

kubectl get pod 

kubectl get rs
副本数的控制直接由rs来控制

vim deploy.yml 
【清单中改副本数为6个】
deployment控制器可以直接运行生效不需要delete

kubectl apply -f deploy.yml 
kubectl get pod
kubectl get all

vim deploy.yml 【副本数改为3】 
kubectl apply -f deploy.yml 
kubectl get pod

vim deploy.yml 【版本更新:镜像改为v2镜像】
kubectl apply -f deploy.yml 
kubectl get pod
kubectl get pod -o wide 
curl 10.244.2.22  #访问是v2
kubectl get all  
#又出现了一个57rs,之前67的不用了

vim deploy.yml 【版本更新:镜像改为v1镜像】
kubectl apply -f deploy.yml 

kubectl get pod -o wide 
#里面容器ip变了

curl 10.244.1.27 #访问是v1

kubectl get all 
#现有又用的是67,之前的57变成0了

kubectl -n kube-system get pod
网络组建和proxy是每个节点都会部署的

kubectl -n kube-system get all
有一个daemonset控制器,确保每个新加节点都会部署一个

(需要有zabbix监控,如果没有,可以拉取之后上传到私有仓库)

docker pull zabbix/zabbix-agent
docker tag zabbix/zabbix-agent:latest reg.westos.org/library/zabbix-agent:latest
docker push reg.westos.org/library/zabbix-agent:latest 

vim daemonset.yml  
【布置监控】

kubectl delete -f deploy.yml 
kubectl get pod
kubectl apply -f daemonset.yml 
kubectl get pod

kubectl get pod -o wide 
在所有节点都会创建,检测到多几个node就会创建几个副本,2没有创建是因为管理端不参加调度

kubectl get node
kubectl delete -f daemonset.yml 

 ​​​​​​​

控制器

job控制器:

用来做计算的,(精确到小数点后两千位)
一次性计算

(需要有perl镜像,如果没有,可以拉取之后上传到私有仓库)
docker pull perl
docker tag perl:latest reg.westos.org/library/perl:latest
docker push reg.westos.org/library/perl:latest 

vim job.yml 【用perl镜像】
kubectl apply -f job.yml 
kubectl get pod

kubectl describe pod pi-kwtc2 
被调度到server3上

kubectl get pod
#Completed出现就是计算完成

kubectl logs pi-kwtc2  #查看信息
kubectl get pod
kubectl delete pod pi-kwtc2 
kubectl get jobs.batch 
kubectl delete -f job.yml 
kubectl get pod
kubectl get jobs.batch 

 

周期化job
vim cronjob.yml 【每分钟执行data】
kubectl apply -f cronjob.yml 
kubectl ls
kubectl get pod
kubectl get pod -w

kubectl logs cronjob-example-27365014-5nrg6 
第一次运行时间是11:34:00
kubectl get pod

kubectl logs cronjob-example-27365015-qswrw 
第二次运行时间是11:35:00【一分钟执行一次】

kubectl delete -f cronjob.yml 
kubectl get cronjobs.batch 
kubectl get pod
kubectl get all

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/705276.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号