To be a better coder
分类: LINUX
2020-07-17 14:06:54
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副本集的创建
# 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 可看到根据轮询算法来调度
# 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
查看历史版本 # kubectl rollout history deployment/nginx 执行回滚 # kubectl rollout undo deployment/nginx 检查回滚状态 # kubectl rollout status deployment/nginx
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格式或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