声明式管理方法

一.方法

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

补充:kubectl createkubectl apply之间的区别:

kubectl apply支持后续的更新,而kubectl create 创建的时候不支持更新,并且后期如果需要更新的情况下,要先删除原来的yaml文件,然后再去create创建,才能做到更新。

查看资源配置清单,将现有的资源生成模板导出
kubectl get deployment nginx -o yaml

/解释资源配置清单
kubectl explain deployment.metadata
 

如果要是查看里面元数据或者容器模板的可以在deployment后面加上.metadata或者.spec

保存到文件中

kubectl get svc nginx-service -o yaml > my-svc.yaml

 

修改资源配置清单并应用

离线修改
修改yaml文件,并用 kubectl apply -f xxxx.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
kubectl apply -f nginx-svc.yaml
kubectl get svc

 举例说明:将svc的8080端口修改为7070

 

在线修改:

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

 

 并不是所有的资源都是可以在线修改的:例如资源名称

修改名字之后报错 

删除资源配置清单
 

陈述式删除:
kubectl delete service nginx

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

总结:

 yaml文件如何创建

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

YAML 语法格式

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

beta:测试版 

kubectl api-resources可以查看资源支持使用的版本

k8s资源配置信息

举例说明yaml文件格式

详解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。

手搓一个pod的yaml文件

首先先建立一个demo的目录,随后打开相同的终端利用kubetcl explain pod 查看pod的yaml需要哪些模板

 补充:标签中的键值对:

apiVersion: v1
kind: Pod
metadata:
  name: pod-demo1
  namespace: test01
  labels:
    appname: myapp
    appver: v1
spec:
  containers:
  - name: myapp
    image: soscscs/myapp:v1
    ports:
    - containerPort: 80
      name: http
      protocol: TCP
    - containerPort: 443
      name: https
      protocol:TCP
~                       

随后,查看一下

 同一个yaml可以生成多个pod

直接在yaml文件里修改

 

两个pod创建成功

 三   快速写yaml 文件方法

1,用 --dry-run 命令 创建但不执行

创建自主状态pod

kubectl run nginx-test --image=nginx --port=80 --dry-run=client

创建无状态pod

kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client

2,  查看生成yaml格式 

自主状态pod

kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml

无状态pod

kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml

 3,  查看生成json格式

自主状态pod

kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o json

无状态pod

kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o json

4,  使用yaml格式导出生成模板 

并进行修改以及删除一些不必要的参数

自主状态pod

kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml

无状态pod

kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml  > nginx-deploy.yaml
5,  将现有的资源生成模板导出
kubectl get svc nginx-service -o yaml
6,  保存到文件中
kubectl get svc nginx-service -o yaml > my-svc.yaml
7,  查看字段帮助信息,可一层层的查看相关资源对象的帮助信息

这个很重要,比如不知道deployment 的yaml 文件怎么写,可以输入 kubectl explain deployment

下面会提示你需要哪些信息

kubectl explain deployments.spec.template.spec.containers
 
 
或
kubectl explain pods.spec.containers

四    实战演练

1,用yaml 文件  k8s 运行nginx的pod实例

第一步必须先创建实例 ,如果不创建暴露端口就会报错

1.2 创建命名空间

kubectl create ns my-ky35 --dry-run=client -o yaml  >nginx.yaml

 

1.3 创建pod 实例

kubectl run  my-nginx-ky35 --image=nginx:1.14  --port=80 --labels=njzb=my-ky35 --dry-run=client  -n my-ky35 -o yaml  >> nginx.yaml 

 

1.4 创建service

kubectl expose pod  my-nginx-ky35  --port=80 --target-port=80 --name=nginx01 --type=NodePort --dry-run=client  -n my-ky35  -o yaml  >>nginx.yaml 

 

 tips: 此步骤 要先有命令空间   和  pod 实例

此步骤只是要 暴露端口的yaml语言

在此处,要把刚刚新建的pod 跟 命名空间删除 因为如果要执行yaml文件会产生pod与命名空间 会重复

 

1.5  修改得到的yaml 文件

apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: null
  name: my-ky35
spec: {}
status: {}
---
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    njzb: my-ky35
  name: my-nginx-ky35
  namespace: my-ky35
spec:
  containers:
  - image: nginx:1.14
    name: my-nginx-ky35
    ports:
    - containerPort: 80
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    njzb: my-ky35
  name: nginx01
  namespace: my-ky35
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    njzb: my-ky35
  type: NodePort
status:
  loadBalancer: {}

1.6  执行yaml 文件

kubectl apply -f nginx.yaml 

 进容器 做页面

kubectl exec -it  my-nginx-ky35 -n my-ky35 bash

二.用yaml 文件  k8s 运行redis的pod实例 (指定暴露端口)

首先必须要有命名空间和deployment实例

 随后,用dry-run 导入yaml文件,本质是不创建实例,但是yaml文件里面有

用deployment 控制器创造 redis 实例
kubectl create deployment my-redis-wyq --image=redis:latest  --port=6379  --dry-run=client  -n my-ky35 -o yaml  >> redis.yaml 
暴露端口
kubectl expose deployment  my-redis-wyq  --port=6379 --target-port=6379 --name=redis01 --type=NodePort --dry-run=client  -n my-ky35  -o yaml  >>redis.yaml 

注意:这边是创造的deployment

所以不论暴露端口还是  删除   都是指定deployment 名字

 修改yaml 文件

在两个apiVersion: apps/v1 中间加 ---

在暴露端口的那段yaml 文件    指定命名空间

添加nodeport   指定暴露端口

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: my-redis-wyq
  name: my-redis-wyq
  namespace: my-ky35
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-redis-wyq
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: my-redis-wyq
    spec:
      containers:
      - image: redis:latest
        name: redis
        ports:
        - containerPort: 6379
        resources: {}
status: {}
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: my-redis-wyq
  name: redis01
  namespace: my-ky35
spec:
  ports:
  - port: 6379
    protocol: TCP
    nodePort: 32333
    targetPort: 6379
  selector:
    app: my-redis-wyq
  type: NodePort
status:
  loadBalancer: {}
 执行yaml 文件
kubectl apply -f redis.yaml

访问 redis 

连接redis  测试

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值