声明式办理方法

  • 适合于对资源的修正操作
  • 声明式资源办理方法依赖于资源装备清单文件对资源进行办理。资源装备清单文件有两种格局:
    • yaml(人性化,易读)
    • json(易于api接口解析)
  • 对资源的办理,是通过事前定义在一致资源装备清单内,再通过陈说式指令运用到k8s集群里
  • 语法格局:kubectl create/apply/delete -f xxxx.yaml

资源装备清单的办理

资源清单的编写办理,都是基于yaml编写的格局,yaml文件的编写,在Docker-compose – ()文章中已叙述过。

检查资源装备清单

检查资源装备清单:kubectl get deployment nginx -o yaml

K8S声明式资源管理

解说资源装备清单

解说资源装备清单:kubectl explain 资源类型.一级字段.二级字段.三级字段...

K8S声明式资源管理

K8S声明式资源管理

修正资源装备清单并运用

离线修正

修正yaml文件,并用kubectl apply -f xxxx.yaml 文件使之收效
注意:当apply不收效时,先运用delete清除资源,再apply创立资源

离线修正的操作过程

  1. 首先将装备资源导入通过重定向符号导入到yaml文件中
  2. 通过vim编辑器进行yaml装备文件,删去剩余的选项,修正装备项,进行保存
  3. 通过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

K8S声明式资源管理

K8S声明式资源管理

K8S声明式资源管理

K8S声明式资源管理

K8S声明式资源管理

在线修正

直接运用kubectl edit service nginx-service在线编辑资源装备清单并保存退出即时收效( 如port: 9090)
此修正方式不会对yaml文件内容修正。
但有些装备通过edit修正不会收效,仍是得用离线修正。

K8S声明式资源管理

K8S声明式资源管理

因为这归于在线编辑,直接在原装备中进行调整。
而导出的yaml文件则像是一个模板,通过指令来替换原有的装备。

删去资源装备清单

陈说式删去:
Kubernetes 支持YAMLJSON格局办理资源目标
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

K8S声明式资源管理

#创立资源目标
kubectl create -f nginx-service.yaml

K8S声明式资源管理

#检查创立的service
kubectl get svc

K8S声明式资源管理

补充:
详解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
即可

K8S声明式资源管理

修正并编写模板

vim nginx-svc2.yaml
kubectl apply -f nginx-svc2.yaml
kubectl get pods

K8S声明式资源管理

K8S声明式资源管理

K8S声明式资源管理