声明式管理

ZYC·2024-02-28 09:23·11 次阅读

声明式管理

 声明式管理

离线式的修改#

 

 

kubectl expose pod nginx-d9d8cf5c7-rcdsg --name hanbao-shutiao --type=NodePort --port=9090 --target-port=80

 

 

#将端口改为8800,nodeport改为4371

 #4371不在端口范围内,所以报错

 #改为43710

 

 

在线修改#

 

 

 

 #修改为立即生效

 

 #将名字修改

 #报错

所以在线修改并不是所有的都允许修改

 

 YAML#

 

 

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo1
  namespace: hanbao
  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
复制代码

 

 

 

 

 

 

kubectl explain pod.spec.containers.ports

 

 

 #创建资源对象

 

 #查看hanbao命名空间里的pod服务的详细信息

 

 

 

 

 

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo1
  namespace: hanbao
  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
  -  name: busybox
     image: busybox
     command:
     -  /bin/sh
     -  -c
     -  sleep 3600
复制代码

 

 #无法更新,  那就重建

 

kubectl delete -f pod-demo1.yaml && kubectl apply -f pod-demo1.yaml

 

一小时后这个容器会自动退出

 

 

 

复制代码
apiVersion: apps/v1    #指定api版本标签
kind: Deployment      #定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata:             #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
  name: deploy-demo2  #定义资源的名称,在同一个namespace空间中必须是唯一的
  namespace: hanbao   #命名空间名称
  #labels:
  #annotations:
spec:                 #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
  replicas: 5         #定义副本数量
  selector:           #定义标签选择器
    matchLabels:      #定义匹配标签
      myname: myapp   #需与 .spec.template.metadata.labels 定义的标签保持一致

  template:           #定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
    metadata:
      labels:         #定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致
        myname: myapp
    spec:
      containers:     #定义容器属性
      - name: myapp   #定义一个容器名,一个 - name: 定义一个容器
        image: soscscs/myapp:v2   #定义容器使用的镜像以及版本
        ports:
        - containerPort: 80  #定义容器的对外的端口
          name: http
复制代码

 

 

 status可忽略

 

 

 

 

 

 

 

 描述命名空间的详细信息

kubectl describe deployments.apps -n hanbao deploy-demo2

 

 

Service yaml#

 

 

 

 

 

复制代码
apiVersion: v1
kind: Service
metadata:
  name: svc-demo3
  namespace: hanbao
spec:
  type: NodePort
  selector:
    myname: myapp
  ports:
  - port: 8080
    nodePort: 30888
    targetPort: 80
  clusterIP: 10.0.0.100
复制代码

 

 

 

 #创建

 

 #查看svc-demo3的详细信息

 

 

externalTrafficPolicy#

 

kubectl get -n hanbao svc svc-demo3 -o yaml

 

 

默认值为cluster,这个字段外部流量策略

 

externalTrafficPolicy”字段可以设置。有2个值可以设置:Cluster或者Local

1)Cluster表示:流量可以转发到其他节点上的Pod。

2)Local表示:流量只发给本机的Pod。

 

 

 

.

 

 #三个pod都可以转发

 #查看它们工作在哪个服务器上

 

 

 

 

通过资源配置清单创建资源对象#

复制代码
获取K8S资源配置清单文件模板?
1)手写yaml配置文件,可以根据 kubectl explain 命令获取字段信息
2)查看现有的资源配置获取:

kubectl get -n <命名空间> <资源类型> <资源名称> -o yaml > XXX.yaml
kubectl edit -n <命名空间> <资源类型> <资源名称> ,然后手动复制资源配置,粘贴到yaml文件中
3)无中生有(模拟运行kubectl陈述式创建资源的命令获取):

kubectl create|run|expose  选项  --dry-run=client -o yaml > XXX.yaml
4)复制K8S官网文档的资源配置案例

关于配置清单常见的字段
apiversion: #指定资源对象的在K8S中使用的api接口版本
kind: #指定资源对象的类型
metadata: #指定资源对象的元数据信息,比如name指定资源名称、namespace指定命名空间、annotation指定注释、label指定标签
spec: #指定资源对象的资源配置清单(配置属性) ,比如副本数、镜像、网络模式、存储卷、label selector标签选择器
status: #资源对象在当前的运行状态信息

复制代码

 

无中生有创建模板,修改文件创建新资源#

无中生有创建deployment资源

 

 

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

 

 

 

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: deploy-demo2.yaml
  name: deploy-demo2.yaml
spec:
  replicas: 3
  selector:
    matchLabels:
      app: deploy-demo2.yaml
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: deploy-demo2.yaml
    spec:
      containers:
      - image: nginx
        name: nginx
        ports:
        - containerPort: 80
        resources: {}
status: {}
复制代码

 

无中生有创建service资源

 

kubectl create svc nodeport svc-test --tcp=8080:80 --dry-run=client -o yaml > svc.yaml

 

 

复制代码
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: svc-test
  name: svc-test
spec:
  ports:
  - name: 8080-80
    port: 8080
    protocol: TCP
    targetPort: 80
  selector:
    app: svc-test
  type: NodePort
status:
  loadBalancer: {}
复制代码

 

 

补充案例#

复制代码
//kubectl run --dry-run=client 打印相应的 API 对象而不执行创建
kubectl run nginx-test --image=nginx --port=80 --dry-run=client
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client
 
//查看生成yaml格式
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml
 
//查看生成json格式
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o json
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o json
 
//使用yaml格式导出生成模板,并进行修改以及删除一些不必要的参数
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml  > nginx-deploy.yaml
复制代码

 

 

根据官方文档案例#

https://kubernetes.io/zh-cn/docs/home/

 

 

总结#

复制代码

声明式资源管理方式 (可理解成使用yaml配置文件里定义的配置来实现资源对象的管理操作)
通过kubectl get -n <命名空间> <资源类型> <资源名称> -o yaml > xxx.yaml #先获取资源配置清单
kubectl apply|create -f xxx.yaml #创建或更新资源
kubectl delete -f xxx.yaml #删除资源


kubectl edit -n <命名空间> <资源类型> <资源名称> #在线修改资源配置
对于不支持在线修改的字段只能通过离线修改的方式更新资源: kubectl delete -f xxx.yaml && kubectl apply -f xxx.yaml
kubectl explain <资源类型>、<一级字段>、<二级字段>... #获取资源配置字段的解释



#如何获取K8S资源配置清单文件模板(yaml配置文件)
1)手写yaml配置文件,可以根据kubectl explain 命令获取字段信息 2)查看现有的资源的配置获取: 通过kubectl get -n <命名空间> <资源类型> <资源名称> -o yaml > XXX.yaml / kubectl edit -n <命名空间> <资源类型> <资源名称>,然后手动复制资源配置,粘贴到yaml文件中 3)无中生有(模拟运行kubectl陈述式创建资源的命令来获取): kubectl create|run|expose 选项 --dry-run=client -o yaml > XXX.yaml 4)复制K8S官网文档的资源配置案列 #关于配置清单常见的字段 apiversion: #指定资源对象的在K8S中使用的api接口版本 kind: #指定资源对象的类型 metadata: #指定资源对象的元数据信息,比如name指定资源名称、namespace指定命名空间、annotation指定注释、label指定标签 spec: #指定资源对象的资源配置清单(配置属性) ,比如副本数、镜像、网络模式、存储卷、label selector标签选择器 status: #资源对象在当前的运行状态信息
复制代码

 

posted @   citywalk  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示
目录