7

声明式管理法+yaml文件系统解析

 3 years ago
source link: https://blog.51cto.com/u_15380854/5155316
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

声明式管理法+yaml文件系统解析

原创

kiroct 2022-03-28 21:18:09 ©著作权

文章标签 k8s 声明式管理 yaml文件系统 文章分类 其他 云计算 阅读数289

声明式管理法:

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

//修改资源配置清单并应用
离线修改: 
修改yaml文件,并用kubectl apply -f x888.yaml 文件使之生效
注意:当apply不生效时, 先使用delete清除资源,再apply创建资源
kubectl get service nginx -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 在线编辑资源配置清单并保存退出即时生效( 如port: 888)
PS:此修改方式不会对yaml文件内容修改

//删除资源配置清单
陈述式删除:
Kubernetes 支持YAML和JSON格式管理资源对象
JSON 格式:主要用于api接口之间消息的传递
YAML格式:用于配置和管理,YAML 是一种简洁的非标记性语言,内容格式人性化,较易读
kubectl delete pods nginx
声明式删除
kubectl delete -f nginx-svc.yaml

声明式管理法+yaml文件系统解析_声明式管理
声明式管理法+yaml文件系统解析_yaml文件系统_02

声明式管理法+yaml文件系统解析_k8s_03
声明式管理法+yaml文件系统解析_声明式管理_04

声明式管理法+yaml文件系统解析_声明式管理_05
声明式管理法+yaml文件系统解析_yaml文件系统_06
声明式管理法+yaml文件系统解析_声明式管理_07

yaml文件解析

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


查看 api 资源版本标签
kubectl api-versions
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1                                               #如果是业务场景一般首选使用apps/v1
apps/v1beta1                                     #带有beta字样的代表的是测试版本,不用在生产环境中
apps/v1beta2
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1

声明式管理法+yaml文件系统解析_k8s_08

写一个nignx.yaml文件demo
kubectl create deployment nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml

然后就会导出相应模板,根据模板修改即可
vim nginx-deployment.yaml 
创建资源对象
kubectl create -f nginx-deployment.yaml

查看创建的pod资源
kubectl get pods -o wide

声明式管理法+yaml文件系统解析_k8s_09
拓展:service的工作流程
声明式管理法+yaml文件系统解析_yaml文件系统_10

编写service服务的资源清单
vim nginx-server.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

声明式管理法+yaml文件系统解析_声明式管理_11
声明式管理法+yaml文件系统解析_k8s_12
声明式管理法+yaml文件系统解析_声明式管理_13

用--dry-run命令生成yaml资源清单

kubectl run --dry-run 打印相应的 API 对象试运行而不执行创建
kubectl run nginx-02 --image=nginx --port=80 --replicas=3 --dry-run
查看生成yaml格式
kubectl run nginx-02 --image=nginx --port=80 --replicas=3 --dry-run -o yaml

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

 

使用yaml格式导出生成模板,并进行修改以及删除一些不必要的参数
kubectl create deployment nginx-deployment --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml

vim nginx.yaml                             #删除不必要的参数
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: nginx-02
  name: nginx-02
spec:
  replicas: 2
  selector:
    matchLabels:
      run: nginx-02
  template:
    metadata:
      labels:
        run: nginx-02
    spec:
      containers:
      - image: nginx
        name: nginx-02
        ports:
        - containerPort: 80

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

查看创建的service
kubectl get pods
将现有的资源生成模板导出生成yaml文件
●用--dry-run 命令生成
kubectl run my-deploy --image=nginx --dry-run=client -o yaml > my-deploy.yaml

●用get命令导出
kubectl get SVC nginx-service -o yaml > my-SVC.yaml 

kubectl edit svc nginx-service # 复制配置,再粘贴到新文件

声明式管理法+yaml文件系统解析_yaml文件系统_14
声明式管理法+yaml文件系统解析_k8s_15

  • 打赏
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK