声明式办理方法
- 适合于对资源的修正操作
- 声明式资源办理方法依赖于资源装备清单文件对资源进行办理。资源装备清单文件有两种格局:
- yaml(人性化,易读)
- json(易于api接口解析)
- 对资源的办理,是通过事前定义在一致资源装备清单内,再通过陈说式指令运用到k8s集群里
- 语法格局:
kubectl create/apply/delete -f xxxx.yaml
资源装备清单的办理
资源清单的编写办理,都是基于yaml编写的格局,yaml文件的编写,在Docker-compose – ()文章中已叙述过。
检查资源装备清单
检查资源装备清单:kubectl get deployment nginx -o yaml
解说资源装备清单
解说资源装备清单:kubectl explain 资源类型.一级字段.二级字段.三级字段...
修正资源装备清单并运用
离线修正
修正yaml文件,并用kubectl apply -f xxxx.yaml 文件使之收效
注意:当apply不收效时,先运用delete清除资源,再apply创立资源
离线修正的操作过程
- 首先将装备资源导入通过重定向符号导入到yaml文件中
- 通过vim编辑器进行yaml装备文件,删去剩余的选项,修正装备项,进行保存
- 通过apply -f 该yaml 文件 或者是先删再创的方法来完成声明式离线修正资源清单的装备
create与apply的区别:
- create和apply都能运用于资源模板的创立,可是create创立资源模板归于固定式的资源装备,一旦创立,后期想要修正时,就只能通过先delete删去资源模板,再进行create创立,达到资源更新的作用。
- 而apply归于一种实时更新运用的创立模板方式,后期对资源模板的装备文件进行修正时,只需求先修正装备文件,再运用apply -f 指定装备文件即可。
- 可是apply并不是什么情况下都能收效运用。假如你发现装备并不收效,而且与书写格局无关,则能够先delete -f 该装备文件,再create -f 该装备文件
kubectl get service nginx-service -o yaml > nginx-svc.yaml
vim nginx-svc.yaml #修正port:8080
kubectl delete -f nginx-svc.yaml #删去yaml文件
kubectl apply -f nginx-svc.yaml #运用yaml文件
kubectl get svc
在线修正
直接运用kubectl edit service nginx-service
在线编辑资源装备清单并保存退出即时收效( 如port: 9090)
此修正方式不会对yaml文件内容修正。
但有些装备通过edit修正不会收效,仍是得用离线修正。
因为这归于在线编辑,直接在原装备中进行调整。
而导出的yaml文件则像是一个模板,通过指令来替换原有的装备。
删去资源装备清单
陈说式删去:
Kubernetes 支持YAML和JSON格局办理资源目标
JSON 格局:主要用于api接口之间音讯的传递
YAML格局:用于装备和办理,YAML 是一种简练的非标记性语言,内容格局人性化,较易读
kubectl delete pods nginx
声明式删去
kubectl delete -f nginx-svc.yaml
自主编写资源清单
资源清单中svc的重要装备项
Service yaml文件详解
apiVersion: v1
kind: Service
matadata: #元数据
name: string #service的名称
namespace: string #命名空间
labels: #自定义标签属性列表
- name: string
annotations: #自定义注解属性列表
- name: string
spec: #详细描述
selector: [] #label selector装备,将挑选具有label标签的Pod作为办理
#范围
type: string #service的类型,指定service的拜访方式,默以为
#clusterIp
clusterIP: string #虚拟服务地址
sessionAffinity: string #是否支持session
ports: #service需求露出的端口列表
- name: string #端口名称
protocol: string #端口协议,支持TCP和UDP,默认TCP
port: int #服务监听的端口号
targetPort: int #需求转发到后端Pod的端口号
nodePort: int #当type = NodePort时,指定映射到物理机的端口号
status: #当spce.type=LoadBalancer时,设置外部负载均衡器的地址
loadBalancer: #外部负载均衡器
ingress: #外部负载均衡器
ip: string #外部负载均衡器的Ip地址值
hostname: string #外部负载均衡器的主机名
手动编写 svc资源装备
#编写service服务的资源清单
vim nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
namespace: default
labels:
app: nginx
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30080
selector:
app: nginx
#创立资源目标
kubectl create -f nginx-service.yaml
#检查创立的service
kubectl get svc
补充:
详解k8s中的port
●port
port是k8s集群内部拜访service的端口,即通过clusterIP: port能够从Pod地点的Node. 上拜访到service
●nodePort
nodePort是外部拜访k8s集群中service的端口,通过nodeIP: nodePort 能够从外部拜访到某个service。
●targetPort
targetPort是Pod的端口,从port或nodePort来的流量通过kube-proxy 反向署理负载均衡转发到后端Pod的targetPort上,最终进入容器。
●containerPort
containerPort是Pod内部容器的端口,targetPort映射到containerPort
生成模板,再编写资源清单
生成模板
用–dry-run指令生成yaml资源清单
kubectl run --dry-run 打印相应的 API 目标试运行而不履行创立
#空跑测验
kubectl run nginx-svc2 --image=nginx:1.17 --port=80 --dry-run=client
#空跑测验的输出结果
kubectl run nginx-svc2 --image=nginx:1.17 --port=80 --dry-run=client -o yaml
#生成模板
kubectl run nginx-svc2 --image=nginx:1.17 --port=80 --dry-run=client -o yaml > nginx-svc2.yaml
#例:假如创立service,用
kubectl expose deployment nginx --port=8000 --target-port=80 --type=NodePort --dry-run=client -o yaml > nginx-svc.yaml
即可
修正并编写模板
vim nginx-svc2.yaml
kubectl apply -f nginx-svc2.yaml
kubectl get pods