Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3759453
  • 博文数量: 880
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 6155
  • 用 户 组: 普通用户
  • 注册时间: 2016-11-11 09:12
个人简介

To be a better coder

文章分类

全部博文(880)

文章存档

2022年(5)

2021年(60)

2020年(175)

2019年(207)

2018年(210)

2017年(142)

2016年(81)

分类: LINUX

2020-07-17 14:06:54


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副本集的创建 

K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第1张图片
2:删除命令

# kubectl delete deploy/nginx
# kubectl delete deploy/nginx-deployment
# kubectl get pods 

K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第2张图片
K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第3张图片
示例:
项目的生命周期:创建–>发布–>更新–>回滚–>删除

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
K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第4张图片
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 

K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第5张图片

kubernetes里kube-proxy支持三种模式,在v1.8之前我们使用的是iptables 以及userspace两种模式,在kubernetes 1.8之后引入了ipvs模式

在node1 , node2节点:

# yum install ipvsadm -y

# ipvsadm -L -n
可看到根据轮询算法来调度 

K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第6张图片
K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第7张图片
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网关来访问的
K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第8张图片
K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第9张图片
K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第10张图片
3:更新nginx 为1.14版本
谷歌浏览器重新加载刷新页面查看nginx版本信息,可看到版本号是nginx/1.17.10
K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第11张图片

更新修改nginx版本
# kubectl set image deployment/nginx nginx=nginx:1.14

动态监听状态
# kubectl get pods -w  
# kubectl get pods
原本的容器没有了,出来3个新的容器 

K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第12张图片
得出结论:
容器资源更新,不可以被重启,只能被删除,重新创建;先创建一个新的 再删除一个旧的。副本数量是3,不能低于3个,所以创建一个新的容器之后,才能删旧的

重新刷新网页,看到版本已更新到nginx/1.14.2

K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第13张图片
4:回滚操作

查看历史版本
# kubectl rollout history deployment/nginx
执行回滚
# kubectl rollout undo deployment/nginx
检查回滚状态
# kubectl rollout status deployment/nginx 

K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第14张图片
重新刷新网页,看到版本已更新到nginx/1.17.10
K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第15张图片

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 

K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第16张图片

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 

K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第17张图片
创建的pod资源 已经是Running运行状态
K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第18张图片
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首页
K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第19张图片
K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第20张图片
我们常常会因为层级格式的错误导致创建不成功,如少个空格,或者多个空格,不过 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 

K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第21张图片

在这里插入图片描述
(2)可根据现有的pod资源生成模板导出yaml或者json文件

将现有的资源生成模板导出
#kubectl get deploy/nginx-deployment --export -o yaml

将现有的资源生成模板导出,并保存到文件中
#kubectl get deploy/nginx-deployment --export -o yaml > my-deploy.yaml 

K8S:创建pod资源两种方式: kubectl命令 && yaml文件_第22张图片

在这里插入图片描述

阅读(4876) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~