目录
一、pod基本操作
简介:
Pod是可以创建和管理Kubernetes计算的最小可部署单元,一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip。一个pod类似一个豌豆荚,包含一个或多个容器(通常是docker),多个容器间共享IPC、Network和UTC namespace。
kubectl常用命令
kubectl run demo --image=myapp:v1 %创建新的pod,叫demo
kubectl get node %查看k8s的所有node节点
kubectl get pods %列出所有运行的Pod信息
kubectl get pods -o wide %列出Pod以及运行Pod节点信息
kubectl describe pod demo %查看demo的详细信息
kubectl get all %查看所有资源信息
kubectl get ns %查询命名空间中的资源
首先确保k8s部署成功
运行容器镜像:myapp:v1,创建Pod应用
列出Pod信息
查看demo的详细信息,此pod被分配到的ip如下
表示pod创建成功
集群内部任意节点可以访问Pod,但集群外部无法直接访问
在系统的目录下查看分配的网络信息,可以看到mater主机(server2)是0网段,
server3是1网段
server4是2网段
删除名叫demo的pod
二、部署Deployment(pod 扩容、更新、回滚)
创建一个名为demo 的deployment,–replicas=2,副本数为2
查看pod的标签
可以看到Deployment控制器
删除其中一个Pod,由于–replicas=2,集群会自动创建Pod
service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略,一般把service称为微服务。
创建service: kubectl expose deployment nginx --port=80 --target-port=80;
此时pod客户端可以通过service的名称访问后端的两个Pod,ClusterIP: 默认类型,自动分配一个仅集群内部可以访问的虚拟IP,访问该虚拟ip,可以看到后端负载均衡
kubectl describe svc demo:查看demo这个服务的虚拟ip和两个后端
此时pod副本数为2
Pod扩容,从2个副本变为6个副本
可以看到有六个后端服务
查看Pod节点的详细信息
Pod缩容
可以看到,缩容时,最新创建pod的会被最先删除
更新pod镜像,镜像从myapp:v1更新为myapp:v2
访问更新之后的pod的IP,可以看到v2版本
镜像更新之后,发现之前的副本信息也保存着,但是开启的副本数量是0,这是为了便于回滚
kubectl rollout history deployment nginx :查看历史版本
kubectl rollout undo deployment nginx --to-revision=1 :回滚版本
可以看到版本变回了v1
查看rs(replicasets信息)信息,说明版本更新和回退会在这两个rs中变化
三、资源清单
在k8s中,一般使用yaml格式的文件来创建我们期望产生的pod,该yaml文件称为资源清单,可以减少命令行的使用,减少错误,可重复性好,可以规范化部署。
apiVersion: group/version :指明api资源属于哪个群组和版本,同一个组可以有多个版本
kubectl api-versions :查询命令
kubectl delete deployment nginx :彻底删除pod
创建一个pod,输出为yaml文件,可以看到yaml文件编写的要求;
apiVersion: v1 %指明api资源属于哪个群组和版本,同一个组可以有多个版本
kind: Pod %标记创建的资源类型,k8s主要支持以下资源类别(Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob)
metadata: %元数据
name: pod-example %对象名称
spec: %定义目标资源的期望状态
containers:
- name: myapp %容器名字
image: myapp:v1 %指定镜像
也可以通过如下指令,查看pod所有参数,带有required是必须存在的参数
二、使用步骤
1.自主式Pod资源清单
文件格式为.yaml,创建名为pod-example的pod,镜像为myapp:v1;
执行清单,并查看pod信息
在sesrver1已经将busyboxplus镜像上传至仓库
将刚才的pod.yaml删除;
继续编写资源清单,创建一个pod节点,其中包含myapp容器和busyboxplus容器,并为其分配伪终端
查看pod的详细信息
进入busybox终端,-c 指定容器 ;-i 打开输入端口 ;-t 打开伪终端;
终端内访问localhost,看到的是pod中myapp容器的发布页面,这是因为pod中所有的副本共享一个ip
退出后可继续进入,pod节点会重启;
ctrl+d退出终端,但是再次查看可以看到还是running状态;
删除后,继续修改资源清单;
定义镜像拉取策略,有Always、Never、IfNotPresent三个值可选:
(1)Always:意思是每次都尝试重新拉取镜像;
(2)Never:表示仅适用本地镜像,本地有则使用本地镜像,不拉取;
(3)IfNotPresent:如果本地有镜像就使用本地镜像,没有就拉取在线镜像。
上面三个值都没设置的话,默认是Always。
可以看到没有拉取动作
2.设定监听端口
ports: 指定容器所在主机需要监听的端口号,会写到iptables策略中
- containerPort: 80
hostPort: 80 利用NAT把物理机的80端口映射到容器的80端口
此时直接访问server3,就是访问所运行的容器
在server3上查看没有80端口,但是在路由策略里面有80
3.使用清单锁定IP
hostNetwork: true :锁定pod为与主机共用ip,使用宿主机网络,读取应用资源清单重新创建pod
查询帮助文档
查看Pod信息可以看到pod的ip为其运行节点主机(server4)的ip;
curl访问该ip,可以成功访问pod中容器副本的默认发布页面;
(设置了hostNetwork值为true将无法在同一台宿主机上启动该容器的第二个副本)
到server4上查看端口80
4.限制内存和CPU
删除由资源清单生成的pod节点,继续修改文件,限制内存和cpu使用量,requests为最低限制,limit为最高限制
可以看到限制cpu和内存的信息
5.restartPolicy重启策略
默认容器副本退出后(ctrl d ),会自动重启,加上参数–restart=Never实现退出后不重启
不加参数,且使用ctrl p q 退出后,容器继续running状态,可以使用attach连接上正在运行的容器
6.锁定pod节点
强制将pod调度到指定节点server5上
由于并没有创建server5节点,因此读取资源清单后重新创建的pod无法就绪,一直处于pending等待状态
删除已有的pod,继续编辑资源清单,设置强制将pod调度到指定节点server3上
设置成功
若是指定下载的仓库不是公开的就会报错,将westos设置为不公开
删除pod节点,重新修改文件
可以看到报错信息,镜像拉取失败