目录

一.声明式管理方法

二.资源配置清单管理

1.导出资源配置清单

2.修改资源配置清单并应用

2.1.离线修改

2.2.在线修改

三.编写yaml文件

1.编写pod.yaml

2.编写deploment.yaml

3.编写service.yaml关联创建的pod

4.总结获取K8S资源配置清单文件模板方法

4.1.方法一

4.2.方法二

4.3.方法三

4.4.方法四


一.声明式管理方法

1.适合于对资源的修改操作(陈述式方式修改资源非常不方便)

2.声明式资源管理方法依赖于yaml资源配置清单文件对资源进行管理

资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析)

3.对资源的管理,是通过事先定义在统一资源配置清单yaml文件内,再通过陈述式命令应用到k8s

集群里

4.语法格式:kubectl create/apply/delete -f xxxx.yaml

  • create:表示创建资源不允许修改除非先删除
  • apply:建议使用的方式
  • delete:表示删除

二.资源配置清单管理

1.导出资源配置清单

查看资源配置清单
kubectl get 资源类型 资源名称 -o yaml
 
解释资源配置清单
kubectl explain 资源名称.字段名称

2.修改资源配置清单并应用

2.1.离线修改

cd -
mkdir day3
kubectl get -n xy101 svc svc-myapp -o yaml > svc.yaml
ls
vim svc.yaml  #删除多余内容只保存下图展示
 
kubectl get -n xy101 svc

vim svc.yaml
#直接对导出的yaml文件进行修改
 
kubectl apply -f svc.yaml  #进行更新操作,但是此时会报错,无法修改,因为该service资源不是通过该svc.yaml文件创建的因此无法更新会报错。
 
我们需要进行操作,将原先的service进行删除然后在进行更新
可以使用kubectl delete -n xy101 svc svc-myapp进行删除;也可以通过kubectl delete -f svc.yaml该命令直接删除,因为svc.yaml配置文件中已经定义了该资源的各种参数,直接指定这个文件删除即可
 
 
kubectl delete -f svc.yaml && kubectl apply -f svc.yaml   #删除并更新
kubectl get -n xy101 svc  

vim svc.yaml
 
kubectl apply -f svc.yaml  #此时这个service文件是通过这个yaml文件创建的,因此可以直接使用该命令进行更新操作
 

2.2.在线修改

直接使用 kubectl edit service 资源名称 在线编辑资源配置清单并保存退出即时生效
PS:此修改方式不会对yaml文件内容修改  
#但是此种方法并不是所有字段都能进行修改,若遇到 不能修改的字段,则直接选择离线模式进行修改
 
kubectl edit -n xy101 svc svc-myapp
进行修改,保存

通过声明式修改方式实现金丝雀发布(通过控制副本数实现)

重新创建资源、service
kubectl create -n xy101 deployment myapp-v1 --image=soscscs/myapp:v1 --port=80 --replicas=3
kubectl expose -n xy101 deployment myapp-v1 --name=svc-myapp --port=80 --target-port=80 --type=NodePort
 
kubectl get -n xy101 deployments.apps myapp-v1 -o yaml > deploy.yaml
 
vim deploy.yaml 
修改9行 app: myapp-v2
98行  replicas: 1
92行  name: myapp-v2
115行  - image: soscscs/myapp:v2
 
 
kubectl apply -f deploy.yaml
kubectl get -n xy101 all

kubectl scale -n xy101 deployment myapp-v1 --replicas=2 && kubectl scale -n xy101 deployment myapp-v2 --replicas=2  #通过减少v1的副本数,增加v2的副本数,实现,执行后无问题在继续下一步
kubectl get -n xy101 all
kubectl scale -n xy101 deployment myapp-v1 --replicas=0 && kubectl scale -n xy101 deployment myapp-v2 --replicas=3
kubectl get -n xy101 all

三.编写yaml文件

1.编写pod.yaml

vim demo1-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: scj-pod
  namespace: xy101
  labels:
    app: nginx
    mylove: tangjun
    myclass: xy101
spec:
  containers:
  - name: nginx
    image: nginx:1.20
    ports:
    - containerPort: 80
      name: http
      protocol: TCP
    env:
    - name: mylove
      value: tangjun

各行详细介绍

使用kubectl explain pods可查看到编写pod的一级标题
apiVersion: apps/v1		#指定api版本标签
kind: Deployment		#定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata:					#定义资源的元数据信息,比如资源的名称、namespace、标签等信息
 
spec:					#定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性

metadata:					#定义资源的元数据信息,比如资源的名称、namespace、标签等信息
kubectl explain pods.metadata  进一步查看metadata所包含内容
书写格式:
<string>       字符串           字段: 字符串      字段: "字符串"      字段: '字符串'
<map[string]string>    映射(值是一个或多个键值对)   字段:
                                                        key1: value1
                                                        key2: value2
 

spec:					   #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
kubectl explain pods.spec  #进一步查看spec
containers	<[]Object> -required-  #-required-表示必备字段;<[]Object>表示字符串列表      
格式
<[]Object>字段:             字段: ["值1", "值2"]
                                - 值1
                                - 值2

containers:				              #定义容器属性
 
kubectl explain pods.spec.containers  #进一步查看containers字段

kubectl explain pods.spec.containers.ports

kubectl explain pods.spec.containers.env

kubectl apply -f demo1-pod.yaml         #创建pod
kubectl get pods -n xy101               #查看pod
kubectl describe -n xy101 pod scj-pod   #可查看调度创建容器的具体过程

kubectl get -n xy101 pod --show-labels   #查看标签
kubectl exec -n xy101 -it scj-pod sh     #进入容器查看env

2.编写deploment.yaml

vim demo2-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: scj-deploy
  namespace: xy101
  labels:
    app: nginx
    mylove: tangjun
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.20
        ports:
        - containerPort: 80
          name: http
          protocol: TCP
        env:
        - name: mylove
          value: tangjun
        - name: yourlove
          value: scj

kubectl explain deployment   #查看编写deployment的第一字段

kubectl explain deployment.metadata  #可根据此命令进一步查看metadata字段
metadata:                #其中包含三大项必不可少,name、namespace、labels
  name: scj-deploy
  namespace: xy101
  labels:
    app: nginx
    mylove: tangjun

kubectl explain deployment.spec #进一步查看spec的字段​​​​​​​

kubectl explain deployment.spec.selector  #查询selector的字段
 
matchLabels:		#定义匹配标签

kubectl explain deployment.spec.template   #查看spec中template字段下的字段
metadata   #定义pod元数据  通常主要定义labels,labels的值需要与标签选择器的值一致
spec   #定义pod属性

kubectl explain deployment.spec.template.spec   #查看template下spec字段
containers	<[]Object> -required-   #必选字段
 
kubectl explain deployment.spec.template.spec.containers  #进一步查看spec下containers 字段
 
kubectl explain deployment.spec.template.spec.containers.ports   #进一步查看containers下ports字段

kubectl explain deployment.spec.template.spec.containers   #查看spec下containers中的字段

kubectl explain deployment.spec.template.spec.containers.ports  #查看containers下ports的字段

kubectl explain deployment.spec.template.spec.containers.env #查看containers下的env字段

创建deployment控制器
kubectl apply -f demo2-deploy.yaml
kubectl get -n xy101 all

3.编写service.yaml关联创建的pod

apiVersion: v1
apiVersion: v1
kind: Service
metadata:
  name: scj-svc
  namespace: xy101
  labels:
    app: nginx
    mylove: tangjun
spec:
  selector:
    app: nginx
  type: NodePort
  ports:
  - port: 8080
    targetPort: 80

kubectl explain svc      #查看编写svc.yaml文件的第一字段

metadata三要素1.name2.namespace3.labels

kubectl explain svc.spec            #设置spec下的字段

kubectl explain svc.spec.ports         #进一步查看spec下ports的字段

创建service
kubectl apply -f demo3-svc.yaml
kubectl get -n xy101 svc
kubectl describe -n xy101 endpoints scj-svc
kubectl get -n xy101 pod -o wide

kubectl explain svc.spec.ports   #查询指定nodeport的字段,于ports下
kubectl explain svc.spec         #查询指定clusterip的字段,于svc下的spec中

kubectl apply -f demo3-svc.yaml
kubectl get -n xy101 svc

4.总结获取K8S资源配置清单文件模板方法

4.1.方法一

根据现有资源导出yaml文件修改配置,重新创建

kubectl get -n xy101 svc scj-svc -o yaml > demo4.yaml
vim demo4.yaml
只保留常用配置,删除多余的,配置,进行修改创建即可

4.2.方法二

根据现有资源,进入其配置中,复制模板,再进行创建

kubectl edit -n xy101 svc scj-svc2   
即可复制其中的配置,获取模板

4.3.方法三

通过--dry-run选项模拟运行创建资源的命令获取

kubectl create|run|expose -n <命名空间> <资源类型> <资源名称> [参数选项] --dry-run=client -o yaml > XXX.yaml
 
 
kubectl create -n xy101 deployment deploy-tan --image=soscscs/myapp:v1 --port=80 --replicas=3 --dry-run=client   #创建资源的结尾添加--dry-run选项模拟运行创建资源,此时不会创建资源
 
kubectl create -n xy101 deployment deploy-tan --image=soscscs/myapp:v1 --port=80 --replicas=3 --dry-run=client -o yaml > tan-deploy.yaml  #导出yaml文件,即可获取配置模板文件

4.4.方法四

手写yaml配置文件,可以根据 kubectl explain 命令获取资源的字段信息

Logo

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

更多推荐