一、声明式资源管理

①声明式管理方法

  1. 适合于对资源的修改操作
  2. 声明式资源管理方法依赖于资源配置清单文件对资源进行管理
    资源配置清单文件有两种格式: yaml(人性化,易读),json(易于api接口解析)
  3. 对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里
  4. 语法格式: kubectl create/apply/delete -f xxxx.yaml

②基本操作综合

#查看资源配置清单
kubectl get deployment nginx -o yaml

#解释资源配置清单
kubectl explain deployment.metadata
kubectl get service nginx -o yaml
kubectl explain service.metadata

#修改资源配置清单并应用
离线修改:
修改yaml文件,并用kubectl apply -f xxxx.yaml 文件使之生效注意:当apply不生效时,先使用delete清除资源,再apply创建资源
kubectl get service nginx -o yaml > nginx-svc.yarml
vim nginx-svc.yaml

#修改port: 8080
kubectl delete -f nginx-svc.yaml
kubectl apply -f nginx-svc.yamlkubectl get svc

#删除资源配置清单陈述式删除
kubectl delete service nginx

#声明式删除
kubectl delete -f nginx-svc.yaml

在线修改: 直接使用kubectl edit service nginx在线编辑资源配置清单并保存退出即时生效(如port: 888)Ps:此修改方式不会对yaml文件内容修改

② 走进 .yaml 文件

(1)写一个 deployment 的 .yaml 文件

写一个yaml文件demo
mkdir / opt/ demo
cd demo/
vim nginx-deployment.yaml

apiVersion: apps/v1			#指定api版本标签
kind: Deployment				#定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata:						#定义资源的元数据信息,比如资源的名称、namespace、标签等信息
  name: nginx-deployment		#定义资源的名称,在同一个namespace空间中必须是唯一的
  labels:						#定义资源标签( Pod的标签)
    app: nginx
spec:							#定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
  replicas: 3					#定义副本数量
  selector:						#定义标签选择器
    matchlabels:				#定义匹配标签
      app: nginx				#匹配上面的标签,需与上面的标签定义的app保持一致
  templaLe:					#定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
    metadata:
      labels:
        app: nginx
    spec:
      containers :					#定义容器属性
      - name : nginx				#定义一个容器名, 一个 - narme: 定义一个容器
        image: nginx:1.15.4			#定义容器使用的镜像以及版本
        ports:
        - containerPort: 80			#定义容器的对外的端口

创建资瀑对象
kubectl create -f nginx-deployment. yaml

在这里插入图片描述
在这里插入图片描述

(2)写一个 service 的 .yaml 文件

创建service服务对外提供访问并测试
vim nginx-service. yaml

apiVersion: v1
kind: service
metadata:
   name: nginx-service
   labels:
     app: nginx
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: nginx

#创建资源对象
kubectl create -f nginx-service.yaml

在这里插入图片描述
在这里插入图片描述

(3)详解K8S中的port

service中的Port

service中主要涉及到了三种port:port、targetPort、nodePort

1 port

这里的port表示service暴露在clusterIP上的端口,clusterIP:Port 是提供给集群内部访问kubernetes服务的入口。

2 targetPort

targetPort是pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器。

3 nodePort

就是Node的基本port。选择该值,这个servce就可以通过NodeIP:NodePort访问这个Service服务,NodePort会路由到Cluster IP服务,这个Cluster IP会通过请求自动创建。

4 containerPort

containerPort是 Pod 内部容器的端口,targetPort映射到 containerPort。

总的来说,port和nodePort都是service的端口,前者暴露给集群内客户访问服务,后者暴露给集群外客户访问服务。从这两个端口到来的数据都需要经过反向代理kube-proxy流入后端pod的targetPod,从而到达pod上的容器内。

#kubectl run --dry-run打印相应的API对象而不执行创建
kubectl run nginx-test --image=nginx --port=80 --replicas=3 --dry-run

#查看生成yaml格式
kubectl run nginx-test --image=nginx --port=80 --replicas=3 --dry-run -o yaml

#查看生成json格式
kubectl run nginx-test --image=nginx --port=80 --replicas=3 --dry-run -o json

#使用yaml格式导出生成模板,并进行修改以及删除一些不必要的参数
kubectl run nginx-test ---image=nginx --port=80 --replicasm3 --dry-run -o yaml > nginx-test . yaml

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

#保存到文件中
kubectl get deploy/nginx-deployment --export -o yaml > my-deploy.yaml

#查看字段帮助信息,可一层层的查看相关资源对象的帮助信息
kubectl explain deployments.spec.template.spec.containers或
kubectl explain pods. spec.containers

在这里插入图片描述
在这里插入图片描述

//写yaml太累怎么办?
●用run命令生成
kubectl run my-deploy --image=nginx --dry-run -o yaml > my-deploy.yaml
●用get命令导出
kubectl get deploy/nginx-deployment --export -o=yaml > new.yaml1

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐