kubectl 命令管理pod资源
Kubectl是管理k8s集群的命令行工具,可通过kubectl命令进行创建、查看、管理的操作。
可详细查看kubectl命令中的参数信息
#kubectl --help
查看资源对象简写
#kubectl api-resources
1:创建命令 kubectl run
如:创建资源,多副本的创建
# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3
# kubectl get pods 可看到3个副本集
动态监控pod资源的创建
# kubectl get pods -w
查看pod资源分配在哪个node节点
# kubectl get pods -o wide
# kubectl get all 可以看到更详细的
pod资源的创建伴随着控制器deployment和replicaset副本集的创建
2:删除命令
# kubectl delete deploy/nginx
# kubectl delete deploy/nginx-deployment
# kubectl get pods
示例:
项目的生命周期:创建–>发布–>更新–>回滚–>删除
master1节点:
1:创建nginx
创建nginx,指定镜像,指定端口,指定副本数量
# kubectl run nginx --image=nginx:latest --port=80 --replicas=3
动态监控pod资源的创建
# kubectl get pods -w
没有指定命名空间,默认 是default
# kubectl get pods
# kubectl get pods,deployment,replicaset
伴随着pod资源的创建,同时创建了deployment和replicaset
2:发布nginx serivce提供负载均衡的功能
# kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
# kubectl get svc
不管访问哪个nodepodIP,都可以访问到资源,是因为有kube-proxy负载均衡
# kubectl get svc
可看负载均衡端口46091
查看网络状态详细信息
# kubectl get pods -o wide
查看关联后端的节点
# kubectl get endpoints
kubernetes里kube-proxy支持三种模式,在v1.8之前我们使用的是iptables 以及userspace两种模式,在kubernetes 1.8之后引入了ipvs模式
在node1 , node2节点:
# yum install ipvsadm -y
# ipvsadm -L -n
可看到根据轮询算法来调度
master1节点:
# kubectl get pods
复制pod资源name
查看pod资源 的日志
# kubectl logs 粘贴pod资源name
查看这3个nginx 现在还没有日志,是因为还没有访问
# kubectl get svc
可看到端口46091
网页浏览192.168.150:46091、168.151:46091
再次查看这3个nginx日志
两个可以查看,一个没有
是docker0网关来访问的
3:更新nginx 为1.14版本
谷歌浏览器重新加载刷新页面查看nginx版本信息,可看到版本号是nginx/1.17.10
更新修改nginx版本
# kubectl set image deployment/nginx nginx=nginx:1.14
动态监听状态
# kubectl get pods -w
# kubectl get pods
原本的容器没有了,出来3个新的容器
得出结论:
容器资源更新,不可以被重启,只能被删除,重新创建;先创建一个新的 再删除一个旧的。副本数量是3,不能低于3个,所以创建一个新的容器之后,才能删旧的
重新刷新网页,看到版本已更新到nginx/1.14.2
4:回滚操作
查看历史版本
# kubectl rollout history deployment/nginx
执行回滚
# kubectl rollout undo deployment/nginx
检查回滚状态
# kubectl rollout status deployment/nginx
重新刷新网页,看到版本已更新到nginx/1.17.10
5:删除nginx
创建一个pod,会创建3个资源:pod 、deployment 、relplicaset
但同时也要删除 对外提供服务的service资源
删除pod资源
# kubectl delete deployment/nginx
# kubectl get pods -w
# kubectl get pods
service对外提供的服务 也要删
# kubectl get svc
删除服务SVC
# kubectl delete svc/nginx-service
# kubectl get svc
yaml文件创建pod资源
通过生成的yaml格式或json格式传递给apiserver进行创建、查看、管理的操作。
json格式适用于开发;yaml格式适用于维护。
创建pod资源的同时,需要创建service资源 做端口映射 ,把服务提供出去
可以把两个文件,写到一起,用3个短横杠进行分隔。表示两个文件,且创建时有先后顺序
1:用yaml文件格式创建pod资源
首先查看版本,然后编辑yaml文件
# kubectl api-versions 查看版本
# mkdir demo
# cd demo
# vim nginx-deployment.yaml
apiVersion: apps/v1 //api版本
kind: Deployment //类型 控制器
metadata: //摘要信息描述
name: nginx-deployment
labels: //标签
app: nginx
spec: //选择器
replicas: 3 //定义副本数量
selector:
matchLabels: //匹配标签
app: nginx
template: //模板
metadata:
labels:
app: nginx
spec:
containers: //定义容器
- name: nginx //容器名称
image: nginx:1.15.4 //选择镜像
ports:
- containerPort: 80 //容器端口
通过执行yaml文件 进行pod资源的创建
# kubectl create -f nginx-deployment.yaml
# kubectl get pods
创建的pod资源 已经是Running运行状态
2:用yaml格式 创建service资源,才能对外提供服务
# vim nginx-service.yaml
apiVersion: v1 //API版本
kind: Service //service类型
metadata:
name: nginx-service //serivice资源名称
labels:
app: nginx
spec:
type: NodePort //指明哪种类型发布出去,对外提供服务
ports:
- port: 80 //指定内部端口80
targetPort: 80 //对外提供映射端口80
selector: //选择器
app: nginx //指的是pod资源名称,要把哪个资源发布出去
创建service服务
# kubectl create -f nginx-service.yaml
# kubectl get svc
网页访问两个node节点192.168.195.150:32612、192.168.195.151:32612可看到nginx首页
我们常常会因为层级格式的错误导致创建不成功,如少个空格,或者多个空格,不过 yaml文件格式和json文件格式是可以通过kubectl命令导出模板,我们就可通过模板进行修改
下面举例:
(1)根据创建命令导出模板
自测命令的正确性,并不执行创建
# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run
查看生成json格式,并不执行创建
# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o json
查看生成yaml格式,并不执行创建
# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml
查看生成yaml格式,并不执行创建, 并保存到my-deployment.yaml文件
# kubectl run nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run -o yaml > my-deployment.yaml
(2)可根据现有的pod资源生成模板导出yaml或者json文件
将现有的资源生成模板导出
#kubectl get deploy/nginx-deployment --export -o yaml
将现有的资源生成模板导出,并保存到文件中
#kubectl get deploy/nginx-deployment --export -o yaml > my-deploy.yaml