kubernetes(k8s)使用声明式管理与 创建yaml模板文件

文章目录

  • 一:声明式管理方法
    • 1.1 什么是声明式管理
    • 1.2 查看资源配置
      • 1.2.1 查看资源配置清单
      • 1.2 使用explain 解释资源配置清单
    • 1.3 修改资源配置清单并应用
      • 1.3.1 离线修改
      • 1.3.2 在线修改
    • 1.4 删除资源配置清单
      • 1.4.1 陈述式删除
      • 1.4.2 声明式删除
  • 二:使用YALML 管理资源对象
    • 2.1 k8s 的yaml
    • 2.2 查看api 资源版本标签
    • 2.3 编写yaml 文件
    • 2.4 使用yaml 文件创建资源对象
    • 2.5 使用service 服务对外提供访问并测试
      • 2.5.1 创建service资源的yaml文件
      • 2.5.2创建资源对象
      • 2.5.3 访问测试
    • 2.6 详解k8s中port
  • 三: 创建模板
    • 3.1 使用--dry-run 试运行的方式生成模板,创建资源
      • 3.1.1 生成模板
      • 3.1.2 修改模板
      • 3.1.3 根据生成的模板创建资源
    • 3.2 使用现有的资源生成模板导出
      • 3.2.1 生成模板
      • 3.2.2 修改模板
      • 3.2.3 根据模板生成资源

一:声明式管理方法

1.1 什么是声明式管理

声明式管理方法:

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

1.2 查看资源配置

1.2.1 查看资源配置清单

#将资源配置输出为yaml 格式
kubectl -n kube-public  get deployments.apps nginx -o yaml

kubernetes(k8s)使用声明式管理与 创建yaml模板文件_第1张图片

1.2 使用explain 解释资源配置清单

#查看deployment资源配置里字段解释(只能看到第一层的字段)
kubectl explain -n kube-public deployment

#查看deployment里的metadata字段解释
kubectl explain -n kube-public deployment.metadata

#查看service 资源配置里的第一层字段解释
kubectl explain -n kube-public  service

#查看service配置里,metadata字段的解释
kubectl explain -n kube-public service.metadata

kubernetes(k8s)使用声明式管理与 创建yaml模板文件_第2张图片

kubernetes(k8s)使用声明式管理与 创建yaml模板文件_第3张图片

1.3 修改资源配置清单并应用

1.3.1 离线修改

离线修改:

修改yaml 文件,并用 kubectl apply -f xxx.yaml 文件使之生效。

注意:当apply 不生效时,先使用delete 清除资源,在apply 创建资源

create 和 apply 的区别

  • 都可以使用 kubectl create/apply -f xxx.yaml 创建资源
  • create:只能用于创建,不能apply更新。 如果要更新需要先delete 删除资源,在create/apply创建 新的
  • apply:可以创建,也可以直接更新
#将service 资源配置以yaml格式显示,导入到nginx-svc.yaml里
kubectl -n kube-public get service nginx-service -o yaml > nginx-svc.yaml

#修改yaml 文件,将port 项值修改为8080
vim nginx-svc.yaml

#先使用声明式方式删除
kubectl delete -f nginx-svc.yaml

#指定yaml文件,使用声明式方式创建service
kubectl apply -f nginx-svc.yaml

#再次查看,端口变为了8080
kubectl get svc -n kube-public

kubernetes(k8s)使用声明式管理与 创建yaml模板文件_第4张图片

image-20211103155213673

1.3.2 在线修改

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

#使用kubect edit 在线修改 资源
kubectl edit -n kube-public service

#将port 值修改为888,并保存退出


kubectl get svc -n kube-public 

kubernetes(k8s)使用声明式管理与 创建yaml模板文件_第5张图片

kubernetes(k8s)使用声明式管理与 创建yaml模板文件_第6张图片

1.4 删除资源配置清单

1.4.1 陈述式删除

#陈述式删除
kubectl -n kube-public delete service nginx-service

1.4.2 声明式删除

#指定yaml 文件,声明式删除
kubectl delete -f nginx-svc.yaml 

二:使用YALML 管理资源对象

2.1 k8s 的yaml

Kubernetes支持YAML和JSON格式管理资源对象

  • JSON格式:主要用于api接口之间消息的传递
  • YAMI格式:用于配置和管理, YAML是一种简洁的非标记性语言,内容格式人性化,较易读

YAML语法格式:

  • 大小写敏感使用缩进表示层级关系
  • 不支持Tab键制表符缩进,只使用空格缩进
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格
  • 符号字符后缩进一个空格,如冒号,逗号,短横杆(-)等
  • "—"表示YAMI格式,一个文件的开始,用于分隔文件
  • "#"表示注释

2.2 查看api 资源版本标签

# 查看api 的版本,不同的k8s版本,支持的api version不同
kubectl api-versions 

kubernetes(k8s)使用声明式管理与 创建yaml模板文件_第7张图片

2.3 编写yaml 文件

[root@master ~]# mkdir /opt/demo
[root@master ~]# cd /opt/demo/
[root@master demo]# vim nginx-deploymenet.yaml
apiVersion: apps/v1        #指定api版本标签
kind: Deployment         #定义资源的类型。可以是Deployment,Job,Ingress,Service等
metadata:               #定义资源的元数据信息,比如资源的名称,namespace,标签等信息
  name: nginx-deployment  #定义资源的名称,在同一个namespace空间中必须是唯一的
  namespace: default     #定义命名空间
  labels:                #定义Deployment资源标签
    app: nginx

spec:               #定义deployment资源需要的参数属性,如,是否在容器失败时重启容器的属性
  replicas: 3       #定义副本的数量
  selector:         #定义标签选择器
    matchLabels:    #定义匹配的标签
      app: nginx    #需要与.spec.template.metadata.labels定义的标签保持一致
  template:         #定义 业务模板,如果有多个副本,所有的副本属性会按照模板的相关配置进行匹配
    metadata:       #定义pod使用的元信息      
      labels:       #定义Pod副本将使用的标签,需要与.spec.selector.matchLabels 定义的标签保持一致
        app: nginx 
    spec:           #定义pod副本的属性(如pod里有几个容器,容器名,容器镜像,端口等) 
      containers:                #定义容器属性
        - name: nginx            #容器的名称
          image: nginx:1.15.12   #容器使用的镜像
          ports:                 #定义容器使用的端口
            - containerPort: 80  #容器使用80端口
          ports: 
            - containerPort: 80

2.4 使用yaml 文件创建资源对象

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

#查看pod的信息
kubectl get pods -o wide

#查看pod使用的标签
kubectl get pods --show-labels 

kubernetes(k8s)使用声明式管理与 创建yaml模板文件_第8张图片

image-20211103171501274

2.5 使用service 服务对外提供访问并测试

2.5.1 创建service资源的yaml文件

vim nginx-service.yaml
apiVersion: v1
kind: Service              #定义资源类型为Service
metadata:                  #定义Service的元信息
  name: nginx-service      #定义service的名称
  namespace: default       #定义service的命名空间(和deployment在一个空间)
  labels:                  #定义service的标签
    app: nginx

spec:                      #设置service的属性
  type: NodePort           #指定service的类型,使用NodePort。
  ports:                   #指定端口,一个容器里的服务,对应一个端口。有几个服务,就创建几组
    - port: 8888           #指定ClusterIP 使用的端口
      targetPort: 80       #指定pod使用的端口
      nodePort: 31234      #如不指定,会在30000-32767 随机分配 
  selector:                #使用标签选择器去选择和对应的pod进行关联
    app: nginx

2.5.2创建资源对象

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

#查看svc资源
kubectl  get svc

image-20211103181449574

kubernetes(k8s)使用声明式管理与 创建yaml模板文件_第9张图片

2.5.3 访问测试

curl -I http://192.168.23.12:31234
curl -I http://192.168.23.13:31234

kubernetes(k8s)使用声明式管理与 创建yaml模板文件_第10张图片

2.6 详解k8s中port

  • port
    • 是k8s集群内部访问service的端口,即通过clusterIP: port可以从Pod所在的Node上访问到service.
  • nodePort
    • nodePort是外部访问k8s集群中service的端口,通过nodelP: nodePort可以从外部访问到某个service4
  • targetPort
    • targetport是Pod的端口,从port或nodeport来的流量经过kube-proxy反向代理负载均衡转发到后端Pod的targetPort上,最后进入容器。
  • containerPort
    • containerPort是Pod内部容器的端口, targetPort映射到containerPort

kubernetes(k8s)使用声明式管理与 创建yaml模板文件_第11张图片

三: 创建模板

3.1 使用–dry-run 试运行的方式生成模板,创建资源

3.1.1 生成模板

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

#查看,并没有生成相应的pod
kubectl get pods

kubernetes(k8s)使用声明式管理与 创建yaml模板文件_第12张图片

#查看生成的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 --replicas=3 --dry-run -o yaml > nginx-test.yaml

image-20211103184204501

3.1.2 修改模板

vim nginx-test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: nginx-test
  name: nginx-test
spec:
  replicas: 3
  selector:
    matchLabels:
      run: nginx-test
  template:
    metadata:
      labels:
        run: nginx-test
    spec:
      containers:
      - image: nginx
        name: nginx-test
        ports:
        - containerPort: 80

3.1.3 根据生成的模板创建资源

#根据模板创建资源
kubectl apply -f nginx-test.yaml

kubectl get pods

kubernetes(k8s)使用声明式管理与 创建yaml模板文件_第13张图片

3.2 使用现有的资源生成模板导出

3.2.1 生成模板

#将现有的资源生成模板导出。 --export 可以删除一些多余的配置
kubectl get deployments.apps nginx-deployment  --export -o yaml

#将模板保存到文件中
kubectl get deployments.apps nginx-deployment  --export -o yaml  > my-deploy.yaml

image-20211103185345091

3.2.2 修改模板

vim my-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: my-deploy
spec:
  progressDeadlineSeconds: 600
  replicas: 3
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: mydeploy-nginx
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: mydeploy-nginx 
    spec:
      containers:
      - image: nginx:1.15.12
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler

3.2.3 根据模板生成资源

#根据模板生成资源
kubectl apply -f my-deploy.yaml

#查看生成的deployment 信息
kubectl get deployments.apps my-deploy

kubernetes(k8s)使用声明式管理与 创建yaml模板文件_第14张图片

你可能感兴趣的:(Docker技术集群与应用,运维)